JPA(java persistence API)用于管理JavaEE和JavaSE环境中的持久化,以及对象/关系映射的JavaAPI
- 是处理数据持久化的一个接口,规范
- 核心概念
- 实体(pojo)表示关系数据库中的一个表
- 每个实体实例对应着该表中的一行
- 类必须用javax.persistence.Entity注解
- 类必须含有一个public或者protected的无参构造函数
- 当实体实例被当做值以分离对象的方式进行传递(例如通过会话bean的远程业务接口)则该类必须实现Serializable(序列化)接口
- 唯一的对象标志符,简单主键(javax.persistence.Id),复合主键(javax.persistence.EmbeddledId和javax.persistence.IdClass)
- 关系
- 一对一:@OneToOne
- 一对多:@OneToMany
- 多对一:@ManyToOne
- 多对多:@ManyToMany
- EntityManager
- 管理实体的一个类,接口
- 定义与持久性上下文进行交互的方法
- 创建和删除持久实体类,通过实体的主键查找实体
- 允许在实体类上进行查询
- spring data JPA
- 是更大spring data家族的一部分
- 对基于JPA的数据访问层的增强支持,即对数据访问层就行了更好的规范
- 更容易构建基于使用spring数据访问技术站的应用程序
- 常用的接口
- CrudRepository
- 处理数据的增删改查等操作的接口
public interface CrudRepository<T,ID extendsSerializable> extends Repository<T,ID> { <S extends T> S save(S,entity); T findOne(ID primaryKey); Iterable<T> findAll(); Long count(); void delete (T, entity); boolean exists(ID,primaryKey); }
- PagingAndSortingRepository
- 处理分页和排序的一个接口
public interface PagingAndSortingRepository<T,ID extends Serializable> extends CrudRepository<T,ID> { Itarable<T> findAll(Sort sort); Page<T> findAll(Pageable pageable); }
- CrudRepository
- 如何自定义接口
- 根据方法名创建查询
public interface PeopleRepository extends Repository<User,Long>{ List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress,String lastname); //启动distinct标志 List<Person> findDistinctPeopleByLastNameOrFirstName(String lastname,String firstname); //给独立的属性启用ignore case :忽视大小写 List<Person> findByLastNameIgnoreCase(String lastname); List<Person> findByLastNameAndFistNameAllIgnoreCase(String lastname,String fistname); //启用order by List<Person> findByLastNameOrderByFirstNameAsc(String lastname); List<Person> findByLastNameOrderByFirstNameDesc(String lastname); ....... }