Java dao层中的多种方法

Java dao层中的多种方法,java,hibernate,dao,Java,Hibernate,Dao,目前我正计划重构一个用spring+hibernate编写的旧代码库 我在dao层看到过很多方法,它们都是为了解决同样的问题 例如,我有用户信息表 在dao层中有很多方法,比如 getUserInfoById(String userId); getUserInfoByName(String name); getUserInfoByIdAndName(String userId,String name) 这一清单还在继续 我知道这是一种很糟糕的做法 我认为像我这样的解决方案只有一个方法g

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

我在dao层看到过很多方法,它们都是为了解决同样的问题

例如,我有用户信息表

在dao层中有很多方法,比如

 getUserInfoById(String userId);
 getUserInfoByName(String name);
 getUserInfoByIdAndName(String userId,String name) 
这一清单还在继续

我知道这是一种很糟糕的做法

我认为像我这样的解决方案只有一个方法getUserInfo(User) 在这个方法中,我将封装查询构造,如

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

我不知道这是正确的解决方案遵循


有什么建议吗?任何从最基本的内容中解释这一概念的页面链接都将受到欢迎。

经过激烈的浏览,我发现了spring jpa集成

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

示例:

@存储库

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

}
public interface UserRepository扩展了分页和排序存储库,JpaSpecificationExecutor{
}
如前所述,我们还可以从DAO方法返回java流


它还具有与hibernate中的条件类似的规范支持。

为什么不使用
条件
那么?是的,目前我正在使用criteria对象构造查询。非常感谢你的建议。但是这不会给你留下很多做类似事情的方法吗?dao层的API仍然会有很多方法做几乎相同的事情不,我已经用一个采用JPA规范的搜索方法替换了所有的方法。您可以向该规范添加任何条件。