refactor: 优化用户、角色、字典分页查询

This commit is contained in:
Jie Zheng 2025-01-14 17:24:01 +08:00
parent d0e4da214d
commit 902d862ee5
11 changed files with 85 additions and 57 deletions

View File

@ -16,7 +16,6 @@
package me.zhengjie.modules.system.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
@ -26,7 +25,6 @@ import me.zhengjie.base.BaseEntity;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @author Zheng Jie
@ -42,10 +40,6 @@ public class Dict extends BaseEntity implements Serializable {
@TableId(value = "dict_id", type = IdType.AUTO)
private Long id;
@TableField(exist = false)
@ApiModelProperty(value = "字典详情")
private List<DictDetail> dictDetails;
@NotBlank
@ApiModelProperty(value = "名称")
private String name;

View File

@ -38,4 +38,7 @@ public class RoleQueryCriteria {
@ApiModelProperty(value = "每页数据量", example = "10")
private Integer size = 10;
@ApiModelProperty(value = "偏移量", hidden = true)
private long offset;
}

View File

@ -53,4 +53,7 @@ public class UserQueryCriteria implements Serializable {
@ApiModelProperty(value = "每页数据量", example = "10")
private Integer size = 10;
@ApiModelProperty(value = "偏移量", hidden = true)
private long offset;
}

View File

@ -35,9 +35,9 @@ public interface RoleMapper extends BaseMapper<Role> {
List<Role> queryAll();
List<Role> findAll(@Param("criteria") RoleQueryCriteria criteria);
Long countAll(@Param("criteria") RoleQueryCriteria criteria);
IPage<Role> findAll(@Param("criteria") RoleQueryCriteria criteria, Page<Object> page);
List<Role> findAll(@Param("criteria") RoleQueryCriteria criteria);
Role findById(@Param("roleId") Long roleId);

View File

@ -34,6 +34,8 @@ import java.util.Set;
@Mapper
public interface UserMapper extends BaseMapper<User> {
Long countAll(@Param("criteria") UserQueryCriteria criteria);
List<User> findAll(@Param("criteria") UserQueryCriteria criteria);
IPage<User> findAll(@Param("criteria") UserQueryCriteria criteria, Page<Object> page);

View File

@ -44,6 +44,7 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements Di
private final DictMapper dictMapper;
private final RedisUtils redisUtils;
private final DictDetailMapper deleteDetail;
private final DictDetailMapper dictDetailMapper;
@Override
public PageResult<Dict> queryAll(DictQueryCriteria criteria, Page<Object> page){
@ -91,8 +92,9 @@ public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements Di
public void download(List<Dict> dicts, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (Dict dict : dicts) {
if(CollectionUtil.isNotEmpty(dict.getDictDetails())){
for (DictDetail dictDetail : dict.getDictDetails()) {
List<DictDetail> dictDetails = dictDetailMapper.findByDictName(dict.getName());
if(CollectionUtil.isNotEmpty(dictDetails)){
for (DictDetail dictDetail : dictDetails) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("字典名称", dict.getName());
map.put("字典描述", dict.getDescription());

View File

@ -17,7 +17,6 @@ package me.zhengjie.modules.system.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
@ -70,8 +69,10 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
@Override
public PageResult<Role> queryAll(RoleQueryCriteria criteria, Page<Object> page) {
IPage<Role> roles = roleMapper.findAll(criteria, page);
return PageUtil.toPage(roles);
criteria.setOffset(page.offset());
List<Role> roles = roleMapper.findAll(criteria);
Long total = roleMapper.countAll(criteria);
return PageUtil.toPage(roles, total);
}
@Override

View File

@ -15,7 +15,6 @@
*/
package me.zhengjie.modules.system.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
@ -62,8 +61,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
@Override
public PageResult<User> queryAll(UserQueryCriteria criteria, Page<Object> page) {
IPage<User> users = userMapper.findAll(criteria, page);
return PageUtil.toPage(users);
criteria.setOffset(page.offset());
List<User> users = userMapper.findAll(criteria);
Long total = userMapper.countAll(criteria);
return PageUtil.toPage(users, total);
}
@Override

View File

@ -9,27 +9,15 @@
<result column="update_by" property="updateBy" jdbcType="VARCHAR"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
<collection property="dictDetails" ofType="me.zhengjie.modules.system.domain.DictDetail">
<id column="dd_id" property="id" jdbcType="BIGINT"/>
<result column="label" property="label" jdbcType="VARCHAR"/>
<result column="value" property="value" jdbcType="VARCHAR"/>
<result column="dd_create_time" property="createTime" jdbcType="TIMESTAMP"/>
</collection>
</resultMap>
<sql id="Base_Column_List">
d.dict_id, d.name, d.description, d.create_by, d.update_by, d.create_time, d.update_time
</sql>
<sql id="Dict_Details_Column_List">
dd.detail_id as dd_id, dd.label, dd.`value`, dd.create_time as dd_create_time
</sql>
<select id="findAll" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>,
<include refid="Dict_Details_Column_List"/>
SELECT <include refid="Base_Column_List"/>
from sys_dict d
left join sys_dict_detail dd on d.dict_id = dd.dict_id
<where>
<if test="criteria.blurry != null and criteria.blurry != ''">
and (

View File

@ -36,21 +36,7 @@
dept.dept_id as dept_id, dept.name as dept_name
</sql>
<select id="queryAll" resultType="me.zhengjie.modules.system.domain.Role">
select role_id as id, name, level
from sys_role order by level
</select>
<select id="findAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>,
<include refid="Dept_Column_List"/>,
<include refid="Menu_Column_List"/>
from sys_role role
left join sys_roles_menus srm on role.role_id = srm.role_id
left join sys_menu menu on menu.menu_id = srm.menu_id
left join sys_roles_depts srd on role.role_id = srd.role_id
left join sys_dept dept on dept.dept_id = srd.dept_id
<sql id="Where_sql">
<where>
<if test="criteria.blurry != null and criteria.blurry != ''">
and (
@ -62,7 +48,38 @@
and role.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
</if>
</where>
</sql>
<select id="queryAll" resultType="me.zhengjie.modules.system.domain.Role">
select role_id as id, name, level
from sys_role order by level
</select>
<select id="findAll" resultMap="BaseResultMap">
select role.*,
<include refid="Dept_Column_List"/>,
<include refid="Menu_Column_List"/>
from (
select
<include refid="Base_Column_List"/>
from sys_role role
<include refid="Where_sql"/>
order by role.level
<if test="criteria.offset != null">
limit #{criteria.offset}, #{criteria.size}
</if>
) role
left join sys_roles_menus srm on role.role_role_id = srm.role_id
left join sys_menu menu on menu.menu_id = srm.menu_id
left join sys_roles_depts srd on role.role_role_id = srd.role_id
left join sys_dept dept on dept.dept_id = srd.dept_id
order by role.role_level
</select>
<select id="countAll" resultType="java.lang.Long">
select count(*)
from sys_role role
<include refid="Where_sql"/>
</select>
<select id="findByName" resultType="me.zhengjie.modules.system.domain.Role">

View File

@ -36,7 +36,7 @@
</resultMap>
<sql id="Base_Column_List">
u.user_id as user_user_id, u.dept_id as user_dept_id, u.username as user_username,
u.user_id as user_user_id, u.dept_id as user_dept_id, u.username as user_username,
u.nick_name as user_nick_name, u.email as user_email, u.phone as user_phone,
u.gender as user_gender, u.avatar_name as user_avatar_name, u.avatar_path as user_avatar_path,
u.enabled as user_enabled, u.pwd_reset_time as user_pwd_reset_time, u.create_by as user_create_by,
@ -52,17 +52,7 @@
r.role_id as role_id, r.name as role_name, r.level as role_level, r.data_scope as role_data_scope
</sql>
<select id="findAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>,
<include refid="Job_Column_List"/>,
<include refid="Role_Column_List"/>
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
left join sys_users_jobs suj on u.user_id = suj.user_id
left join sys_job j on suj.job_id = j.job_id
left join sys_users_roles sur on u.user_id = sur.user_id
left join sys_role r on sur.role_id = r.role_id
<sql id="Whrer_Sql">
<where>
<if test="criteria.id != null">
and u.user_id = #{criteria.id}
@ -87,7 +77,34 @@
and u.create_time between #{criteria.createTime[0]} and #{criteria.createTime[1]}
</if>
</where>
</sql>
<select id="findAll" resultMap="BaseResultMap">
select u.*,
<include refid="Job_Column_List"/>,
<include refid="Role_Column_List"/>
from (
select
<include refid="Base_Column_List"/>
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
<include refid="Whrer_Sql"/>
order by u.user_id desc
<if test="criteria.offset != null">
limit #{criteria.offset}, #{criteria.size}
</if>
) u
left join sys_users_jobs suj on u.user_user_id = suj.user_id
left join sys_job j on suj.job_id = j.job_id
left join sys_users_roles sur on u.user_user_id = sur.user_id
left join sys_role r on sur.role_id = r.role_id
order by u.user_user_id desc
</select>
<select id="countAll" resultType="java.lang.Long">
select count(*)
from sys_user u
<include refid="Whrer_Sql"/>
</select>
<select id="findByUsername" resultMap="BaseResultMap">
@ -158,4 +175,4 @@
#{id}
</foreach>
</update>
</mapper>
</mapper>