Spring Boot 与 Spring Data JPA 操作 MySQL 数据库(二)
I. 引言
A. Spring Boot 和 Spring Data JPA 的简介
Spring Boot 是 Spring Framework 的一种快速开发框架,它通过自动配置、约定优于配置等方式,帮助开发人员快速构建 Spring 应用程序。Spring Data JPA 是 Spring 框架提供的一种简化数据库访问的解决方案,它基于 JPA 规范,提供了一种统一的数据访问方式,支持多种关系型数据库。
B. 目的和意义
本文将介绍如何使用 Spring Boot 和 Spring Data JPA 集成 MySQL 数据库,通过使用 JPA 规范,简化 MySQL 数据库的操作,并使用 Spring Boot 的自动配置功能,进一步简化开发流程。
II. Spring Boot 和 Spring Data JPA 的集成
A. 添加依赖
在 pom.xml 文件中添加 Spring Boot 和 Spring Data JPA 的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
C. 配置数据源
在 application.properties 文件中配置 MySQL 数据库的连接信息:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/my_database?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
B. 使用关联查询
除了基本的 CRUD 操作外,Spring Data JPA 还支持关联查询。假设我们有一个班级表 class
,每个学生属于一个班级,那么我们可以通过关联查询找到每个班级对应的学生列表。
1. 创建班级实体类
首先,我们需要创建一个班级实体类,用于映射数据库中的班级表。创建一个 Class
实体类:
@Entity
@Table(name = "class")
public class Class {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@OneToMany(mappedBy = "class")
private List<Student> students;
// getters and setters
}
可以看到,Class
实体类中包含一个 @OneToMany
注解,用于指定与 Student
实体类的一对多关联关系,mappedBy
属性指定了映射关系的反向属性名,即 Student
实体类中的 class
属性。
2. 修改学生实体类
接着,我们需要在 Student
实体类中添加一个关联属性 class
,用于指定每个学生所属的班级。
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "age")
private Integer age;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "class_id")
private Class clazz;
// getters and setters
}
可以看到,Student
实体类中包含一个 @ManyToOne
注解,用于指定与 Class
实体类的多对一关联关系,fetch
属性指定了懒加载策略,JoinColumn
属性指定了映射关系的外键字段名。
3. 创建班级仓库接口
接下来,我们需要创建一个班级仓库接口,用于查询班级信息及其关联的学生列表。
@Repository
public interface ClassRepository