前言
提示:这里可以添加本文要记录的大概内容:
文章目录
- 前言
- 一、常用方法
- 一、Bean
- 二、使用步骤
- 三、构造器
- 1、LambdaQueryWrapper
- 2、LambdaQueryChainWrapper 链式查询
- 3、三者区别
- 4、构造器拼接SQL
- 总结
一、常用方法
// LambdaQueryWrapper 构造不同类型的查询条件,
// orderByDesc 方法用于降序排序。
//需要注意:使用 LambdaQueryWrapper 时,需要先确定对应的实体类和数据库表之间的映射关系,并且该实体类必须使用 @TableName 注解指定了表名。同时,MyBatis-Plus 提供的查询方法名通常都是通过反射机制来完成的,因此在使用 Lambda 表达式时,要注意避免出现属性名和方法名不一致的情况。
// 1、根据指定条件进行查询一条记录。
LambdaQueryWrapper<SaveDevice> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SaveDevice::getDeviceUid, registerDTO.getDeviceUid());
SaveDevice saveDevice = saveDeviceMapper.selectOne(queryWrapper);
///1.1 查询指定名称的用户列表
List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>()
.eq(User::getName, "John")
.orderByDesc(User::getAge));
// 2、新增一条用户记录
User newUser = new User();
newUser.setName("Jack");
newUser.setEmail("jack@");
newUser.setAge(25);
int rows = userMapper.insert(newUser);
// 3、更新所有名字为 John 的用户记录,设置年龄为 30
int rows = userMapper.update(new User(), new LambdaQueryWrapper<User>()
.eq(User::getName, "John")
.set(User::getAge, 30));
///3.1、根据指定条件进行修改。
UpdateWrapper<SaveDevice> wrapper = new UpdateWrapper<>();
wrapper.eq("device_uid", registerDTO.getDeviceUid());
wrapper.set("psk", psk);
saveDeviceMapper.update(null, wrapper);
// 4、删除所有名字为 Jack 的用户记录
int rows = userMapper.delete(new LambdaQueryWrapper<User>()
.eq(User::getName, "Jack"));
// 5.批量查询
LambdaQueryWrapper<PlantLabelConfigPo> queryWrapper =
Wrappers.lambdaQuery(PlantLabelConfigPo.class)
.in(PlantLabelConfigPo::getId, listLabelId);
// 6.批量删除
LambdaQueryWrapper<PlantLabelInfoPo> wrapper = new QueryWrapper<PlantLabelInfoPo>().lambda();
wrapper.in(PlantLabelInfoPo::getPlantLabelId, idList);
plantLabelInfoDao.delete(wrapper);
// 7.构造器拼接SQL语句
LambdaQueryWrapper<ThingInfoPO> wrapper =
buildThingInfoQuery(tenantId).eq(ThingInfoPO::getCode, thing.getCode());
// 拼接构造条件
private LambdaQueryWrapper<ThingInfoPO> buildThingInfoQuery(@Nullable Long tenantId) {
LambdaQueryWrapper<ThingInfoPO> wrapper = new QueryWrapper<ThingInfoPO>().lambda();
if (tenantId != null) {
wrapper.eq(ThingInfoPO::getTenantId, tenantId);
}
return wrapper;
}
一、Bean
/**
* 新的分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
}
@Configuration
public class MyBatisPlusConfig {
/**
* 配置mybatis-plus 分页查件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
// 原文链接:/m0_48805880/article/details/122070016
二、使用步骤
public Page<User> selectPageLike(User user, PageDTO pageDTO){
Page<User> page= new Page(pageDTO.getPage(), pageDTO.getSize());
// new LambdaQueryChainWrapper<>();
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getEnabled, 1);
// 用户名
if (StringUtil.isNotEmpty(user.getUsername())) {
queryWrapper.like(User::getUsername, user.getUsername());
}
// 新建时间
if (StringUtil.isNotEmpty(user.getCreateTime().toString())) {
queryWrapper.eq(User::getCreateTime,user.getCreateTime());
}
return userMapper.selectPage(page, queryWrapper);
}
三、构造器
1、LambdaQueryWrapper
// LambdaQueryWrapper使用的是Lambda语法
@Test
public void mySelect() {
LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
query.likeRight(User::getName, "王")
.and(q -> q.lt(User::getAge, 40).or().isNotNull(User::getEmail));
List<User> list = userMapper.selectAll(query);
list.forEach(System.out::println);
}
2、LambdaQueryChainWrapper 链式查询
/**
* 链式lambda条件构造器:更优雅的书写方式
*/
@Test
public void lambdaQueryChainWrapper() {
List<User> list = new LambdaQueryChainWrapper<User>(userMapper)
.likeRight(User::getName, "王")
.and(
q -> q
.lt(User::getAge, 40)
.or()
.isNotNull(User::getEmail)
)
.list();
list.forEach(System.out::println);
}
// 原文链接:/jiahao1186/article/details/122154137
3、三者区别
1、QueryWrapper 直接使用写死“列名”方式,容易因拼写错误导致异常,当字段名称发生改变,导致额外更多检查和修改工作。如有错误,运行时报错。或者需要封装查询类的对象,增加代码量。
2、LambdaQueryWrapper 使用lambda表达式,如有错误,编译期就会报错;灵活。【推荐】
3、LambdaQueryChainWrapper,写法偏向于炫技,可读性没有上面的代码强。
4、构造器拼接SQL
// 构造器拼接SQL语句
LambdaQueryWrapper<ThingInfoPO> wrapper =
buildThingInfoQuery(tenantId).eq(ThingInfoPO::getCode, thing.getCode());
private LambdaQueryWrapper<ThingInfoPO> buildThingInfoQuery(@Nullable Long tenantId) {
LambdaQueryWrapper<ThingInfoPO> wrapper = new QueryWrapper<ThingInfoPO>().lambda();
if (tenantId != null) {
wrapper.eq(ThingInfoPO::getTenantId, tenantId);
}
return wrapper;
}
原文链接1
原文链接2
总结
========================努力干吧!菜鸟。