Mybatis-plus 中Wrapper的使用
mybatis plus条件构造器关系图
1.上图绿色框为抽象类abstract
2.蓝色框为正常class类,可new对象
3.黄色箭头指向为父子类关系,箭头指向为父类
QueryWrapper
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取
@Test
public void query(){
QueryWrapper<Demo> queryWrapper = new QueryWrapper<>();
//需要查询出来的字段
queryWrapper.select("test1", "test2");
//排除或指定要查询的字段(常量在前,变量再后避免空指针)
queryWrapper.select(Demo.class,i -> !"1111".equals(i.getTest1()));
//对参数进行非空判断,代替if非空判断
queryWrapper.eq(StrUtil.isNotEmpty(name), "name", "张三");
List<Demo> list = iTestService.list(queryWrapper);
list.forEach(System.out::println);
// or 用法
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("name", "张三");
queryWrapper.and(wrapper -> wrapper.eq("age", 18).or().eq("sex", "男"));
}
UpdateWrapper
继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取
@Test
public void update(){
UpdateWrapper<ManagerSection> updateWrapper = new UpdateWrapper<>();
// 修改字段值
updateWrapper.set("status", status);
// 设置sql语句部分
updateWrapper.setSql("test3 = 18");
// where条件
updateWrapper.eq("id",id);
boolean result = iTestService.update(updateWrapper);
}
LambdaQueryWrapper
@Test
public void queryLambda(){
LambdaQueryWrapper<ManagerSectionPerson> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ManagerSectionPerson::getId, id)
.between(ManagerSectionPerson::getInvalid, 0, 1);
//对参数进行非空判断,代替if非空判断
queryWrapper.eq(StrUtil.isNotEmpty(name), ManagerSectionPerson::getName, "李四");
List<ManagerSectionPerson > personList = this.list(queryWrapper);
}
LambdaUpdateWrapper
@Test
public void updateLambda(){
LambdaUpdateWrapper<ManagerSectionPerson> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ManagerSectionPerson::getId, id)
.le(ManagerSectionPerson::getLockStatus, 30)
.set(ManagerSectionPerson::getInvalid, 1)
.setSql("status = 1");
this.update(updateWrapper);
}
使用 Wrapper 自定义SQL
-
在mapper文件中定义方法,方法的参数为:@Param(Constants.WRAPPER) Wrapper wrapper
-
在sql的最后添加上:${ew.customSqlSegment} ;
注解方式 Mapper.java
@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper);
XML形式 Mapper.xml
<select id="getAll" resultType="MysqlData">
SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步