JPA使用的模式?
我刚刚开始使用JpaRepository,我想知道其他人使用什么模式来处理它。我注意到我在dao层中至少声明了2个存储库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
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);
}