update 增加join工具 简化join业务代码写法

This commit is contained in:
疯狂的狮子Li
2026-05-15 16:23:29 +08:00
parent 14e444e4bd
commit 90c8a5c2f3
10 changed files with 738 additions and 199 deletions
@@ -3,11 +3,11 @@ package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.toolkit.JoinWrappers;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysRoleDept;
@@ -101,7 +101,7 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo>, MPJBa
* @return 选中部门列表
*/
default List<Long> selectDeptListByRoleId(Long roleId, boolean deptCheckStrictly) {
List<SysDept> depts = this.selectJoinList(SysDept.class, JoinWrappers.lambda("d", SysDept.class)
List<SysDept> depts = this.selectJoinList(SysDept.class, QueryBuilder.lambdaJoin("d", SysDept.class)
.distinct()
.select(SysDept::getDeptId, SysDept::getParentId, SysDept::getOrderNum)
.leftJoin(SysRoleDept.class, "srd", SysRoleDept::getDeptId, SysDept::getDeptId)
@@ -109,7 +109,8 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo>, MPJBa
.eq("srd", SysRoleDept::getRoleId, roleId)
.eq("sr", SysRole::getStatus, NORMAL)
.orderByAsc("d", SysDept::getParentId)
.orderByAsc("d", SysDept::getOrderNum));
.orderByAsc("d", SysDept::getOrderNum)
.build());
Set<Long> parentIds = deptCheckStrictly ? new HashSet<>(StreamUtils.toList(depts, SysDept::getParentId)) : Collections.emptySet();
return depts.stream()
.map(SysDept::getDeptId)
@@ -2,11 +2,11 @@ package org.dromara.system.mapper;
import cn.hutool.core.collection.CollUtil;
import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.toolkit.JoinWrappers;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.system.domain.SysMenu;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysRoleMenu;
@@ -31,7 +31,7 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
* @return 权限列表
*/
default Set<String> selectMenuPermsByUserId(Long userId) {
List<SysMenu> list = this.selectJoinList(SysMenu.class, JoinWrappers.lambda("m", SysMenu.class)
List<SysMenu> list = this.selectJoinList(SysMenu.class, QueryBuilder.lambdaJoin("m", SysMenu.class)
.distinct()
.select(SysMenu::getPerms)
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
@@ -39,7 +39,8 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
.eq("sur", SysUserRole::getUserId, userId)
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
.isNotNull("m", SysMenu::getPerms));
.isNotNull("m", SysMenu::getPerms)
.build());
return new HashSet<>(StreamUtils.filter(StreamUtils.toList(list, SysMenu::getPerms), StringUtils::isNotBlank));
}
@@ -50,14 +51,15 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
* @return 权限列表
*/
default Set<String> selectMenuPermsByRoleId(Long roleId) {
List<SysMenu> list = this.selectJoinList(SysMenu.class, JoinWrappers.lambda("m", SysMenu.class)
List<SysMenu> list = this.selectJoinList(SysMenu.class, QueryBuilder.lambdaJoin("m", SysMenu.class)
.distinct()
.select(SysMenu::getPerms)
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
.eq("srm", SysRoleMenu::getRoleId, roleId)
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
.isNotNull("m", SysMenu::getPerms));
.isNotNull("m", SysMenu::getPerms)
.build());
return new HashSet<>(StreamUtils.filter(StreamUtils.toList(list, SysMenu::getPerms), StringUtils::isNotBlank));
}
@@ -71,7 +73,7 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
if (CollUtil.isEmpty(roleIds)) {
return Map.of();
}
List<SysRoleMenuPermVo> list = this.selectJoinList(SysRoleMenuPermVo.class, JoinWrappers.lambda("m", SysMenu.class)
List<SysRoleMenuPermVo> list = this.selectJoinList(SysRoleMenuPermVo.class, QueryBuilder.lambdaJoin("m", SysMenu.class)
.distinct()
.selectAs("srm", SysRoleMenu::getRoleId, SysRoleMenuPermVo::getRoleId)
.selectAs(SysMenu::getPerms, SysRoleMenuPermVo::getPerms)
@@ -79,7 +81,8 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
.in("srm", SysRoleMenu::getRoleId, roleIds)
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
.isNotNull("m", SysMenu::getPerms));
.isNotNull("m", SysMenu::getPerms)
.build());
Map<Long, Set<String>> result = new LinkedHashMap<>();
for (SysRoleMenuPermVo item : list) {
if (StringUtils.isBlank(item.getPerms())) {
@@ -112,7 +115,7 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
* @return 选中菜单列表
*/
default List<Long> selectMenuListByRoleId(Long roleId, boolean menuCheckStrictly) {
List<SysMenu> menus = this.selectJoinList(SysMenu.class, JoinWrappers.lambda("m", SysMenu.class)
List<SysMenu> menus = this.selectJoinList(SysMenu.class, QueryBuilder.lambdaJoin("m", SysMenu.class)
.distinct()
.select(SysMenu::getMenuId, SysMenu::getParentId, SysMenu::getOrderNum)
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
@@ -120,7 +123,8 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
.eq("srm", SysRoleMenu::getRoleId, roleId)
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
.orderByAsc("m", SysMenu::getParentId)
.orderByAsc("m", SysMenu::getOrderNum));
.orderByAsc("m", SysMenu::getOrderNum)
.build());
Set<Long> parentIds = menuCheckStrictly ? new HashSet<>(StreamUtils.toList(menus, SysMenu::getParentId)) : Collections.emptySet();
return menus.stream()
.map(SysMenu::getMenuId)
@@ -136,7 +140,7 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
* @return 菜单列表
*/
default List<SysMenuVo> selectMenuListByUserId(SysMenuBo menu, Long userId) {
return this.selectJoinList(SysMenuVo.class, JoinWrappers.lambda("m", SysMenu.class)
return this.selectJoinList(SysMenuVo.class, QueryBuilder.lambdaJoin("m", SysMenu.class)
.distinct()
.selectAll(SysMenu.class)
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
@@ -144,13 +148,14 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
.leftJoin(SysRole.class, "sr", SysRole::getRoleId, SysRoleMenu::getRoleId)
.eq("sur", SysUserRole::getUserId, userId)
.eq("sr", SysRole::getStatus, SystemConstants.NORMAL)
.like(StringUtils.isNotBlank(menu.getMenuName()), "m", SysMenu::getMenuName, menu.getMenuName())
.eq(StringUtils.isNotBlank(menu.getVisible()), "m", SysMenu::getVisible, menu.getVisible())
.eq(StringUtils.isNotBlank(menu.getStatus()), "m", SysMenu::getStatus, menu.getStatus())
.eq(StringUtils.isNotBlank(menu.getMenuType()), "m", SysMenu::getMenuType, menu.getMenuType())
.eq(Objects.nonNull(menu.getParentId()), "m", SysMenu::getParentId, menu.getParentId())
.likeIfText("m", SysMenu::getMenuName, menu.getMenuName())
.eqIfText("m", SysMenu::getVisible, menu.getVisible())
.eqIfText("m", SysMenu::getStatus, menu.getStatus())
.eqIfText("m", SysMenu::getMenuType, menu.getMenuType())
.eqIfPresent("m", SysMenu::getParentId, menu.getParentId())
.orderByAsc("m", SysMenu::getParentId)
.orderByAsc("m", SysMenu::getOrderNum));
.orderByAsc("m", SysMenu::getOrderNum)
.build());
}
/**
@@ -160,7 +165,7 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
* @return 菜单列表
*/
default List<SysMenu> selectMenuTreeByUserId(Long userId) {
return this.selectJoinList(SysMenu.class, JoinWrappers.lambda("m", SysMenu.class)
return this.selectJoinList(SysMenu.class, QueryBuilder.lambdaJoin("m", SysMenu.class)
.distinct()
.selectAll(SysMenu.class)
.leftJoin(SysRoleMenu.class, "srm", SysRoleMenu::getMenuId, SysMenu::getMenuId)
@@ -171,7 +176,8 @@ public interface SysMenuMapper extends BaseMapperPlus<SysMenu, SysMenuVo>, MPJBa
.in("m", SysMenu::getMenuType, SystemConstants.TYPE_DIR, SystemConstants.TYPE_MENU)
.eq("m", SysMenu::getStatus, SystemConstants.NORMAL)
.orderByAsc("m", SysMenu::getParentId)
.orderByAsc("m", SysMenu::getOrderNum));
.orderByAsc("m", SysMenu::getOrderNum)
.build());
}
}
@@ -3,10 +3,10 @@ package org.dromara.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.toolkit.JoinWrappers;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.system.domain.SysPost;
import org.dromara.system.domain.SysUserPost;
import org.dromara.system.domain.vo.SysPostVo;
@@ -71,10 +71,11 @@ public interface SysPostMapper extends BaseMapperPlus<SysPost, SysPostVo>, MPJBa
* @return 岗位信息列表
*/
default List<SysPostVo> selectPostsByUserId(Long userId) {
return this.selectJoinList(SysPostVo.class, JoinWrappers.lambda("p", SysPost.class)
return this.selectJoinList(SysPostVo.class, QueryBuilder.lambdaJoin("p", SysPost.class)
.selectAll(SysPost.class)
.leftJoin(SysUserPost.class, "sup", SysUserPost::getPostId, SysPost::getPostId)
.eq("sup", SysUserPost::getUserId, userId));
.eq("sup", SysUserPost::getUserId, userId)
.build());
}
}
@@ -4,11 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.toolkit.JoinWrappers;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUserRole;
import org.dromara.system.domain.vo.SysRoleVo;
@@ -87,11 +87,12 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo>, MPJBa
* @return 角色列表
*/
default List<SysRoleVo> selectRolesByUserId(Long userId) {
return this.selectJoinList(SysRoleVo.class, JoinWrappers.lambda("r", SysRole.class)
return this.selectJoinList(SysRoleVo.class, QueryBuilder.lambdaJoin("r", SysRole.class)
.select(SysRole::getRoleId, SysRole::getRoleName, SysRole::getRoleKey,
SysRole::getRoleSort, SysRole::getDataScope, SysRole::getStatus)
.leftJoin(SysUserRole.class, "sur", SysUserRole::getRoleId, SysRole::getRoleId)
.eq("sur", SysUserRole::getUserId, userId));
.eq("sur", SysUserRole::getUserId, userId)
.build());
}
}
@@ -4,14 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.base.MPJBaseMapper;
import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.common.mybatis.core.query.QueryBuilder;
import org.dromara.system.domain.SysDept;
import org.dromara.system.domain.SysRole;
import org.dromara.system.domain.SysUser;
@@ -70,20 +68,19 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo>, MPJBa
@DataColumn(key = "userName", value = "u.create_by")
})
default List<SysUserExportVo> selectUserExportList(SysUserBo user, List<Long> deptIds) {
MPJLambdaWrapper<SysUser> wrapper = JoinWrappers.lambda("u", SysUser.class)
MPJLambdaWrapper<SysUser> wrapper = QueryBuilder.lambdaJoin("u", SysUser.class)
.selectAll(SysUser.class)
.selectAs("u1", SysUser::getUserName, SysUserExportVo::getLeaderName)
.leftJoin(SysDept.class, "d", SysDept::getDeptId, SysUser::getDeptId)
.leftJoin(SysUser.class, "u1", SysUser::getUserId, SysDept::getLeader)
.eq("u", SysUser::getDelFlag, SystemConstants.NORMAL)
.like(StringUtils.isNotBlank(user.getUserName()), "u", SysUser::getUserName, user.getUserName())
.like(StringUtils.isNotBlank(user.getNickName()), "u", SysUser::getNickName, user.getNickName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u", SysUser::getStatus, user.getStatus())
.like(StringUtils.isNotBlank(user.getPhoneNumber()), "u", SysUser::getPhoneNumber, user.getPhoneNumber())
.between(user.getParams().get("beginTime") != null && user.getParams().get("endTime") != null,
"u", SysUser::getCreateTime, user.getParams().get("beginTime"), user.getParams().get("endTime"))
.in(deptIds != null && !deptIds.isEmpty(), "u", SysUser::getDeptId, deptIds)
.orderByAsc("u", SysUser::getUserId);
.likeIfText("u", SysUser::getUserName, user.getUserName())
.likeIfText("u", SysUser::getNickName, user.getNickName())
.eqIfText("u", SysUser::getStatus, user.getStatus())
.likeIfText("u", SysUser::getPhoneNumber, user.getPhoneNumber())
.betweenParams("u", SysUser::getCreateTime, user.getParams(), "beginTime", "endTime")
.inIfNotEmpty("u", SysUser::getDeptId, deptIds)
.orderByAsc("u", SysUser::getUserId)
.build();
return this.selectJoinList(SysUserExportVo.class, wrapper);
}
@@ -172,16 +169,16 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo>, MPJBa
* @return 用户角色关联查询包装器
*/
default MPJLambdaWrapper<SysUser> buildUserRoleJoinWrapper(SysUserBo user) {
return JoinWrappers.lambda("u", SysUser.class)
return QueryBuilder.lambdaJoin("u", SysUser.class)
.distinct()
.selectAll(SysUser.class)
.leftJoin(SysDept.class, "d", SysDept::getDeptId, SysUser::getDeptId)
.leftJoin(SysUserRole.class, "sur", SysUserRole::getUserId, SysUser::getUserId)
.leftJoin(SysRole.class, "r", SysRole::getRoleId, SysUserRole::getRoleId)
.eq("u", SysUser::getDelFlag, SystemConstants.NORMAL)
.like(StringUtils.isNotBlank(user.getUserName()), "u", SysUser::getUserName, user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u", SysUser::getStatus, user.getStatus())
.like(StringUtils.isNotBlank(user.getPhoneNumber()), "u", SysUser::getPhoneNumber, user.getPhoneNumber());
.likeIfText("u", SysUser::getUserName, user.getUserName())
.eqIfText("u", SysUser::getStatus, user.getStatus())
.likeIfText("u", SysUser::getPhoneNumber, user.getPhoneNumber())
.build();
}
}