前提
这篇文章是《SpringBoot2.x入门》专辑的「第9篇」文章,使用的SpringBoot
版本为2.3.1.RELEASE
,JDK
版本为1.8
。
这篇文章会介绍一下SpringBoot
如何引入和使用JPA
。JPA
,即Java Persistence API
,是一个基于O/R
(对象关系)映射的标准规范(目前最新版本是JPA2.x
)。所谓规范即只定义标准规则(如注解、接口),不提供实现,软件提供商可以按照标准规范来实现,而使用者只需按照规范中定义的方式来使用,而不用和软件提供商的实现打交道。
❝也就是说,JPA是一套规范,无论你使用哪种JPA实现,对于使用上或者编码上是一样的,不会因为提供商的改变而影响了使用
❞
JPA
的主要功能是通过注解或者XML
文件描述对象 - 关系表的映射关系,并且将运行时的实体对象持久化到数据源中。JPA
提供的功能如下:
ORM
映射元数据管理- 定义统一的持久化
API
- 定义查询语言
JPQL
目前,JPA
的主流实现框架有Hibernate
、EclipseLink
、TopLink
和OpenJPA
等等。「SpringBoot
中使用的JPA
实现是基于Hibernate
进行整合的」。
引入JPA
在BOM
版本管理下,直接引入spring-boot-starter-data-jpa
和相关依赖就行:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
项目的整体结构如下:
其中:
JpaAutoConfiguration
是配置类。CustomerDao
为DAO
类。Customer
为需要映射的实体类。
schema/ddl.sql
的内容如下:
USE local;
DROP TABLE IF EXISTS customer;
CREATE TABLE customer
(
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
first_name VARCHAR(8) NOT NULL COMMENT '姓氏',
last_name VARCHAR(8) NOT NULL COMMENT '名字',
age SMALLINT NOT NULL COMMENT '年龄',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
edit_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间'
) COMMENT '客户表';
细说各项配置
个人认为JPA
的配置项和需要注意的地方比使用MyBatis
的配置项要多,这里单独使用一个章节详细分析每种配置项和需要注意的地方。首先,需要在配置类中明确定义两组扫描的目录路径或者类:「