优化:使用 MyBatis Plus ChainWrapper 优化部分 QueryWrapper 的写法

This commit is contained in:
Charles7c 2023-02-16 21:00:12 +08:00
parent 56449263d3
commit 1319cb3264
3 changed files with 77 additions and 30 deletions

View File

@ -32,6 +32,11 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.core.toolkit.ReflectionKit;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
import com.baomidou.mybatisplus.extension.toolkit.ChainWrappers;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
@ -246,4 +251,51 @@ public abstract class BaseServiceImpl<M extends BaseMapper<T>, T, V, D, Q, C ext
protected Class<D> currentDetailVoClass() {
return (Class<D>)ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 3);
}
/**
* 链式查询
*
* @return QueryWrapper 的包装类
*/
protected QueryChainWrapper<T> query() {
return ChainWrappers.queryChain(baseMapper);
}
/**
* 链式查询lambda
*
* @return LambdaQueryWrapper 的包装类
*/
protected LambdaQueryChainWrapper<T> lambdaQuery() {
return ChainWrappers.lambdaQueryChain(baseMapper, entityClass);
}
/**
* 链式查询lambda
*
* @param entity
* 实体对象
* @return LambdaQueryWrapper 的包装类
*/
protected LambdaQueryChainWrapper<T> lambdaQuery(T entity) {
return ChainWrappers.lambdaQueryChain(baseMapper, entity);
}
/**
* 链式更改
*
* @return UpdateWrapper 的包装类
*/
protected UpdateChainWrapper<T> update() {
return ChainWrappers.updateChain(baseMapper);
}
/**
* 链式更改lambda
*
* @return LambdaUpdateWrapper 的包装类
*/
protected LambdaUpdateChainWrapper<T> lambdaUpdate() {
return ChainWrappers.lambdaUpdateChain(baseMapper);
}
}

View File

@ -26,8 +26,6 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.tree.Tree;
@ -62,8 +60,8 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
@Transactional(rollbackFor = Exception.class)
public Long create(DeptRequest request) {
String deptName = request.getDeptName();
boolean isExist = this.checkNameExist(deptName, request.getParentId(), request.getDeptId());
CheckUtils.throwIf(() -> isExist, String.format("新增失败,'%s'已存在", deptName));
boolean isExists = this.checkNameExists(deptName, request.getParentId(), request.getDeptId());
CheckUtils.throwIf(() -> isExists, String.format("新增失败,'%s'已存在", deptName));
// 保存信息
request.setStatus(DisEnableStatusEnum.ENABLE);
@ -74,8 +72,8 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
@Transactional(rollbackFor = Exception.class)
public void update(DeptRequest request) {
String deptName = request.getDeptName();
boolean isExist = this.checkNameExist(deptName, request.getParentId(), request.getDeptId());
CheckUtils.throwIf(() -> isExist, String.format("新增失败,'%s'已存在", deptName));
boolean isExists = this.checkNameExists(deptName, request.getParentId(), request.getDeptId());
CheckUtils.throwIf(() -> isExists, String.format("修改失败,'%s'已存在", deptName));
super.update(request);
}
@ -85,7 +83,7 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
public void delete(List<Long> ids) {
CheckUtils.throwIf(() -> userService.countByDeptIds(ids) > 0, "所选部门存在用户关联,请解除关联后重试");
super.delete(ids);
baseMapper.delete(Wrappers.<DeptDO>lambdaQuery().in(DeptDO::getParentId, ids));
super.lambdaUpdate().in(DeptDO::getParentId, ids).remove();
}
@Override
@ -109,18 +107,18 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
*/
private List<DeptVO> deDuplication(List<DeptVO> list) {
List<DeptVO> deDuplicationList = new ArrayList<>();
for (DeptVO outerDept : list) {
for (DeptVO outer : list) {
boolean flag = true;
for (DeptVO innerDept : list) {
for (DeptVO inner : list) {
// 忽略重复子列表
if (innerDept.getDeptId().equals(outerDept.getParentId())) {
if (inner.getDeptId().equals(outer.getParentId())) {
flag = false;
break;
}
}
if (flag) {
deDuplicationList.add(outerDept);
deDuplicationList.add(outer);
}
}
return deDuplicationList;
@ -153,17 +151,17 @@ public class DeptServiceImpl extends BaseServiceImpl<DeptMapper, DeptDO, DeptVO,
/**
* 检查名称是否存在
*
* @param deptName
* 部门名称
* @param name
* 名称
* @param parentId
* 上级部门 ID
* @param deptId
* 部门 ID
* 上级 ID
* @param id
* ID
* @return 是否存在
*/
private boolean checkNameExist(String deptName, Long parentId, Long deptId) {
return baseMapper.exists(Wrappers.<DeptDO>lambdaQuery().eq(DeptDO::getDeptName, deptName)
.eq(DeptDO::getParentId, parentId).ne(deptId != null, DeptDO::getDeptId, deptId));
private boolean checkNameExists(String name, Long parentId, Long id) {
return super.lambdaQuery().eq(DeptDO::getDeptName, name).eq(DeptDO::getParentId, parentId)
.ne(id != null, DeptDO::getDeptId, id).exists();
}
@Override

View File

@ -23,8 +23,6 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import top.charles7c.cnadmin.common.base.BaseServiceImpl;
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
import top.charles7c.cnadmin.common.util.validate.CheckUtils;
@ -54,7 +52,7 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO,
@Transactional(rollbackFor = Exception.class)
public Long create(RoleRequest request) {
String roleName = request.getRoleName();
boolean isExist = this.checkNameExist(roleName, request.getRoleId());
boolean isExist = this.checkNameExists(roleName, request.getRoleId());
CheckUtils.throwIf(() -> isExist, String.format("新增失败,'%s'已存在", roleName));
// 保存信息
@ -66,7 +64,7 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO,
@Transactional(rollbackFor = Exception.class)
public void update(RoleRequest request) {
String roleName = request.getRoleName();
boolean isExist = this.checkNameExist(roleName, request.getRoleId());
boolean isExist = this.checkNameExists(roleName, request.getRoleId());
CheckUtils.throwIf(() -> isExist, String.format("修改失败,'%s'已存在", roleName));
super.update(request);
@ -82,14 +80,13 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleVO,
/**
* 检查名称是否存在
*
* @param roleName
* 角色名称
* @param roleId
* 角色 ID
* @param name
* 名称
* @param id
* ID
* @return 是否存在
*/
private boolean checkNameExist(String roleName, Long roleId) {
return baseMapper.exists(Wrappers.<RoleDO>lambdaQuery().eq(RoleDO::getRoleName, roleName).ne(roleId != null,
RoleDO::getRoleId, roleId));
private boolean checkNameExists(String name, Long id) {
return super.lambdaQuery().eq(RoleDO::getRoleName, name).ne(id != null, RoleDO::getRoleId, id).exists();
}
}