什么是JPA
- JPA(Java Persistemce API)是用于管理Java EE和Java SE环境中持久化,以及对像/关系映射的Java API
- 实现:EclipseLink、Hibernate、Apache OpenJPA等。
JPA核心概念
实体
- 实体表示关系型数据库中的表。
- 每个实体实力对应于该表中的行。
- 类必须用javax.persistence.Entity注解。
- 类必须有一个public或protected的无参数构造函数。
- 实体实例被当做值以分离对象方式进行传递(例如通过回话bean的远程业务接口),则该类必须实现Serializable接口。
- 唯一的对象标识符:简单主键(javax.persistence.Id)、复合主键(javax.persistence.Embeddedld何javax.persistence.IdClass)
关系
- 一对一:@OneToOne
- 一对多:@OneToMany
- 多对一:@ManyToOne
- 多对多:@ManyToMany
EntityManager接口
- 定义用于持久性上下文进行交互的方法。
- 创建和删除持久化实体实例,通过实体的主键查找实例。
- 允许在实体上进行查询。
什么是Spring Data JPA
- Spring Data家族的一部分。
- 对基于JPA的数据访问层的增强支持。
- 更容易构建使用Spring数据访问技术栈的应用。
Spring Data JPA常用接口
- CrudRepository
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S var1);
<S extends T> Iterable<S> saveAll(Iterable<S> var1);
Optional<T> findById(ID var1);
boolean existsById(ID var1);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> var1);
long count();
void deleteById(ID var1);
void delete(T var1);
void deleteAll(Iterable<? extends T> var1);
void deleteAll();
}
- PagingAndSortingRepository
对上面的CrudRepository做了一些扩展,提供排序和分页的方法。
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort var1);
Page<T> findAll(Pageable var1);
}
Spring Data JPA自定义接口
根据方法名创建查询
public interface PersonRepository extends Repository<User, Long>{
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
//启用 distinct 去重标志
List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);
List<People> findPeopleDistinctByLastnameOrFirstname(Strinf lastname, String firstname);
//给独立的属性启用 ignore case
List<Person> findByLastnameIgnoreCase(String lastname);
//给所有合适的属性启用 ignore case
List<Person> findByLastnameAndFirstnameIgnoreCase(String lastname, String firstname);
//启用 order by
List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
List<Person> findByLastnameOrderByFirstnameDesc(String lastname);
}
Spring Data JPA、Hibernate与Spring boot集成
配置环境
- Mysql Community Server
- Spring Data JPA
- Hibernate
- Mysql Connector
maven配置如下
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- springdata jpa依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>