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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM