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等)
转自:https://blog.csdn.net/wiselyman/article/details/106273980