Spring Boot中JpaRepository(和CrudRepository有什么区别)

背景

再看一个demo,是说springboot整合数据源,也可以说是整合Dao层.
这里用了Spring-data-jpa.

先说一下jpa是什么?

JPA(java peersistence api),它并不是一个框架,而是一组规范。
其中,Hibernate就实现了这个规范.

框架使用了这个规范,对和数据库的交互做了一些底层的封装,比如我们的sql语句,怎么从数据库获取所需的数据?其实很多框架都可以做这个事情,我们熟悉的mybatis,那个熟悉的组件,sqlSessionFactory都记得吧,无非就是建立了一个通道,把我们在程序中写的按照框架的规范的sql语句转化成数据库引擎可以解析的sql,这样就实现了我们想要的功能。

底层代码都差不多.

springboot整合jpa的过程,也是这个道理.但springboot的版本升级太快,版本的问题带来的就是组件之间的兼容性问题,2.x之后和2.x之前的整合多少有些不太相似的地方,就导致整合时候各种奇葩的问题.

CrudRepository与JpaRepository的区别

自学Spring Boot的时候看视频上在介绍Spring Data JPA的时候,用的是JpaRepository接口,但看很多的博客用的是CrudRepository.
现在研究下两者的关系:
下面这两个接口代码和关系图我copy过来以作记录

@NoRepositoryBean
public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
    <S extends T> S save(S var1);
    <S extends T> Iterable<S> save(Iterable<S> var1);
    T findOne(ID var1);
    boolean exists(ID var1);
    Iterable<T> findAll();
    Iterable<T> findAll(Iterable<ID> var1);
    long count();
    void delete(ID var1);
    void delete(T var1);
    void delete(Iterable<? extends T> var1);
    void deleteAll();
}
@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();
    List<T> findAll(Sort var1);
    List<T> findAll(Iterable<ID> var1);
    <S extends T> List<S> save(Iterable<S> var1);
    void flush();
    <S extends T> S saveAndFlush(S var1);
    void deleteInBatch(Iterable<T> var1);
    void deleteAllInBatch();
    T getOne(ID var1);
    <S extends T> List<S> findAll(Example<S> var1);
    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}

看下他们的继承关系:
Spring Boot中JpaRepository(和CrudRepository有什么区别)_第1张图片
事实上,CrudRepository和PagingAndSortingRepository由Spring Data提供;JpaRepository 由Spring Data JPA提供,而Spring Data JPA又是Spring Data的一个子项目,这就是两者的关系。通常,最好的想法是使用 CrudRepository 或 PagingAndSortingRepository, 具体取决于是否需要排序和分页。如果可能,应该避免使用 JpaRepository ,因为它将存储库与JPA持久性技术联系起来,并且在大多数情况下,我们甚至可能不会使用它提供的额外方法。

用的结构不同,实现的写法也不一样.

参考:https://blog.csdn.net/xuemengrui12/article/details/80525227.

你可能感兴趣的:(SpringBoot)