Java 复杂类的Sql选择

Java 复杂类的Sql选择,java,sql,oracle,jdbctemplate,Java,Sql,Oracle,Jdbctemplate,我在为对象中包含列表的情况生成select语句时遇到问题 假设我有这样的类: public Class Role { private Integer id; private String name; } public Class User { private String login; private String password; private List<Role> roles; } 当然,也有能手和二传手 我正在处理一个项目,我需要使

我在为对象中包含列表的情况生成select语句时遇到问题

假设我有这样的类:

public Class Role {
    private Integer id;
    private String name;
}
public Class User {
    private String login;
    private String password;
    private List<Role> roles;
}
当然,也有能手和二传手

我正在处理一个项目,我需要使用JdbcTemplate从数据库中查询对象,而我们没有ORM

所以这里有一个问题:是否有可能在automapper for JDBC模板之外使用这样的SQL Select语句,而不使用映射器

我可以在java代码中执行类似的操作:

List<User> users = sqlManager.createQuery("SELECT login, password FROM users", 
                                          User.class).getResultList();
但我还希望从角色表中得到一个结果,以便将该用户自动映射到用户列表


顺便说一句,这只是一个例子,我正在处理更复杂的对象。

您的数据库设计将由两个代表用户和角色的主表和一个代表它们之间m:n关系的辅助表组成

create table  User_tab (
    login varchar2(100),
    password_hash raw(100), 
    CONSTRAINT User_tab_pk PRIMARY KEY (login)
);

create table Role_tab (
    id Int,
    name varchar2(100),
    CONSTRAINT Role_tab_pk PRIMARY KEY (id)
); 

create table User_Role_tab (
    login varchar2(100),
    id Int,
    CONSTRAINT User_Role_tab_pk PRIMARY KEY (login,id),
    CONSTRAINT User_Tab_fk FOREIGN KEY (login) REFERENCES User_tab(login),
    CONSTRAINT Role_tab_fk FOREIGN KEY (id) REFERENCES Role_tab(id)    
);
因此,要获取特定用户的角色列表,您将使用此查询

select id from User_Role_tab where login = ?
请注意,您在识别缺少ORM的问题时是正确的

但也要注意,使用您的方法,您实际上试图重新实现ORM,并解决它试图解决或导致的所有问题。检查例如n+1选择问题


因此,如果你的方法可行,你应该做一些初步评估

感谢您的帮助,n+1选择问题正是我想要的。