道层中的多种方法

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 规范的搜索方法替换了所有方法。您可以向该规范添加任何标准。

以上是关于道层中的多种方法的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP协议图--网络层中的IP协议

TCP/IP 协议图--网络层中的 IP 协议

数据访问层中的静态方法

业务层中的 LINQ 分页/用户层中的网格视图排序

业务层中的实例方法与静态方法[关闭]

在Java中测试服务层中的void方法[重复]