Sql选择复杂的类

问题描述 投票:0回答:1

我在为对象内的List创建一个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。

所以这里有一个问题:是否有可能制作这样的SQL Select语句,在JDBC模板的automapper之外不会使用mapper?

我可以在java代码中做这样的事情:

List<User> users = sqlManager.createQuery("SELECT login, password FROM users", 
                                          User.class).getResultList();

但是我还希望从角色表中得到的结果是将用户自动化到用户列表。

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

java sql oracle jdbctemplate
1个回答
0
投票

您的数据库设计将包含两个主表,表示userrole以及一个表示它们之间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以及它试图解决或导致的所有问题。检查例如qazxsw poi问题。

所以你应该对你的方法做一些初步评估是可行的。

© www.soinside.com 2019 - 2024. All rights reserved.