CRUD
CRUD指增加(Create)、读取(Read)、更新(Update)和删除(Delete),mybatis-plus提供了两种CRUD的接口,一种是Mapper的,一种是Service的(当然Service的CRUD实际上也是继承Mapper的),先来看看几个不用条件构造器的简单CRUD:
新增
@Test public void fndUserSaveTest() { FndUser fndUser = new FndUser(); fndUser.setJobNumber("123456789"); fndUser.setUserPhone("1888888888"); fndUser.setUserName("橙子"); fndUser.setLoginName("chenkang"); iFndUserService.save(fndUser); }
使用mybatis-plus的id生成策略,在保存的时候自动set值
根据id更新
@Test public void fndUserUpdateTest() { FndUser fndUser = new FndUser(); fndUser.setJobNumber("1234567891"); fndUser.setUserName("栗子"); fndUser.setId("1154034819131699202"); fndUser.setLoginName("lizi"); iFndUserService.updateById(fndUser); }
查询全部
@Test public void fndUserListTest() { List<FndUser> fndUserList = iFndUserService.list(); }
根据id删除
@Test public void fndUserDeleteTest() { iFndUserService.removeById("1154034819131699202"); }
这些最简单的增删改查,但实际情况下,我们需要更为灵活的运用这些接口,所以mybatis-plus也给我们提供了更灵活的条件构造器。
条件构造器
先上一个条件构造关系图:
上图绿色框为抽象类abstract
蓝色框为正常class类,可new对象
黄色箭头指向为父子类关系,箭头指向为父类
对于wrapper的介绍:
Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法西面贴源码展示
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
QueryWrapper是非常常用的条件构造器:
public List<FndUser> simpleQuery(FndUser fndUser) { QueryWrapper<FndUser> fndUserQueryWrapper = new QueryWrapper<>(); // 等于= 例: eq("name", "老王")--->name = '老王' fndUserQueryWrapper.eq("job_number", fndUser.getJobNumber()); // 大于等于 >= 例: ge("age", 18)--->age >= 18 fndUserQueryWrapper.ge("age", fndUser.getAge()); // LIKE '%值%' 例: like("name", "王")--->name like '%王%' fndUserQueryWrapper.like("login_name", fndUser.getLoginName()); // 排序:ORDER BY 字段, ... DESC 例: orderByDesc("id", "name")--->order by id DESC,name DESC fndUserQueryWrapper.orderByDesc("s_ct","job_number"); // Mapper的查询接口(当然对应的删除、更新、插入接口都是有的) return baseMapper.selectList(fndUserQueryWrapper); }
以上代码类似于sql
select * from fnd_user where job_number = '123456789' and age > 18 and login_name like '%wang%' order by s_ct,job_number desc
可以看出,使用条件构造器我们可以拼构出我们想要的的sql,
对于LambdaQueryWrapper,我们可以这样写:
public List<FndUser> lambdaSimpleQuery(FndUser fndUser) { LambdaQueryWrapper<FndUser> fndUserLambdaQueryWrapper = new LambdaQueryWrapper<>(); fndUserLambdaQueryWrapper // 等于= 例: eq("name", "老王")--->name = '老王' .eq(FndUser::getJobNumber, fndUser.getJobNumber()) // 大于等于 >= 例: ge("age", 18)--->age >= 18 .ge(FndUser::getAge, fndUser.getAge()) // LIKE '%值%' 例: like("name", "王")--->name like '%王%' .like(FndUser::getLoginName, fndUser.getLoginName()) // 排序:ORDER BY 字段, ... DESC 例: orderByDesc("id", "name")--->order by id DESC,name DESC .orderByDesc(FndUser::getSCt, FndUser::getJobNumber); // Service的查询接口(和Mapper的selectList接口是差不多的意思,) return super.list(fndUserLambdaQueryWrapper); }
其实就是换了种写法,意思还是一样的,就看你习惯那种写法;
还有一种常用的UpdateWrapper
public void simpleUpdate(FndUser fndUser) { UpdateWrapper<FndUser> fndUserUpdateWrapper = new UpdateWrapper<>(); // .lambda()这种形式和LambdaUpdateWrapper是一个意思 fndUserUpdateWrapper.lambda().set(FndUser::getJobNumber, fndUser.getJobNumber()) .set(FndUser::getLoginName, fndUser.getLoginName()); super.update(fndUserUpdateWrapper); }
可用来更新实体类,当然QueryWrapper也是可以用来更新,只不过时Service(或者Mapper)调用的接口方法不同而已,比如也可以这样:
public void simpleQueryWrapperUpdate(FndUser fndUser) { QueryWrapper<FndUser> fndUserQueryWrapper = new QueryWrapper<>(); fndUserQueryWrapper.eq("job_number", fndUser.getJobNumber()); super.update(fndUser, fndUserQueryWrapper); }
这段代码的意思其实就是根据fndUserQueryWrapper来作为更新的限制条件,而更新内容则是实体类fndUser
不同warpper的方法可能存在差异,但是常用的方法就那么一些,下面列出一些常用的:
以上内容来源于
https://mp.baomidou.com/
https://blog.csdn.net/m0_37034294/article/details/82917234




