MyBatis-Plus 一些记录(1)

本文介绍了MyBatis-Plus的查询与更新操作,包括:1.使用or()进行简单OR查询;2.结合and()和or()处理复杂条件;3.通过limit获取前n条数据;4.利用LambdaUpdateWrapper进行Lambda表达式更新;5.解释了Mapper的updateById()方法无法将字段更新为null的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.or 查询

简单or查询,拼装条件用or()方法连接

// mybatis-plus
List<Student> list = studentService.list( 
                      new QueryWrapper<Student>()
                      .eq("sex", "男")
                      .or()
                      .eq("name", "张三")
                      );
//对应sql
select * from student where ( sex = ? or name= ? )

2.and()和or()一起使用

查询条件中出现(A or B)and (C or D)情况查询:

// mybatis-plus				  
List<Student> list = studentService.list(
                new QueryWrapper<Student>()
                .eq("name", "张三")
                .or(qw->qw.eq("sex", "男").eq("age",24))

//对应sql
select * from student where ( name = ? or ( ( sex = ? and age = ? ) ) )


 查询条件中出现(A and B) or (C and D)情况查询:

// mybatis-plus				  
List<Student> list = studentService.list(
                new QueryWrapper<Student>()
                .eq("name", "张三")
                and(qw->qw->qw.eq("sex", "男").eq("age",24))

//对应sql
select * from student where ( name = ? and ( ( sex = ? and age = ? ) ) )

3.取前n条 limit n

 List<String> taskIds = taskMapper.selectList(
                new QueryWrapper<Task>().select("taskId")
                .in("status", Arrays.asList(Constants.WAITING, Constants.RUNNING))
                .or(qw->qw.eq("status",Constants.SUCCESS).isNull("endTime"))
                .last("limit 100"))
                .stream().map(TaskEntity::getTaskId).collect(Collectors.toList());

4.LambdaUpdateWrapper 使用

 int updateCount= taskMapper.update(null ,new LambdaUpdateWrapper<>(Task.class)
                        .eq(Task::getTaskId, taskId)
                        .set(Task::getStatus, Constants.SUCCESS)
                        .set(Task::getEndTime, new Date()));

5. Mapper封装的updateById()方法不能将字段更新为null

用updateById方法来更新数据时,把一个字段设置为null,实际更新后数据没有为null还是原来的值,原因是mybatis-plus在更新的时候做了null判断,默认不更新为null的传参。

解决方法:

官网说明:

补充: 注解方式在实体类对应的字段上加注解@TableField(strategy=FieldStrategy.IGNORED),忽略null值的判断;

全局注解和字段注解不推荐,可能对其他方法造成影响

在mybatis-plus中,除了updateById方法,还提供了一个update方法,除了以上官网的写法,还可以这样写:

LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>();
wrapper.set(User::getAge(), null);
wrapper.eq(User::getId(),id);
mapper.update(null,wrapper);

// 或者
LambdaUpdateWrapper<User> wrapper = new LambdaUpdateWrapper<>()
                .eq(User::getId,id);
User user = new User();
user.setAge(null);
mapper.update(user, wrapper);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值