QueryWrapper、UpdateWrapper和LambdaWrapper

前提

目前 mybatis 基本不直接使用, 而是使用 baomidou 进行增强,这个框架的背景图就是 红斗罗好基友的照片。简直就是mybatis 的孪生栾弟。
基本使用步骤如下:

  1. 通过 baomidou 自带的 CodeGenerator 生成器生成对应表的 dao 、do、service、action、mapper 层
  2. 调用 生成的 service就基本够用了,保留批量插入。。
  3. 若涉及到多个表的查询, 希望直接SQL 就进行表的join等复杂逻辑,则可以单独在 mapper.xml中 进行复杂SQL的编写,再在 dao中封装调用

QueryWrapper、UpdateWrapper和LambdaWrapper 使用闭坑指南

QueryWrapper

select函数

select(String... sqlSelect)
select(Predicate<TableFieldInfo> predicate)
select(Class<T> entityClass, Predicate<TableFieldInfo> predicate)

/**
* 设置所要查询的字段
*/
@Test
public void test01(){
   QueryWrapper<User> queryWrapper = new QueryWrapper<>();
   queryWrapper.select("name","age");
   List<User> users = userMapper.selectList(queryWrapper);
   users.forEach(System.out::println);
}

第二种方法的使用(可以排除或指定查询字段)

QueryWrapper<Admin> wrapper = new QueryWrapper<>();
// 下列构造方式指定排除password字段
wrapper.select(Admin.class,i -> !i.getColumn().equals("password"));

UpdateWrapper

set函数

set(String column, Object val)
set(boolean condition, String column, Object val)

@Test
public void test03(){
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.in("age",Arrays.asList(20,30,40));
    updateWrapper.set("name","jack");
    updateWrapper.set("age",43);
    updateWrapper.set("email","sakara@qq.top");
    userService.update(updateWrapper);
}

setSql函数 ,设置 SET 部分 SQL

setSql(String sql)

 /**
  * 根据 UpdateWrapper 条件,更新记录 需要设置 sqlset
  */
@Test
public void test06(){
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    // 设置 set sql语句部分
    updateWrapper.setSql("age = 18");
    updateWrapper.eq("name","jason");
    userService.update(updateWrapper);
}

LambdaWrapper

获取 LambdaWrapper
在QueryWrapper中是获取LambdaQueryWrapper
在UpdateWrapper中是获取LambdaUpdateWrapper

LambdaQueryWrapper

@Test
public void test88(){
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.lambda()
            .between(User::getAge,30,60)
            .orderByDesc(User::getId);
    List<User> list = userService.list(queryWrapper);
    list.forEach(System.out::println);
}

LambdaUpdateWrapper

@Test
public void test99(){
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.lambda()
            .le(User::getAge, 30)
            .setSql("email = 'le30@duck.top'");
    userService.update(updateWrapper);
}

使用 Wrapper 自定义SQL

方案一 注解方式 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>
原文地址:https://www.cnblogs.com/yyystar/p/15510440.html