数据仓库层Repository(CrudRepositoryPagingAndSortingRepositoryJpaRepository)

Posted 慕斯-ing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓库层Repository(CrudRepositoryPagingAndSortingRepositoryJpaRepository)相关的知识,希望对你有一定的参考价值。

什么是数据仓库层Repository?

数据仓库接口的作用:Repository原意指的是仓库,即数据仓库的意思。Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。
Repository接口:
1、CrudRepository

2、PagingAndSortingRepository

3、JpaRepository

CrudRepository、PagingAndSortingRepository和JpaRepository三者的关系图如下所示:

综上所述,JpaRepository的功能最全、最强大,所以我们的数据仓库类继承JpaRepository
注意: 创建的数据仓库类是一个接口(不是抽象类、也不是普通类),针对这个接口添加注解@Repository。

Repository和DAO的区别

DAO是传统MVC中Model的关键角色,全称是Data Access Object。DAO直接负责数据库的存取工作,乍一看两者非常类似,但从架构设计上讲两者有着本质的区别:Repository是相对对象而言,DAO则是相对数据库而言,虽然可能是同一个东西 ,但侧重点完全不同。

JpaSpecificationExecutor

JpaSpecificationExecutor(用于特殊的业务场景如:既要有分页又要有排序,里面还有各种动态的查询,虽然此时通过JpaRepository能实现,但是JpaSpecificationExecutor更简单)

自定义接口继承JpaRepository

/*公司数据仓库接口(创建的数据仓库类是一个接口(不是抽象类、也不是普通类),针对这个接口添加注解@Repository。)*/
//类只能继承单个,但是接口可以继承多个
@Repository
public interface CompanyRepo extends JpaRepository<Company,String>    // 指向对应的实体类Company,String与主键的类型一致(uuid string类型),如果是自增列则填写int

    // 原生sql语句查询,需要nativeQuery=true,如果为false则表示使用HQL语句
    @Query(value = "select * from company where comname=?1",nativeQuery = true)  // 精准查询
    List<Company> findByNativeSQL(String comname);  // 表示传入一个公司名称comname,那么就会把所有满足该名称的信息查询出来

    @Query(value="select * from company where comname like '%?1%'",nativeQuery = true)  // 模糊查询
    List<Company> findByNativeSQL1(String comname);

    //原生sql语句操作(涉及到数据变动的,如删除和更新,必须加注解@Modifying)
    @Modifying
    @Query(value = "update company set comaddress =?1 where comname=?2",nativeQuery = true)
    void updateByName(String comaddress,String comname);


以上是关于数据仓库层Repository(CrudRepositoryPagingAndSortingRepositoryJpaRepository)的主要内容,如果未能解决你的问题,请参考以下文章

add repository(仓库) EntityState状态

App 组件化/模块化之路——Repository 模式

关于Repository模式

数据访问层之Repository

一个模块的业务层可以直接访问另一个模块的repository吗?

github 删除仓库 repository