mybatis-plus深入学习篇(三)
1 准备工作
1.1 建表sql语句(Emp表)
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0 ;
DROP TABLE IF EXISTS ` emp` ;
CREATE TABLE ` emp` (
` EMPNO` int NOT NULL AUTO_INCREMENT ,
` ENAME` varchar ( 10 ) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL ,
` JOB` varchar ( 9 ) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL ,
` MGR` double NULL DEFAULT NULL ,
` HIREDATE` date NULL DEFAULT NULL ,
` SAL` double NULL DEFAULT NULL ,
` COMM` double NULL DEFAULT NULL ,
` DEPTNO` int NULL DEFAULT NULL ,
PRIMARY KEY ( ` EMPNO` ) USING BTREE ,
INDEX ` DEPTNO` ( ` DEPTNO` ) USING BTREE ,
CONSTRAINT ` emp_ibfk_1` FOREIGN KEY ( ` DEPTNO` ) REFERENCES ` dept` ( ` DEPTNO` ) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 8900 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;
INSERT INTO ` emp` VALUES ( 7369 , '老张123' , 'CLERK' , 7902 , '1980-12-30' , 1200 , 0 , 20 ) ;
INSERT INTO ` emp` VALUES ( 7499 , 'ALLEN' , 'SALESMAN' , 7698 , '1981-02-20' , 1700 , 1200 , 30 ) ;
INSERT INTO ` emp` VALUES ( 7521 , 'WARD' , 'SALESMAN' , 7698 , '1981-02-22' , 1250 , 500 , 30 ) ;
INSERT INTO ` emp` VALUES ( 7566 , 'JONES' , 'MANAGER' , 7839 , '1981-04-02' , 3975 , NULL , 20 ) ;
INSERT INTO ` emp` VALUES ( 7654 , 'MARTIN' , 'SALESMAN' , 7698 , '1981-09-28' , 1250 , 1400 , 30 ) ;
INSERT INTO ` emp` VALUES ( 7698 , 'BLAKE' , 'MANAGER' , 7839 , '1981-05-01' , 2850 , NULL , 30 ) ;
INSERT INTO ` emp` VALUES ( 7782 , 'CLARK' , 'MANAGER' , 7839 , '1981-06-09' , 2450 , NULL , 10 ) ;
INSERT INTO ` emp` VALUES ( 7788 , 'SCOTT' , 'ANALYST' , 7566 , '1987-07-13' , 4000 , NULL , 20 ) ;
INSERT INTO ` emp` VALUES ( 7839 , 'KING' , 'PRESIDENT' , NULL , '1981-11-17' , 5000 , NULL , 10 ) ;
INSERT INTO ` emp` VALUES ( 7844 , 'TURNER' , 'SALESMAN' , 7698 , '1981-09-08' , 1500 , 0 , 30 ) ;
INSERT INTO ` emp` VALUES ( 7876 , 'ADAMS' , 'CLERK' , 7788 , '1987-07-13' , 2100 , NULL , 20 ) ;
INSERT INTO ` emp` VALUES ( 7900 , 'JAMES' , 'CLERK' , 7698 , '1981-12-03' , 950 , NULL , 30 ) ;
INSERT INTO ` emp` VALUES ( 7902 , 'FORD' , 'ANALYST' , 7566 , '1981-12-03' , 4000 , NULL , 20 ) ;
INSERT INTO ` emp` VALUES ( 8896 , '小明' , 'MANAGER' , 7698 , '2023-01-02' , 6666 , 800 , 10 ) ;
INSERT INTO ` emp` VALUES ( 8897 , '小红' , 'SALESMAN' , 7698 , '2023-02-08' , 5000 , 1000 , 10 ) ;
INSERT INTO ` emp` VALUES ( 8898 , 'zhang1' , 'SALESMAN' , 7698 , '2023-01-31' , 1243 , 234 , 10 ) ;
INSERT INTO ` emp` VALUES ( 8900 , '雄安' , 'MANAGER' , 7698 , '2023-02-05' , 13 , 123 , 10 ) ;
SET FOREIGN_KEY_CHECKS = 1 ;
1.2 准备好测试环境
import com. zlz. ShiroStart2 ;
import org. springframework. boot. test. context. SpringBootTest ;
@SpringBootTest ( classes = ShiroStart2 . class , webEnvironment = SpringBootTest. WebEnvironment . NONE )
public class DemoTest {
}
2 使用UpdateWrapper实现修改功能
2.1 题目内容
//对用户名中含有z且(工资大于1000或者入职日期为2023-01-01)的用户信息进行修改,修改其津贴(comm)为888,并把部门编号改成20
2.2 对应的sql语句
UPDATE emp SET comm= 888 , deptno= 20 WHERE ( ename LIKE '%z%' AND ( sal > 1000 OR hiredate = '2023-01-01' ) )
2.3 示例代码
@Test
public void a8 ( ) {
UpdateWrapper < Emp > updateWrapper= new UpdateWrapper < > ( ) ;
updateWrapper. like ( "ename" , 'z' )
. and ( i-> i. gt ( "sal" , 1000 ) . or ( ) . eq ( "hiredate" , "2023-01-01" ) ) ;
updateWrapper. set ( "comm" , 888 ) . set ( "deptno" , "20" ) ;
int update = empMapper. update ( null , updateWrapper) ;
System . out. println ( "受影响行数为: " + update) ;
}
2.4 运行截图
2.4.1 实际执行的sql语句截图
2.4.2 数据显示截图
2.4.3 修改前数据库的数据
2.4.4 修改后数据库的数据
3 组装条件查询1(if判断的形式)
3.1 题目内容
//模拟在用户点击查询时的,对应的搜索关键字的情况
3.2 对应的sql语句
SELECT EMPNO, ename, job, mgr, hiredate, sal, comm, deptno FROM emp WHERE ( sal >= 1000 AND sal <= 2000 )
3.3 示例代码
@Test
public void a9 ( ) {
String ename= "" ;
Integer salStart= 1000 ;
Integer salEnd= 2000 ;
QueryWrapper < Emp > empQueryWrapper = new QueryWrapper < > ( ) ;
if ( StringUtils . isNotBlank ( ename) ) {
empQueryWrapper. like ( "ename" , ename) ;
}
if ( salStart != null ) {
empQueryWrapper. ge ( "sal" , salStart) ;
}
if ( salEnd != null ) {
empQueryWrapper. le ( "sal" , salEnd) ;
}
List < Emp > emps = empMapper. selectList ( empQueryWrapper) ;
emps. forEach ( System . out:: println ) ;
}
3.4 运行截图
3.4.1 实际执行的sql语句截图
3.4.2 数据显示截图
4 组装条件查询2(使用condition)
4.1 题目内容
//模拟在用户点击查询时的,对应的搜索关键字的情况
4.2 对应的sql语句
SELECT EMPNO, ename, job, mgr, hiredate, sal, comm, deptno FROM emp WHERE ( sal >= 1000 AND sal <= 2000 )
4.3 示例代码
@Test
public void a10 ( ) {
String ename= "" ;
Integer salStart= 1000 ;
Integer salEnd= 2000 ;
QueryWrapper < Emp > empQueryWrapper = new QueryWrapper < > ( ) ;
empQueryWrapper. like ( StringUtils . isNotBlank ( ename) , "ename" , ename) ;
empQueryWrapper. ge ( salStart != null , "sal" , salStart) ;
empQueryWrapper. le ( salEnd != null , "sal" , salEnd) ;
List < Emp > emps = empMapper. selectList ( empQueryWrapper) ;
emps. forEach ( System . out:: println ) ;
}
4.4 运行截图
4.4.1 实际执行的sql语句截图
4.4.2 数据显示截图
5 使用LambdaQueryWrapper构造器
5.1 题目内容
//模拟在用户点击查询时的,对应的搜索关键字的情况
//查询工资为1000-2000范围内的员工信息
5.2 对应的sql语句
SELECT EMPNO, ename, job, mgr, hiredate, sal, comm, deptno FROM emp WHERE ( sal >= 1000 AND sal <= 2000 )
5.3 示例代码
@Test
public void a11 ( ) {
String ename= "" ;
Integer salStart= 1000 ;
Integer salEnd= 2000 ;
LambdaQueryWrapper < Emp > qw= new LambdaQueryWrapper < > ( ) ;
qw. like ( StringUtils . isNotBlank ( ename) , Emp :: getEname , ename)
. ge ( salStart!= null , Emp :: getSal , salStart)
. le ( salEnd!= null , Emp :: getSal , salEnd) ;
List < Emp > emps = empMapper. selectList ( qw) ;
emps. forEach ( System . out:: println ) ;
}
5.4 运行截图
5.4.1 实际执行的sql语句截图
5.4.2 数据显示截图
6 使用LambdaUpdateWrapper构造器
6.1 题目内容
//对用户名中含有z且(工资大于1000或者入职日期为2023-01-01)的用户信息进行修改,修改其津贴(comm)为1666,并把部门编号改成10
6.2 对应的sql语句
UPDATE emp SET comm= 1600 , deptno= 10 WHERE ( ename LIKE '%z%' AND ( sal > 1000 OR hiredate = '2023-01-01' ) )
6.3 示例代码
@Test
public void a12 ( ) {
LambdaUpdateWrapper < Emp > updateWrapper= new LambdaUpdateWrapper < > ( ) ;
updateWrapper. like ( Emp :: getEname , 'z' )
. and ( i-> i. gt ( Emp :: getSal , 1000 ) . or ( ) . eq ( Emp :: getHiredate , "2023-01-01" ) ) ;
updateWrapper. set ( Emp :: getComm , 1666 ) . set ( Emp :: getDeptno , "10" ) ;
int update = empMapper. update ( null , updateWrapper) ;
System . out. println ( "受影响行数为: " + update) ;
}
6.4 运行截图
6.4.1 实际执行的sql语句截图
6.4.2 数据显示截图
6.4.3 修改前数据库的数据
6.4.4 修改后数据库的数据