repository是指数据仓库的意思。Repository居于业务层和数据层之间,将两者隔离开来,在它的内部封装了数据查询和存储的逻辑,降低层级之间的耦合,更换、升级ORM引擎并不会影响原有的业务逻辑代码。
repository与dao的区别
DAO是MVC中的Model层,全称是Data Access Object,负责数据库的存取工作
Repository蕴含着面向对象即OO的概念,一个数据仓库角色,负责所有对象的持久化管理。
DAO则仍然停留在数据操作的层面上。Repository是相对对象而言,DAO则是相对数据库而言。
常用的Repository 有CrudRepository,PagingAndSortingRepository 和JpaRepository
CrudRepository
方法:
long count();
boolean exists(Integer arg0);
<S extends StudentPO> S save(S arg0);
<S extends StudentPO> Iterable<S> save(Iterable<S> arg0);
void delete(Integer arg0);
void delete(Iterable<? extends StudentPO> arg0);
void delete(StudentPO arg0);
void deleteAll();
StudentPO findOne(Integer arg0);
Iterable<StudentPO> findAll();
Iterable<StudentPO> findAll(Iterable<Integer> arg0);
注意 CrudRepository 中的save方法是相当于insert+update ,它会先判断记录是否存在,如果存在则更新,不存在则插入记录。
PagingAndSortingRepository
方法:
Iterable<T> findAll(Sort sort); //排序
Page<T> findAll(Pageable pageable); //分页查询(含排序功能)
构造pageable对象即可分页
Pageable pageable = new PageRequest(page, size);
构造Sort 对象即可排序
Sort sort = new Sort(Sort.Direction.DESC, "name");
传入sort进行构造pageable对象即可排序后分页
Pageable pageable = new PageRequest(page, size, sort);
JpaRepository
方法:
List<T> findAll(); //查找所有实体
List<T> findAll(Sort sort); //排序、查找所有实体
List<T> save(Iterable<? extends T> entities);//保存集合
void flush();//执行缓存与数据库同步
T saveAndFlush(T entity);//强制执行持久化
void deleteInBatch(Iterable<T> entities);//删除一个实体集合
JpaRepository在PagingAndSorting的基础上,扩展以下功能:
- 查询列表
- 批量删除
- 强制同步
- Example查询
JPA规范
JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。
转载spring data jpa reference