MyBatis-Plus 条件构造器(Wrapper) - 简书 (jianshu.com)
mybatis-plus update 更新操作_ChengLc1612的博客-CSDN博客
Mybatis-Plus(mbp) 提供 Wrapper 极大的减少大家的写SQL 的时间,Wrapper 类封装了大量的逻辑方法 eq , gt , lt等,使得操作数据库的代码进一步简洁。
更新
在代码中有更新数据的需求,发现 mbp 提供了 UpdateWrapper 类简化更新的操作。
继承自 BaseMapper 的自定以mapper的 update() 有这两个参数
/**
* 根据 whereEntity 条件,更新记录
*
* @param entity 实体对象 (set 条件值,可以为 null)
* @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
*/
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
实体对象可以为null且为set条件值,说明有两种方法可以实现更新。
第一种:
将需要更新的字段,设置到entity 中
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("name","shimin");
User user = new User();
user.setAge(18);
Integer rows = userMapper.update(user, updateWrapper);
第二种:
可以将entity设置为 null ,将需要更新的字段设置到 UpdateWrapper 中
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("id","123")eq("name","shimin");
Integer rows = userMapper.update(null, updateWrapper);
分页
在之前都是通过使用原生sql来完成分页的功能,需编写大量繁杂,重复且不能保证字段拼写正确的字段。其实 MyBatisPlus 已经很好的封装了分页的基本功能。
/**
* 分页
*
* @param req
* @return
*/
public ResponseInfo<List<Resp>> page(Req req) {
//组装lambdaquery参数
LambdaQueryWrapper<PartBase> query = new LambdaQueryWrapper<PartBase>()
//先判断字段是否为空
.like(StringUtils.hasText(req.getBaseErpCode()), PartBase::getBaseErpCode, req.getBaseErpCode())
.eq(Objects.nonNull(req.getEnabled()), PartBase::getEnabled, req.getEnabled());
//使用MyBatisPlus分页功能
Page<PartBase> page = partBaseService.page(new Page<>(req.getPageNum(), req.getPageSize()), query);
//...
return responseInfo;
}
LambdaQueryWrapper的like方法会有判断字段是否为空,然后再执行后面的查询条件,类似于xml中的
<if test="req.planNo != null and req.planNo != '' ">
AND t.plan_no = #{req.planNo}
</if>