目錄
前提
目前 mybatis 基本不直接使用, 而是使用 baomidou 進行增強,這個框架的背景圖就是 紅斗羅好基友的照片。簡直就是mybatis 的孿生欒弟。
基本使用步驟如下:
- 通過 baomidou 自帶的 CodeGenerator 生成器生成對應表的 dao 、do、service、action、mapper 層
- 調用 生成的 service就基本夠用了,保留批量插入。。
- 若涉及到多個表的查詢, 希望直接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>