JPA的相关概念
JPA是Java Persistence API的缩写,是Java EE的一部分,用于对象关系映射。它允许开发者通过JDK 5.0注解或XML描述对象-关系表的映射,并将运行期的实体对象持久化到数据库中。
JPA的核心接口和服务:
-
EntityManagerFactory
:用于创建EntityManager
实例。 -
EntityManager
:用于管理实体的生命周期,包括持久化、移除、查询等。 -
PersistenceContext
:持久化上下文,管理和维护实体的状态变化。 -
EntityTransaction
:用于实体事务管理。
JPA的主要优点:
-
标准化: JPA 是 JCP 规范的一部分,所以它保持了与Java EE和Java SE的兼容性。
-
容器级事务支持: JPA 实体管理器能参与容器管理的事务。
-
优秀的查询语言: JPA QL是面向对象的,语法类似于SQL,但是更加强大和灵活。
-
高效的数据缓存: JPA 提供了缓存管理,能够减少数据库的访问次数,提高性能。
-
自动持久化: JPA 能自动处理实体的持久化操作,减少了手动编写SQL的需求
Spring Data JPA
Spring Data JPA是Spring的一个子项目,用于简化数据库访问层的开发。它提供了基于JPA的Repository抽象接口,让你可以通过简单的接口继承来获取各种数据库操作方法。
Spring Data JPA的核心概念包括:
-
Repository:用于数据访问的抽象接口,可以自动产生实现代码。
-
Entity:实体类,对应数据库中的表。
-
EntityManager:用于管理实体的生命周期,包括持久化、查询等。
-
JpaRepository:继承自Repository,提供了JPA特定的方法。
-
CrudRepository:继承自JpaRepository,提供了基本的CRUD操作。
-
PagingAndSortingRepository:继承自CrudRepository,添加了分页和排序功能。
-
JpaSpecificationExecutor:用于复杂查询,如动态查询。
-
@Entity:标注在类上,表示该类为一个JPA实体。
-
@Table:标注在@Entity上,指定实体对应的数据库表。
-
@Id:标注在属性上,表示该属性为实体的主键。
-
@GeneratedValue:标注在@Id上,指定主键生成策略。
-
@Column:标注在属性上,指定实体属性对应的数据库列。
-
@Transient:标注在属性上,表示该属性不是一个JPA实体属性,不映射到数据库表中。
-
@OneToOne、@OneToMany、@ManyToOne、@ManyToMany:标注在属性上,表示实体之间的关联关系。
以下是一个简单的Spring Data JPA实体和仓库的例子:
在这个例子中,我们定义了一个User实体类,并使用了Spring Data JPA的JpaRepository接口来创建一个UserRepository接口。这个接口提供了基本的CRUD操作,以及一个根据用户名查询用户的自定义方法。
application.properties 配置