>Mybatis-Plus根据条件更新(条件构造器)
在 Mybatis-Plus 项目中,很多时候需要根据条件更新特定的数据行,这时候可以使用到提供的 update() 方法。
下面以 PostCategories 对象为例简单演示下使用的方法。
1、创建对象并填入要更新的字段数据
例如更新 homePage 字段值为 false
PostCategories updateMessage = new PostCategories();
updateMessage.setHomePage(false);
2、创建条件构造器和查询条件
new QueryWrapper() 为条件构造器;
eq(“homePage”, true) 即是查询条件: where homePage = true,条件根据需要添加。
postCategoriesMapper.update(updateMessage, new QueryWrapper<PostCategories>().eq("homePage", true));
3、查看打印的sql语句
这样就达到了条件更新的目的。
特别注意:
1.使用这种方式,会覆盖掉原本update方法的特性,比如自动根据ID比对数据进行修改,这里一定注意加上ID判断(该有的所有判断),具体请看错误实例一:
2.传进条件构造器里边的column(字段名字),是数据库里边的字段名字,就是这个传进条件构造器里的字段名字,会被直接拼接到SQL里边,如果写实体类名字,就会报错,具体看错误实例二:
4.错误的实例:
这里没有在条件构造器里塞入 id值 判断 , 如此以来,mybatisPlus就不会在条件的地方拼接 id判断
@Override
public int update(AlarmInformVO vo) {
AlarmInform alarmInform = voToEntity(vo);
int i = alarmInformMapper.update(alarmInform,
new QueryWrapper<AlarmInform>().eq("valid", 0));
return i;
}
private AlarmInform voToEntity(AlarmInformVO vo){
AlarmInform alarmInform = new AlarmInform();
BeanUtils.copyProperties(vo,alarmInform);
return alarmInform;
}
5.正确的实例一
@Override
public int update(AlarmInformVO vo) {
AlarmInform alarmInform = voToEntity(vo);
QueryWrapper<AlarmInform> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("id",vo.getId());
queryWrapper.eq("valid", 0);
int i = alarmInformMapper.update(alarmInform,queryWrapper);
return i;
}
对! 条件构造器QueryWrapper是可以点拼多个条件的,尽情往后点,往后加就可以了
6.错误实例二
column 里边的参数,K值是数据库中的字段名,不是实体类中的变量名,这一点要注意!!!
7.正确的实例
@Override
public AlarmDisposeVO findById(Long id) {
// 查询报警通知信息
AlarmInform alarmInform = alarmInformService.findById(id);
AlarmInformVO alarmInformVO = new AlarmInformVO();
try {
if (alarmInform != null) BeanUtils.copyProperties(alarmInform,alarmInformVO,new String[]{"startdTime","endTime"});
} catch (BeansException e) {
logger.error("alarmInform 拷贝失败,程序错误!!" + alarmInform);
}
QueryWrapper<AlarmDispose> alarmDisposeQueryWrapper = new QueryWrapper<>();
// 重点在这里!!!
alarmDisposeQueryWrapper.eq("alarm_inform_id",id).eq("valid",0);
AlarmDispose alarmDispose = alarmDisposeMapper.selectOne(alarmDisposeQueryWrapper);
AlarmDisposeVO alarmDisposeVO = new AlarmDisposeVO();
try {
if (alarmDispose !=null) BeanUtils.copyProperties(alarmDispose,alarmDisposeVO,new String[]{"alarmInformVO"});
} catch (Exception e) {
logger.error("alarmDispose 拷贝失败,程序错误!!" +alarmDispose);
}
alarmDisposeVO.setAlarmInformVO(alarmInformVO);
return alarmDisposeVO;
}