QueryWrapper、UpdateWrapper和LambdaWrapper的使用

2年前 (2022) 程序员胖胖胖虎阿
267 0 0

mybatis plus条件构造器关系图

QueryWrapper、UpdateWrapper和LambdaWrapper的使用

 介绍 :

1.上图绿色框为抽象类abstract
2.蓝色框为正常class类,可new对象
3.黄色箭头指向为父子类关系,箭头指向为父类

废话不多说,直接上示例 :

注:示例中的 Service接口 都继承了 IService 的接口 

1. QueryWrapper

继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取到

1.1 select函数

//String... sqlSelect 表示不定参数,也就是调用这个方法的时候这里可以传入多个String对象。
select(String... sqlSelect)
select(Predicate<TableFieldInfo> predicate)
select(Class<T> entityClass, Predicate<TableFieldInfo> predicate)
  • 设置查询字段

过滤查询字段,入参不包含 class 的调用前需要wrapper内的entity属性必须有值! 这两类方法重复调用以最后一次调用为准!

  • 示例
@Test
public void test(){
    QueryWrapper<Demo> queryWrapper = new QueryWrapper<>();
    //需要查询出来的字段
    queryWrapper.select("test1","test2");
    List<Demo> list = demoMapper.selectList(queryWrapper);
    list.forEach(System.out::println);
}

 控制台输出

Demo(id=null, test1=1111, test2=2222, test3=null, test4=null)
Demo(id=null, test1=5555, test2=6666, test3=null, test4=null)
  • 可以排除或指定要查询的字段
QueryWrapper<Demo> wrapper = new QueryWrapper<>();
//常量在前,变量再后避免空指针
wrapper.select(Demo.class,i -> !"1111".equals(i.getTest1()));

2. UpdateWrapper

继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取!

2.1 set函数

//column 表字段,val 值 ,condition表示该条件是否加入最后生成的sql中
set(String column, Object val)
set(boolean condition, String column, Object val)
  • 示例

UpdateWrapper<ManagerSection> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("status",status);
updateWrapper.eq("id",id);
boolean result = iProjectUnitService.update(updateWrapper);

2.2 setSql函数

setSql(String sql)
  • 示例

@Test
public void test(){
    UpdateWrapper<Demo> updateWrapper = new UpdateWrapper<>();
    // 设置sql语句部分
    updateWrapper.setSql("test3 = 18");
    updateWrapper.eq("test1","1111");
    userService.update(updateWrapper);
}

3. LambdaWrapper

3.1 LambdaQueryWrapper

LambdaQueryWrapper<ManagerSectionPerson> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(ManagerSectionPerson::getId,id)
            .between(ManagerSectionPerson::getInvalid,0,1);
List<ManagerSectionPerson > personList = this.list(queryWrapper);

3.2 LambdaUpdateWrapper

LambdaUpdateWrapper<ManagerSectionPerson> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ManagerSectionPerson::getId, id)
             .le(ManagerSectionPerson::getLockStatus,30)
             .set(ManagerSectionPerson::getInvalid,1)
             .setSql("status = 1");
this.update(updateWrapper);

4.使用 Wrapper 自定义SQL

4.1  注解方式 Mapper.java

@Select("select * from mysql_data ${ew.customSqlSegment}")
List<MysqlData> getAll(@Param(Constants.WRAPPER) Wrapper wrapper

4.2  XML形式 Mapper.xml

<select id="getAll" resultType="MysqlData">
	SELECT * FROM mysql_data ${ew.customSqlSegment}
</select>

 下面图表为条件构造器使用中的各个方法格式和说明,如有不懂可参考官方文档内容在这里插入图片描述

版权声明:程序员胖胖胖虎阿 发表于 2022年10月20日 下午6:56。
转载请注明:QueryWrapper、UpdateWrapper和LambdaWrapper的使用 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...