核心概念

Spring Data repository抽象中最核心的接口就是Repository(显而易见的哈)。该接口使用了泛型,需要提供两个类型参数,第一个是接口处理的域对象类型,第二个是域对象的主键类型。这个接口常被看做是一个标记型接口,用来获取要操作的域对象类型和帮助开发者识别继承这个类的接口。在Repository的基础上,CrudRepository接口提供了针对实体类的复杂的CRUD(增删改查)操作。

Example 1.CrudRepository interface(CrudRepository接口)

  1. public interface CrudRepository<T, ID extends Serializable>
  2. extends Repository<T, ID> {
  3. <S extends T> S save(S entity); //1
  4. T findOne(ID primaryKey); //2
  5. Iterable<T> findAll(); //3
  6. Long count(); //4
  7. void delete(T entity); //5
  8. boolean exists(ID primaryKey); //6
  9. // … more functionality omitted.
  10. }
  11. 1.保存实体类
  12. 2.返回指定id的实体类
  13. 3.返回所有实体类
  14. 4.返回实体类的数量
  15. 5.删除指定实体类
  16. 6.判断指定id的实体类是否存在

Spring Data也提供了一些针对特定持久化技术的抽象,例如JpaRepositoryMongoRepository。这些接口均继承了CrudRepository

PagingAndSortingRepository接口在CrudRepository的基础上增加了一些方法,使开发者可以方便的对实体类进行分页和排序。

Example 2.PagingAndSortingRepository

  1. public interface PagingAndSortingRepository<T, ID extends Serializable>
  2. extends CrudRepository<T, ID> {
  3. Iterable<T> findAll(Sort sort);
  4. Page<T> findAll(Pageable pageable);
  5. }

在分页长度为20的基础上,想要获取第二页的User数据,代码如下

  1. PagingAndSortingRepository<User, Long> repository = // … get access to a bean
  2. Page<User> users = repository.findAll(new PageRequest(1, 20));

除了查询方法,还可以使用在查询基础上衍生出的count(获取数量)和delete(删除)方法。

Example 3.Derived Count Query(获取数量)

  1. public interface UserRepository extends CrudRepository<User, Long> {
  2. Long countByLastname(String lastname);
  3. }

Example 3.Derived Delete Query(删除)

  1. public interface UserRepository extends CrudRepository<User, Long> {
  2. Long deleteByLastname(String lastname);
  3. List<User> removeByLastname(String lastname);
  4. }