Spring Data JPA 实战(一)
一.Spring DataJPA介绍
使用Spring Data Repository将程序员从大量重复繁杂的数据库层操作中解放啊出来。
二.Repository:遍历的数据访问层
1. Repository的体系结构
2. Repository接口介绍
2.1 Repository
Spring-Data-Commons包提供了Repository接口,该接口是一个标识接口,也是Spring dataRepository的核心接口,这个接口需要将领域类以及领域类ID的类型做为参数,主要的作用如下:
1. 能够让spring的基础设置识别出用户定义的所有Spring Data Repository。
2. 大幅简化了各种持久化存储的持久层实现
3. 捕获托管的领域类和实体的ID类型
packageorg.springframework.data.repository;
import java.io.Serializable;
public abstract interface Repository<T,IDextendsSerializable> {
}
2.2 CrudRepository
CrudRepository继承了Repository接口,并声明了以下能力:
(1)保存给定的实体。
(2)返回指定ID的实体。
(3)返回全部实体。
(4)返回实体的总数。
(5)删除指定的实体。
(6)判断给定的ID是否存在。
我们可以通过继承CrudRepository接口去扩展我们需要的特性及服务。
CrudRepository源码如下:
@NoRepositoryBean
public abstract interfaceCrudRepository<T, ID extends Serializable> extends Repository<T,ID> {
publicabstract <S extends T> S save(S paramS);
publicabstract <S extends T> Iterable<S> save(Iterable<S>paramIterable);
publicabstract T findOne(ID paramID);
publicabstract boolean exists(ID paramID);
publicabstract Iterable<T> findAll();
publicabstract Iterable<T> findAll(Iterable<ID> paramIterable);
publicabstract long count();
publicabstract void delete(ID paramID);
publicabstract void delete(T paramT);
publicabstract void delete(Iterable<? extends T> paramIterable);
publicabstract void deleteAll();
}
2.3 PagingAndSortingRepository
PagingAndSortingRepository 继承了CrudRepository接口,提供了分页与排序的功能。
例如:如果我们想查询第二页的20行的用户数据,可以通过如下方式实现:
PagingAndSortingRepository<User,Long> repository = // … get access to a bean
Page<User> users =repository.findAll(new PageRequest(1, 20));
PagingAndSortingRepository源码如下:
public abstractinterfacePagingAndSortingRepository<T, IDextends Serializable>extends CrudRepository<T,ID> {
public abstractIterable<T> findAll(Sort paramSort);
public abstract Page<T>findAll(Pageable paramPageable);
}
2.4 JpaRepository
JpaRepository接口是Spring Data Jpa对Spring DataRepository的实现。该接口继承自PagingAndSortingRepository,并进行了扩展。
JpaRepository源码如下:
@NoRepositoryBean
publicabstract interface JpaRepository<T, ID extends Serializable> extendsPagingAndSortingRepository<T, ID> {
public abstract List<T> findAll();
public abstract List<T>findAll(Sort paramSort);
public abstract List<T>findAll(Iterable<ID> paramIterable);
public abstract <S extends T>List<S> save(Iterable<S> paramIterable);
public abstract void flush();
public abstract <S extends T> SsaveAndFlush(S paramS);
public abstract voiddeleteInBatch(Iterable<T> paramIterable);
public abstract void deleteAllInBatch();
public abstract T getOne(ID paramID);
}
3. Repository配置
<jpa:repositories>是spring datajpa的重要配置:启用扫描并自动创建代理。
<jpa:repositories>
<!-- Spring Data Jpa配置 -->
<jpa:repositoriesbase-package="com.yyjz"
transaction-manager-ref="transactionManager"
entity-manager-factory-ref="entityManagerFactory"<