目录
前提
目前 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>