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()));
List<Demo> list = iTestService.list(queryWrapper);
list.forEach(System.out::println);
}
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);
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>