You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot如何以List形式返回所有管理员用户列表

实现方案

基于你现有项目的实体配置,提供两种可直接复用的实现方式,执行效果和你写的原生SQL完全一致:

方式1:JPQL查询(JPA原生规范,不需要写数据库相关原生语句,兼容性更好)

直接在UserRepository接口中新增方法即可:

// 固定查询角色ID为2的管理员用户名列表
@Query("SELECT u.username FROM User u JOIN u.roles r WHERE r.id = 2")
List<String> findAllAdminUsernames();

如果后续角色ID可能调整,也可以改成参数化形式,适配不同角色的查询需求:

@Query("SELECT u.username FROM User u JOIN u.roles r WHERE r.id = :roleId")
List<String> findAllUsernamesByRoleId(Integer roleId);

调用时传入2即可拿到管理员用户名列表。

方式2:原生SQL查询(直接复用你已验证的SQL逻辑)

如果你更倾向用原生SQL,只需在@Query注解中开启nativeQuery属性即可,注意不需要写USE request_manager,项目数据源配置已经默认指定了操作的数据库:

@Query(value = "SELECT u.username FROM users u JOIN users_roles ur ON u.id = ur.user_id WHERE ur.role_id = 2", nativeQuery = true)
List<String> findAllAdminUsernamesByNative();

调用方法

在业务层直接注入UserRepository调用对应方法即可:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public List<String> getAdminUsernameList() {
        // 调用JPQL方法
        return userRepository.findAllAdminUsernames();
        // 调用参数化方法的写法:return userRepository.findAllUsernamesByRoleId(2);
        // 调用原生SQL方法的写法:return userRepository.findAllAdminUsernamesByNative();
    }
}

性能优化提示

不建议先查询全量用户再在内存中过滤角色的实现方式,这种方式在用户量较大时会产生不必要的性能开销,上述两种直接在数据库层面过滤的方案性能更优。

内容的提问来源于stack exchange,提问作者john555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:09:05