道层中的多种方法
Posted
技术标签:
【中文标题】道层中的多种方法【英文标题】:multiple methods in dao layer 【发布时间】:2017-01-09 01:04:34 【问题描述】:目前我正计划重构一个用 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)
...
我不知道要遵循的正确解决方案...
有什么建议吗?任何从非常基本的东西解释这个概念的页面的链接也很感激。
【问题讨论】:
那么为什么不使用Criteria
?
是的,目前我正在使用 Criteria 对象构建我的查询。非常感谢您的建议。
【参考方案1】:
经过大量浏览后,我发现 spring-jpa 集成 here
我唯一创建的是每个实体的接口。 spring 本身处理 DAO 层的创建并处理该实体上的所有操作,还支持批量操作。我们可以在该接口中添加我们的自定义方法 spring jpa 将实现这些方法。无需编写任何与 DAO 层相关的代码。
示例:
@Repository
public interface UserRepository extends PagingAndSortingRepository<UserCore, Serializable>, JpaSpecificationExecutor<UserCore>
我们也可以按照here 的解释从 DAO 方法返回 java 流
它也有规范支持,类似于hibernate中的标准。
【讨论】:
但这不会让你有很多方法做类似的事情吗?你的 dao 层的 API 仍然会有很多方法做几乎相同的事情 不,我已经用一种采用 JPA 规范的搜索方法替换了所有方法。您可以向该规范添加任何标准。以上是关于道层中的多种方法的主要内容,如果未能解决你的问题,请参考以下文章