SQL选择复杂类



我在对象内部使用列表的情况进行选择语句有问题。

假设我的课程看起来像这样:

public Class Role {
    private Integer id;
    private String name;
}
public Class User {
    private String login;
    private String password;
    private List<Role> roles;
}

当然也有Getters和Setters。

我正在使用项目,我需要使用JDBCTEMPLATE来查询数据库的对象,而我们没有ORM。

因此,这是一个问题:是否可以使这样的SQL选择语句,以为JDBC模板的AutoMapper外部不会使用映射器?

我可以在Java代码中做类似的事情:

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

,但我也希望从角色表中获得该用户的角色表的结果。

顺便说一句,这只是一个例子,即IM与更复杂的对象一起工作。

您的DB设计将由两个代表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的问题时是正确的。

,但还请注意,实际上,您实际上会使用它试图解决或引起的所有问题来重新进来。检查例如n+1 select问题。

因此,如果您的评估是可行的,则应进行一些初步评估。

最新更新