From 1319cb3264c5e93d2b668429a18165df279c556d Mon Sep 17 00:00:00 2001
From: Charles7c <charles7c@126.com>
Date: Thu, 16 Feb 2023 21:00:12 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E4=BD=BF=E7=94=A8?=
 =?UTF-8?q?=20MyBatis=20Plus=20ChainWrapper=20=E4=BC=98=E5=8C=96=E9=83=A8?=
 =?UTF-8?q?=E5=88=86=20QueryWrapper=20=E7=9A=84=E5=86=99=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../cnadmin/common/base/BaseServiceImpl.java  | 52 +++++++++++++++++++
 .../system/service/impl/DeptServiceImpl.java  | 36 ++++++-------
 .../system/service/impl/RoleServiceImpl.java  | 19 +++----
 3 files changed, 77 insertions(+), 30 deletions(-)

diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java
index 1fb32e5e..0cf9293f 100644
--- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java
+++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/base/BaseServiceImpl.java
@@ -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);
+    }
 }
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java
index 6b7576cb..75dc4d86 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/DeptServiceImpl.java
@@ -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
diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java
index 412ae743..ccdf13eb 100644
--- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java
+++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/RoleServiceImpl.java
@@ -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();
     }
 }