目录
3.2 PagingAndSortingRepository
一,信息库的概念
库原意指的是仓库,即数据仓库的意思.Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑。这样设计的好处有两个:
- 降低层级之间的耦合:更换,升级ORM引擎(休眠)并不会影响业务逻辑
- 提高测试效率:如果在测试时能用模拟数据对象代替实际的数据库操作,运行速度会快很多
二,资源库和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