出入Spring boot(六)数据访问

  Spring Data提供了使用统一的API进行数据访问操作,这是Spring通过提供Spring DataCommons项目来实现的,它是Spring data的依赖Spring Data Commons让我们在使用关系型或非关系型数据访问技术时都使用基于Spring的统一标准,该标准包含CRUD(创建、获取、更新、删除)、查询、排序和分页的相关的操作。

  Spring Data Commons有一个重要的概念:Spring Data Repository抽象。使用Spring Data Repository可以极大地减少数据访问层的代码。既然是数据访问操作的统一标准,那肯定定义了各种各样和数据访问相关的接口,Spring Data Repository抽象的跟接口是Repository接口:

 1 public interface Repository <T, ID extends java.io.Serializable> { } 

它的子接口CrudRepository定义了和CRUD操作相关的内容

 1 @NoRepositoryBean
 2 public interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID> {
 3     <S extends T> S save(S var1);
 4 
 5     <S extends T> Iterable<S> save(Iterable<S> var1);
 6 
 7     T findOne(ID var1);
 8 
 9     boolean exists(ID var1);
10 
11     Iterable<T> findAll();
12 
13     Iterable<T> findAll(Iterable<ID> var1);
14 
15     long count();
16 
17     void delete(ID var1);
18 
19     void delete(T var1);
20 
21     void delete(Iterable<? extends T> var1);
22 
23     void deleteAll();
24 }

CrudRepository的子接口PagingAndSortingRepository定义了与分页和排序操作相关的内容:

1 @NoRepositoryBean
2 public interface PagingAndSortingRepository<T, ID extends Serializable> extends CrudRepository<T, ID> {
3     Iterable<T> findAll(Sort var1);
4 
5     Page<T> findAll(Pageable var1);
6 }

不同的数据访问技术也提供了不同的Repository,如Spring Data JPA有JpaRepository、Spring Data MongoDB有MongoRepository。Spring Data项目还给我们提供了一个激动人心的功能,即可以根据属性名进行计数、删除、查询方法等操作,

 1 public interface PersonRepository extends CustomRepository<Person, Long> {
 2     Long countByAge(Integer age);
 3     
 4     List<Person> findByAddress(String address);
 5     
 6     Person findByNameAndAddress(String name,String address);
 7     
 8     @Query("select p from Person p where p.name= :name and p.address= :address")
 9     
10     Person withNameAndAddressQuery(@Param("name")String name,@Param("address")String address);
11     
12     Person withNameAndAddressNamedQuery(String name,String address);
13 
14 }

 

posted @ 2017-04-17 20:56  kevin_shen  阅读(282)  评论(0编辑  收藏  举报