核心概念
Spring Data repository抽象中最核心的接口就是Repository(显而易见的哈)。该接口使用了泛型,需要提供两个类型参数,第一个是接口处理的域对象类型,第二个是域对象的主键类型。这个接口常被看做是一个标记型接口,用来获取要操作的域对象类型和帮助开发者识别继承这个类的接口。在Repository的基础上,CrudRepository接口提供了针对实体类的复杂的CRUD(增删改查)操作。
Example 1.CrudRepository interface(CrudRepository接口)
public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {
<S extends T> S save(S entity); //1
T findOne(ID primaryKey); //2
Iterable<T> findAll(); //3
Long count(); //4
void delete(T entity); //5
boolean exists(ID primaryKey); //6
// … more functionality omitted.
}
1.保存实体类
2.返回指定id的实体类
3.返回所有实体类
4.返回实体类的数量
5.删除指定实体类
6.判断指定id的实体类是否存在
Spring Data也提供了一些针对特定持久化技术的抽象,例如JpaRepository和MongoRepository。这些接口均继承了CrudRepository
PagingAndSortingRepository接口在CrudRepository的基础上增加了一些方法,使开发者可以方便的对实体类进行分页和排序。
Example 2.PagingAndSortingRepository
public interface PagingAndSortingRepository<T, ID extends Serializable>
extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
在分页长度为20的基础上,想要获取第二页的User数据,代码如下
PagingAndSortingRepository<User, Long> repository = // … get access to a bean
Page<User> users = repository.findAll(new PageRequest(1, 20));
除了查询方法,还可以使用在查询基础上衍生出的count(获取数量)和delete(删除)方法。
Example 3.Derived Count Query(获取数量)
public interface UserRepository extends CrudRepository<User, Long> {
Long countByLastname(String lastname);
}
Example 3.Derived Delete Query(删除)
public interface UserRepository extends CrudRepository<User, Long> {
Long deleteByLastname(String lastname);
List<User> removeByLastname(String lastname);
}