Spring Boot学习笔记--Repository的使用

目录

一,信息库的概念

二,资源库和DAO的区别

三,库介绍

3.1 CrudRepository源码

3.2 PagingAndSortingRepository

3.3 JpaRepository


一,信息库的概念

库原意指的是仓库,即数据仓库的意思.Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。这样设计的好处有两个:

  1. 降低层级之间的耦合:更换,升级ORM引擎(休眠)并不会影响业务逻辑
  2. 提高测试效率:如果在测试时能用模拟数据对象代替实际的数据库操作,运行速度会快很多

二,资源库和DAO的区别

DAO是传统MVC中模型的关键角色,全称是数据访问对象.DAO直接负责数据库的存取工作,乍一看两者非常类似,但从架构设计上讲两者有着本质的区别:

库蕴含着真正的面向对象的概念,即一个数据仓库角色,负责所有对象的持久化管理.DAO仍然停留在数据操作的层面上.Repository是相对对象而言,DAO则是相对数据库而言,虽然可能是同一个东西,但侧重点完全不同。

三,库介绍

在Spring和Spring Data JPA中,有三种存储库接口方便开发者直接操作数据仓库。
它们之间的关系如下:( - >为继承关系)

JpaRepository - > PagingAndSortingRepository - > CrudRepository

3.1 CrudRepository源码

public interface CrudRepository<T, ID> extends Repository<T, ID> {
    <S extends T> S save(S var1);
    <S extends T> Iterable<S> saveAll(Iterable<S> var1);
    Optional<T> findById(ID var1);
    boolean existsById(ID var1);
    Iterable<T> findAll();
    Iterable<T> findAllById(Iterable<ID> var1);
    long count();
    void deleteById(ID var1);
    void delete(T var1);
    void deleteAll(Iterable<? extends T> var1);
    void deleteAll();
}

。CrudRepository提供基本的CRUD操作其中保存方法对应两种操作:数据存在主键时,执行更新操作,不存在主键时执行插入操作。

3.2 PagingAndSortingRepository

public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
    Iterable<T> findAll(Sort var1);
    Page<T> findAll(Pageable var1);
}

PagingAndSortingRepository增加了分页和排序的方法。

3.2.1分页

实现分页要传入一个可分页接口对象,PageRequest是可分页的实现类,传入页面和大小分页参数即可。

Pageable pageable = new PageRequest(page, size);

3.2.2排序

与分页类似,要达到排序的目录,仅需要传入排序对象即可。

Sort sort = new Sort(Sort.Direction.DESC, "name");

得到的名称属性按降序排序的结果列表。

3.2.3排序后分页

在可分页中,还可以传入排序属性。将排序对象先传入可分页,在将可分页对象属性传入就可以在分页中达到排序的目的。

Sort sort = new Sort(Sort.Direction.DESC, "name");
Pageable pageable = new PageRequest(page, size, sort);

3.3 JpaRepository

public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();
    List<T> findAll(Sort var1);
    List<T> findAllById(Iterable<ID> var1);
    <S extends T> List<S> saveAll(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);
}

JpaRepository则进一步在PagingAndSorting基础上,扩展了部分功能:

  • 查询列表         
  • 批量删除                                                                                                                                       
  • 强制同步
  • 例如查询

参考文章:https://segmentfault.com/a/1190000012346333#articleHeader4

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值