我想为我的应用程序创建一个DAO层。经过一些谷歌搜索后,我发现许多人使用通用DAO方法(Don't repeat the DAO!)。
但我不喜欢这种方法。
如果我在DAO之间需要稍微不同的接口以用于不同的DAO实现,该怎么办? (即通用接口中的方法与我想在DAO实现中创建的方法不完全相同)
如果我的实体的主键由多个属性组成,该怎么办?
答案 0 :(得分:4)
如果您需要为特定实体稍微不同的DAO,您可以随时扩展通用的(MySpecificDAO <....> extends GenericDAO<....>)
。主键本身可以是复合的,但是不可能有2个主键。
答案 1 :(得分:2)
直接来自您链接的文章:
扩展GenericDAO
每个DAO的接口当然都基于GenericDao接口。我只需要将接口调整到特定的域类并扩展它以包含我的finder方法。在清单6中,您可以看到为特定目的扩展的GenericDao接口的示例
关于你的上一个问题:根据定义,一个实体只有一个主键。
答案 2 :(得分:2)
缺点:你仍然需要实现DAO。停止遵循6年前的建议,改为使用Spring Data repositories。那么你根本不需要编写任何实现。
答案 3 :(得分:1)
如果我需要DAO之间略有不同的接口,那么该怎么办? DAO实现?
您可以覆盖GenericDaoImpl
课程中的方法。或创建一种新方法。
如果我的实体有2个或更多主键怎么办?
我猜你的意思是复合键情节。请注意,GenericDao
中的findOne / readOne / getOne方法通常需要一个参数,(T key)
这里的T是类型,它可以是复合主键。
例如:
class PersonPK{
private String name;
private Date birthday;
.....
}
答案 4 :(得分:0)
您可以找到here a Generic DAO该文章的有效和改进的实现。只需查看页面底部的Example.java即可。在这个例子中,您可以看到如何定义“不同DAO的DAO之间略有不同的接口” 实现方式”。