出入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 }