目录
一,信息库的概念
二,资源库和DAO的区别
三,库介绍
3.1 CrudRepository源码
3.2 PagingAndSortingRepository
3.3 JpaRepository
库原意指的是仓库,即数据仓库的意思.Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。这样设计的好处有两个:
DAO是传统MVC中模型的关键角色,全称是数据访问对象.DAO直接负责数据库的存取工作,乍一看两者非常类似,但从架构设计上讲两者有着本质的区别:
库蕴含着真正的面向对象的概念,即一个数据仓库角色,负责所有对象的持久化管理.DAO仍然停留在数据操作的层面上.Repository是相对对象而言,DAO则是相对数据库而言,虽然可能是同一个东西,但侧重点完全不同。
在Spring和Spring Data JPA中,有三种存储库接口方便开发者直接操作数据仓库。
它们之间的关系如下:( - >为继承关系)
JpaRepository - > PagingAndSortingRepository - > CrudRepository
public interface CrudRepository extends Repository {
S save(S var1);
Iterable saveAll(Iterable var1);
Optional findById(ID var1);
boolean existsById(ID var1);
Iterable findAll();
Iterable findAllById(Iterable var1);
long count();
void deleteById(ID var1);
void delete(T var1);
void deleteAll(Iterable var1);
void deleteAll();
}
。CrudRepository提供基本的CRUD操作其中保存方法对应两种操作:数据存在主键时,执行更新操作,不存在主键时执行插入操作。
public interface PagingAndSortingRepository extends CrudRepository {
Iterable findAll(Sort var1);
Page 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);
public interface JpaRepository extends PagingAndSortingRepository, QueryByExampleExecutor {
List findAll();
List findAll(Sort var1);
List findAllById(Iterable var1);
List saveAll(Iterable var1);
void flush();
S saveAndFlush(S var1);
void deleteInBatch(Iterable var1);
void deleteAllInBatch();
T getOne(ID var1);
List findAll(Example var1);
List findAll(Example var1, Sort var2);
}
JpaRepository则进一步在PagingAndSorting基础上,扩展了部分功能:
参考文章:https://segmentfault.com/a/1190000012346333#articleHeader4