有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

每个实体或每个用例的java DAO

我有一种情况,我在想我应该为每个实体或每个用例创建一个DAO

我有一个表“user”,它存储用户的登录信息

create table user (user_id varchar(50) not null primary key, password varchar(50))

我有一个表“user_login_history”,它存储了用户在系统中登录多少次的历史记录

create table user_login_history (user_login_history_id int not null identity(1,1) primary key, user_id varchar(50) not null foreign key references user(user_id), login_date datetime not null)

这是一个用例:对于用户登录系统,他/她应该通过以下两项检查:

  1. 用户Id和密码应在用户表中匹配
  2. 用户最后一次登录系统后还没有30天

所以我有一个实体用户

public class User {
    private String userId;
    private String password;
    public String getUserId() { return this.userId; }
    public void setUserId(String userId) { this.userId = userId; }
    public String getPassword() { return this.password; }
    public void setPassword(String password) { this.password = password; }
} 

我有一个实体UserLoginHistory

public class UserLoginHistory {
    private int userLoginHistoryId;
    private User user;
    private java.util.Date loginDate;
    public int getUserLoginHistoryId() { return this.userLoginHistoryId; }
    public void setUserLoginHistoryId(int userLoginHistoryId) { this.userLoginHistoryId = userLoginHistoryId; }
    public User getUser() { return this.user; }
    public void setUser(User user) { this.user = user; }
    public java.util.Date getLoginDate() { return this.loginDate; }
    public void setLoginDate(java.util.Date loginDate) { this.loginDate = loginDate; }
}


所以我想我有两个选择:

1)按实体创建DAO,即2个DAO:

UserDAO用于基于“用户”表和

UserLoginHistoryDAO用于基于“用户登录历史”表的UserLoginHistory实体

public interface UserDAO {
    public User getUser(String userId, String password);
}

public interface UserLoginHistoryDAO {
    public UserLoginHistory getLastUserLoginHistory(String userId);
}

2)通过用例创建DAO,即1个DAO:

LoginDAO将包含此用例所需的所有sql

public interface LoginDAO {
    public User getUser(String userId, String password);
    public UserLoginHistory getLastUserLoginHistory(String userId);
}

哪种选择更可取?为什么

如果我选择选项1,如果我需要同时使用“user”和“user_login_history”表并从这两个表返回列的查询,该怎么办;在这种情况下,这些类型的查询将转到哪个DAO?UserDAO或UserLoginHistoryDAO还是复合的新DAO

谢谢


共 (1) 个答案

  1. # 1 楼答案

    始终将DAO创建为数据库的镜像,这意味着每个数据库对象都有一个DAO。这将降低现在和将来应用层的复杂性