feat(user): 增强用户列表分页查询功能
- 新增 keyword 参数支持用户名和昵称模糊搜索 - 新增 roleId 参数支持按角色过滤用户 - 优化 SQL 查询逻辑,使用 EXISTS 子查询关联用户与角色 - 更新 Mapper 接口以支持新的查询参数 - 调整 Service 和 Controller 层方法签名适配新参数 - 添加请求日志记录便于调试和监控
This commit is contained in:
@@ -91,7 +91,6 @@ public interface UserMapper extends BaseMapper<User> {
|
|||||||
""")
|
""")
|
||||||
List<Role> findRolesByUserId(@Param("userId") Long userId);
|
List<Role> findRolesByUserId(@Param("userId") Long userId);
|
||||||
|
|
||||||
|
|
||||||
@Select("SELECT * FROM t_user WHERE username = #{username} ")
|
@Select("SELECT * FROM t_user WHERE username = #{username} ")
|
||||||
@Results({
|
@Results({
|
||||||
@Result(id = true, property = "id", column = "id"),
|
@Result(id = true, property = "id", column = "id"),
|
||||||
@@ -103,24 +102,31 @@ public interface UserMapper extends BaseMapper<User> {
|
|||||||
many = @Many(select = "findRolesByUserId"))
|
many = @Many(select = "findRolesByUserId"))
|
||||||
})
|
})
|
||||||
User findUserWithRolesByUsername(String username);
|
User findUserWithRolesByUsername(String username);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询用户,并携带角色信息
|
* 分页查询用户,并携带角色信息
|
||||||
* MyBatis-Plus 会自动处理 Page 参数进行物理分页
|
* 增加了 roleId 过滤
|
||||||
* @param page 分页对象
|
|
||||||
* @param keyword 搜索关键词 (可选)
|
|
||||||
* @return 分页后的用户列表 (包含角色)
|
|
||||||
*/
|
*/
|
||||||
@Select("""
|
@Select("""
|
||||||
<script>
|
<script>
|
||||||
SELECT * FROM t_user
|
SELECT * FROM t_user u
|
||||||
<where>
|
<where>
|
||||||
<if test='keyword != null and keyword != ""'>
|
<if test='keyword != null and keyword != ""'>
|
||||||
AND (username LIKE CONCAT('%', #{keyword}, '%') OR nickname LIKE CONCAT('%', #{keyword}, '%'))
|
AND (u.username LIKE CONCAT('%', #{keyword}, '%') OR u.nickname LIKE CONCAT('%', #{keyword}, '%'))
|
||||||
</if>
|
</if>
|
||||||
</where>
|
|
||||||
ORDER BY id ASC
|
<if test='roleId != null'>
|
||||||
</script>
|
AND EXISTS (
|
||||||
""")
|
SELECT 1
|
||||||
|
FROM t_user_role ur
|
||||||
|
WHERE ur.user_id = u.id
|
||||||
|
AND ur.role_id = #{roleId}
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
ORDER BY u.id ASC
|
||||||
|
</script>
|
||||||
|
""")
|
||||||
@Results({
|
@Results({
|
||||||
@Result(id = true, property = "id", column = "id"),
|
@Result(id = true, property = "id", column = "id"),
|
||||||
@Result(property = "username", column = "username"),
|
@Result(property = "username", column = "username"),
|
||||||
@@ -129,5 +135,7 @@ public interface UserMapper extends BaseMapper<User> {
|
|||||||
@Result(property = "roles", column = "id",
|
@Result(property = "roles", column = "id",
|
||||||
many = @Many(select = "findRolesByUserId"))
|
many = @Many(select = "findRolesByUserId"))
|
||||||
})
|
})
|
||||||
IPage<User> selectPageWithRoles(Page<User> page, @Param("keyword") String keyword);
|
IPage<User> selectPageWithRoles(Page<User> page,
|
||||||
|
@Param("keyword") String keyword,
|
||||||
|
@Param("roleId") Long roleId);
|
||||||
}
|
}
|
||||||
@@ -89,7 +89,7 @@ public interface UserProfileService {
|
|||||||
* @param pageSize 页大小
|
* @param pageSize 页大小
|
||||||
* @return 所有用户信息
|
* @return 所有用户信息
|
||||||
*/
|
*/
|
||||||
IPage<UserProfileResponse> getAllUsers(Integer pageNum, Integer pageSize);
|
IPage<UserProfileResponse> getAllUsers(Integer pageNum, Integer pageSize,String keyword,Long roleId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据用户ID查询用户信息
|
* 根据用户ID查询用户信息
|
||||||
|
|||||||
@@ -153,9 +153,9 @@ public class UserProfileServiceImpl implements UserProfileService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IPage<UserProfileResponse> getAllUsers(Integer pageNum, Integer pageSize) {
|
public IPage<UserProfileResponse> getAllUsers(Integer pageNum, Integer pageSize, String keyword, Long roleId) {
|
||||||
Page<User> page = new Page<>(pageNum, pageSize);
|
Page<User> page = new Page<>(pageNum, pageSize);
|
||||||
IPage<User> userPage = userMapper.selectPageWithRoles(page, null);
|
IPage<User> userPage = userMapper.selectPageWithRoles(page, keyword,roleId);
|
||||||
return userPage.convert(UserProfileResponse::new);
|
return userPage.convert(UserProfileResponse::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,8 +35,12 @@ public class UserController {
|
|||||||
@GetMapping
|
@GetMapping
|
||||||
public ApiResult<IPage<UserProfileResponse>> listUsers(
|
public ApiResult<IPage<UserProfileResponse>> listUsers(
|
||||||
@RequestParam(defaultValue = "1", name = "pageNum") Integer pageNum,
|
@RequestParam(defaultValue = "1", name = "pageNum") Integer pageNum,
|
||||||
@RequestParam(defaultValue = "10", name = "pageSize") Integer pageSize) {
|
@RequestParam(defaultValue = "10", name = "pageSize") Integer pageSize,
|
||||||
return ApiResult.success(userProfileService.getAllUsers(pageNum, pageSize));
|
@RequestParam(required = false) String keyword,
|
||||||
|
@RequestParam(required = false) Long roleId
|
||||||
|
) {
|
||||||
|
log.info("获取用户列表 (分页):{}, {}, {}, {}" ,pageNum, pageSize, keyword, roleId);
|
||||||
|
return ApiResult.success(userProfileService.getAllUsers(pageNum, pageSize, keyword, roleId));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{id}")
|
@GetMapping("/{id}")
|
||||||
|
|||||||
Reference in New Issue
Block a user