DAO层中的多种方法

4

目前,我正计划重构一个使用spring+hibernate编写的旧代码库。

在dao层中,我看到了许多解决相同目的的方法。

例如,我有user_info表,在dao层中有很多类似以下的方法:

 getUserInfoById(String userId);
 getUserInfoByName(String name);
 getUserInfoByIdAndName(String userId,String name) 

还有很多其他的例子。

我知道这样做是非常不好的做法。

我想到了一种解决方案,比如我只有一个方法getUserInfo(User user),在这个方法中,我将封装查询构造,例如

query.with(user.username).with(user.userId) ...

我不知道这是否是正确的解决方案...

有什么建议吗?也欢迎提供解释这个概念的基础知识页面的链接。


2
为什么不使用 Criteria 呢? - Scary Wombat
是的,目前我正在使用Criteria对象构建我的查询。非常感谢您的建议。 - kavetiraviteja
1个回答

1

在经过激烈的浏览后,我在这里找到了关于Spring JPA集成的链接

我所创建的唯一的东西就是每个实体的接口。Spring本身处理DAO层的创建并处理该实体上的所有操作,还支持批量操作。我们可以在该接口中添加自定义方法,Spring JPA将实现这些方法。无需编写与DAO层相关的任何代码。

示例:

@Repository

public interface UserRepository extends PagingAndSortingRepository<UserCore, Serializable>, JpaSpecificationExecutor<UserCore>  {

}

我们还可以从DAO方法中返回Java流,如此处所解释的那样。
它还具有规范支持,类似于Hibernate中的标准。

1
但是这样做是否仍然会让你有很多方法做类似的事情?你的dao层的API仍然会有很多几乎做同样事情的方法。 - GabiM
1
不,我已经用一个搜索方法替换了所有的方法,该方法使用JPA规范。您可以向该规范添加任何条件。 - kavetiraviteja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接