Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA使用的模式?_Jpa_Jpa 2.0_Spring Data Jpa - Fatal编程技术网

JPA使用的模式?

JPA使用的模式?,jpa,jpa-2.0,spring-data-jpa,Jpa,Jpa 2.0,Spring Data Jpa,我刚刚开始使用JpaRepository,我想知道其他人使用什么模式来处理它。我注意到我在dao层中至少声明了2个存储库 public interface CustomerRepository extends JpaRepository<Customer, Integer> { Customer findById(Integer id); Page<Customer> findByLastname(String name, Pageable pageable); P

我刚刚开始使用JpaRepository,我想知道其他人使用什么模式来处理它。我注意到我在dao层中至少声明了2个存储库

public interface CustomerRepository extends JpaRepository<Customer, Integer> {

Customer findById(Integer id); 
Page<Customer> findByLastname(String name, Pageable pageable);

Page<Customer> findByLastnameLike(String name, Pageable pageable);

}


 public interface FilmRepository extends JpaRepository<Film, Long>

Page<Film> findByTitleLike(String name, Pageable pageable);

Page<Film> findByDescriptionLike(String name, Pageable pageable);

Film findById(Long id);

}
公共接口CustomerRepository扩展了JpaRepository{
客户findById(整数id);
PageFindBylastName(字符串名称,可分页);
PageFindBylastNameLike(字符串名称,可分页);
}
公共接口FilmRepository扩展了JpaRepository
PageFindBytilelike(字符串名称,可分页);
页面findByDescriptionLike(字符串名称,可分页);
Film findById(长id);
}

大多数人会推荐/尝试使用单独的控制器和服务层(每个接口1个)或者尽可能多地结合?我知道这个问题是高度特定于应用程序的,但是在使用JpaRepository接口时,在这方面是否有一个通用的最佳实践?我最终将它们结合起来,坦率地说,这看起来很乱,我正在考虑重写。

当我编写业务层时,我更喜欢编写一个具有act的服务具有通用业务逻辑的ION。该服务可以使用多个DAO(存储库)类,并将它们组合起来。通常,在业务服务逻辑中,不仅需要访问不同的数据库表,还需要使用其他服务(调用外部web服务、与MQ通信、日志服务、安全服务等).综上所述,我们可以得出结论,在单个业务层类中,我们必须使用多个存储库和/或其他服务类

业务层不仅应该是访问存储库的接口,业务层还应该在与存储库交互时执行一些业务逻辑

如果您有一个看起来很混乱的代码,也许您应该尝试重构它,但是如果您隔离所有业务服务和控制器,我怀疑您是否会有多大好处

但正如您所说,每种方法都是高度特定于应用程序的。但是,一般来说,如果您编写CRUD应用程序,每个存储库一个业务类是好方法,但如果您有复杂的业务逻辑,恐怕这是不可能的

例如,您可以定义

@RestResource(path=“customer”,rel=“customer”)
公共接口CustomerRepository扩展了CrudeRepository{
客户findById(整数id);
PageFindBylastName(字符串名称,可分页);
PageFindBylastNameLike(字符串名称,可分页);
}
并通过使用SpringDataREST获得CRUDREST服务,而无需创建业务层逻辑(注意:这只是一个示例)

控制器也是如此

@RestResource(path = "customer", rel="customer")
public interface CustomerRepository extends CrudRepository<Customer, Integer> {

Customer findById(Integer id);

Page<Customer> findByLastname(String name, Pageable pageable);

Page<Customer> findByLastnameLike(String name, Pageable pageable);

}