暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Mybatis-plus的使用(四)——CRUD与条件构造器

橙子与栗子与世界 2019-10-19
392

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的介绍:

  1. Wrapper : 条件构造抽象类,最顶端父类,抽象类中提供4个方法西面贴源码展示

  2. AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件

  3. AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。

  4. LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper

  5. LambdaUpdateWrapper : Lambda 更新封装Wrapper

  6. QueryWrapper : Entity 对象封装操作类,不是用lambda语法

  7. 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

文章转载自橙子与栗子与世界,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论