DAO应该包含哪些方法?

时间:2015-01-12 12:02:45

标签: java dao

问题在于模式本身的理解,而不是具体的实现。

我已经阅读了 DAO 模式,并且出现的问题是DAO中应该包含哪些方法?例如,

public interface UserDAO{

    public User getUserById(Integer id);

    public void deleteUser(Integer id);

    public void updateUser(Integer id, User user);

    public void createUser(User user);
}

我们可以说界面满足DAO - 模式吗?如果没有,我应该添加/删除哪些方法?

2 个答案:

答案 0 :(得分:4)

如果我们正在谈论更通用的方法,那么你可以选择:

public interface GenericDao<D>{

    public D get(Long id);// as Id use Long instead of Integer, Ids can be very large numbers, Int can be not enough

    public Collection<D> getList(SearchCriteria crit); //for retrieving more than one element 

    public void remove(Long id);

    public void update(D entity); // remember that updated record should have already id inside, you can add assert inside

    public void create(D entity); // assert that id is null
}

最后一步可以用save方法替换update / add(可选)。

你可以使用泛型,并使D实现一些具有getId()方法的接口,这将有助于为所有DAO编写一个类,作为父级,将减少你的代码:)

public interface Model implement Serializable{

   Long getId();

}

在你的DAO中,你会写下这个:

public interface UserDAO <D extends Model>{
...

从这一点开始,您可以在GenericDaoImpl内部实现所有crud操作。所有你的dao,比如UserDao都会简单地扩展GenericDaoImpl,像UserDao这样的Dao接口会扩展GenericDao接口。

因此,您将在通用类中隐藏常用逻辑,并仅向某些Dao添加特定方法,例如通过电子邮件,用户名或年龄获取用户:)您的代码将更清晰,更易读。

答案 1 :(得分:1)

基本上DAO层包含与CRUD(创建,读取,更新,删除)操作相关的功能。由于您的界面主要仅包含这些功能,因此您的界面是可接受的。如果你想要通用,那么另一个答案也是好的。您还可以根据需要添加更多CRUD功能,如:

getUserByEmail(String email){}

您也可以添加这些类型的功能..