gpt4 book ai didi

java - 当我在sql中使用inner join命令时,如何使用spring JdbcTemplate接收一个对象而不是多个对象?

转载 作者:行者123 更新时间:2023-12-01 20:19:04 25 4
gpt4 key购买 nike

我有一个带有字段的 User 类:

private Long id;
private String u_name;
private String u_surname;
private int u_age;
private Set<Roles> roles = new HashSet<>(); //its enum

当我尝试使用 JdbcTemplate 和休息 Controller 显示它作为响应时,我遇到了问题,因为我收到了三个对象。

我的存储库类:

public List<User> findAll() {
String sql = "select users.id, users.u_name, users.u_surname, users.u_age, user_roles.user_role from users inner join user_roles on users.id = user_roles.user_id";
return jdbc.query(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int row) throws SQLException {
Set<Roles> roles = new HashSet<>();
roles.add(Roles.valueOf(rs.getString("user_role")));
return new User(rs.getLong("id"), rs.getString("u_name"), rs.getString("u_surname"), rs.getInt("u_age"), roles);
}

});
}

public User findById(Long id) {
String sql = "select users.id, users.u_name, users.u_surname, users.u_age, user_roles.user_role from users inner join user_roles on users.id = user_roles.user_id where users.id = ?";
return jdbc.queryForObject(sql, new RowMapper<User>(){
@Override
public User mapRow(ResultSet rs, int row) throws SQLException {
Set<Roles> roles = new HashSet<>();
roles.add(Roles.valueOf(rs.getString("user_role")));
return new User(rs.getLong("id"), rs.getString("u_name"), rs.getString("u_surname"), rs.getInt("u_age"), roles);
}

}, id);
}

我需要做什么才能只接收一个对象而不是多个对象?

最佳答案

发生这种情况是因为您可能有多个角色附加到您的用户,因此您的 SQL 将生成一个矩阵(更多角色,更多行),要解决这个问题,您将必须删除连接,但前提是您不这样做不需要看角色。但是,如果您必须检索具有角色的用户,您可以将 sql 更改为使用“exists”,如下所示:

select 
users.id,
users.u_name,
users.u_surname,
users.u_age,
user_roles.user_role
from users
where exists (
select 1 from user_roles
where users.id = user_roles.user_id)
and users.id = ?

*尚未测试

如果您确实需要了解角色,我建议您创建一个单独的方法来检索它们

关于java - 当我在sql中使用inner join命令时,如何使用spring JdbcTemplate接收一个对象而不是多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58945748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com