每个实体或每个用例的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)
这是一个用例:对于用户登录系统,他/她应该通过以下两项检查:
- 用户Id和密码应在用户表中匹配
- 用户最后一次登录系统后还没有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 楼答案
始终将DAO创建为数据库的镜像,这意味着每个数据库对象都有一个DAO。这将降低现在和将来应用层的复杂性