对于MyBatis-Plus进行批量更新,可以使用其提供的UpdateWrapper或LambdaUpdateWrapper对象。
例子:查询符合条件的配置进行批量更新属性
// 实体类 ConfigTailDo
// Mapper层接口 configTailDao
// 接口调用 update方法
int rows = configTailDao.update(null, new UpdateWrapper<ConfigTailDo>()
.eq("config_code", dto.getCode())
.eq("state", Constants.UN_DISABLE)
.set("state", Constants.DISABLE));
/**
* 禁用配置,连带禁用配置详情(1启用;0禁用)
*/
public int disableOr(ConfigDo dto) {
if (dto.getCode() == null || "".equals(dto.getCode())) {
return IntConstants.THREE;
}
ConfigDo configDo = selectConfigByCode(dto.getCode());
// 提交状态与当前状态相同
if (dto.getState().equals(configDo.getState())) {
return IntConstants.TWO;
}
int num = configDao.updateById(dto);
// 如为执行禁用操作
if (num == IntConstants.ONE && Constants.DISABLE.equals(dto.getState())) {
// 禁用配置详情
configTailDao.update(null, new UpdateWrapper<ConfigTailDo>()
.eq("config_code", dto.getCode())
.eq("state", Constants.UN_DISABLE)
.set("state", Constants.DISABLE));
}
return num;
}
Mybatis-Plus 可以通过 Wrapper 类来实现多个分组条件查询。
例子:根据配置类型获取字典
/**
* 根据类型获取配置
*/
public List<ConfigDo> getList() {
List<ConfigDo> configDos = configDao.selectList(new QueryWrapper<ConfigDo>()
.select("type, type_name, count(*) as count")
.groupBy("type")
.groupBy("type_name"));
for (ConfigDo c : configDos) {
c.setKey(c.getType());
c.setLabel(c.getTypeName());
List<ConfigDo> selectList = configDao.selectList(new QueryWrapper<ConfigDo>().eq("type", c.getType()));
selectList.forEach(o -> {o.setKey(o.getCode());o.setLabel(o.getName());});
c.setChildren(selectList);
}
}