2.关系数据库 - Spring Data JPA
2.1 JPA、Hibernate和Spring Data JPA
JPA是Java Persistence API的缩写,即Java持久化API。最新版的JPA 2.2为JSR-338规范也属于Jakarta EE的一部分。 JPA是规范,它对数据库的各种操作的是JPA提供者(如:Hibernate)提供的实现;我们在使用规范开发时,只需要和规范的API打交道而无需关心规范的实现。Spring Data JPA是在JPA提供者之上所做的更高界别的抽象,让对数据库的操作更简单更语义化。
2.2 环境准备
2.2.1 安装MySQL
使用docker compose安装MySQL。
stack.yml
:
version: '3.1'
services:
db:
image: mysql
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- 3306:3306
environment:
MYSQL_DATABASE: first_db
MYSQL_ROOT_PASSWORD: zzzzzz
adminer:
image: adminer # 全功能数据库管理工具
restart: always
ports:
- 8081:8080
执行命令:
$ docker-compose -f stack.yml up -d
打开http://localhost:8081/访问adminer。
2.2.2 新建项目
新建应用,信息如下:
Group:top.wisely
Artifact:learning-spring-data-jpa
Dependencies:Spring Web Starter
、Spring Data JPA
、MySQL Driver
、Lombok
build.gradle
文件中的依赖如下:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'mysql:mysql-connector-java'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
//...
}
Spring Data JPA的版本由Spring Boot来维护。
2.3 Spring Boot下的自动配置
在非Spring Boot下,我们需要下面的条件才能JPA开发:
DataSource
:用来连接数据库;EntityManagerFactory
:获取EntityManager
和数据库进行交互;PlatformTransactionManager
:用来管理事务;@EnableJpaRepositories
:开启JPA Repository的配置;@EnableTransactionManagement
:开启事务管理的配置;
Spring Boot下对于Spring Data JPA主要有四个自动配置:
DataSourceAutoConfiguration
:使用DataSourceProperties
通过spring.datasource.*
来自动配置DataSource
。HibernateJpaAutoConfiguration
:- 导入
HibernateJpaConfiguration
,使用HibernateProperties
通过spring.jpa.hibernate.*
来进行Hibernate相关的配置。 HibernateJpaConfiguration
的父类JpaBaseConfiguration
使用JpaProperties
通过spring.jpa.*
进行JPA相关配置。自动配置了PlatformTransactionManager
、EntityManagerFactory
。
- 导入
JpaRepositoriesAutoConfiguration
:自动使用@EnableJpaRepositories
TransactionAutoConfiguration
:自动使用@EnableTransactionManagement
SpringDataWebAutoConfiguration
:自动使用@EnableSpringDataWebSupport
配置数据源连接数据库:
spring:
datasource:
url: jdbc:mysql://localhost:3306/first_db?useSSL=false
username: root
password: zzzzzz
driver-class-name: com.mysql.cj.jdbc.Driver
其他设置:
spring:
jpa:
show-sql: true # 控制台显示执行的sql语句
hibernate:
ddl-auto: update # 启动更新DDL(create、alter和drop等)
新书推荐:
我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html
主要包含目录有:
第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和屁股里(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)