📅  最后修改于: 2023-12-03 15:20:13.777000             🧑  作者: Mango
Spring Boot Starter JPA 是使用 Spring Boot 快速开发 Java Web 应用程序时经常使用的依赖包之一。它提供了使用 Java Persistence API(JPA)访问关系型数据库的实现,极大地简化了与数据库的交互和管理。本文将介绍 Spring Boot Starter JPA 的使用和一些注意事项。
Spring Boot Starter JPA 的依赖包可以通过 Maven 或 Gradle 在项目中引入。在 Maven 中,添加以下依赖到 pom.xml
文件中即可:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
在 Gradle 中,添加以下依赖到 build.gradle
文件中即可:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
默认情况下,Spring Boot Starter JPA 使用 H2 数据库作为开发模式下的默认数据库。实际情况下,我们往往需要连接到其他关系型数据库,例如 MySQL、PostgreSQL、Oracle 等。在 application.properties
或 application.yml
文件中配置相关数据库信息即可:
spring:
datasource:
url: {数据库连接地址}
username: {用户名}
password: {密码}
driver-class-name: {JDBC驱动}
jpa:
hibernate:
ddl-auto: {数据表创建方式} # create: 每次运行时都创建表,update: 根据实体类自行进行更新,validate: 只校验实体类与数据表的对应关系,none: 不进行任何操作。
show-sql: {是否显示SQL} # true: 显示 SQL,false: 不显示 SQL
properties:
hibernate:
dialect: {数据方言} # 选择适合所用数据库的方言
例如,配置 MySQL 数据库信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
在 Spring Boot 应用程序中使用 Spring Boot Starter JPA 很容易,只需要简单地为实体类定义一个 JPA 注解即可将其映射到数据库中。例如,创建一个 User 类,使用 @Entity
表明它是一个实体类,使用 @Id
和 @GeneratedValue
表明它的主键 id 将自动生成:
@Entity
public class User {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private Integer age;
// getters/setters
}
在这个例子中,User 类将映射到名为 user 的数据表中,其中包含三个字段:id、name 和 age。
使用 Spring Boot Starter JPA 的最简单方式是定义一个继承自 JpaRepository 的接口。例如,定义一个 UserRepository 接口,继承自 JpaRepository<User, Long>,表示 User 类的 id 字段类型是 Long 类型。然后,我们就可以在代码中使用该接口提供的方法来访问 user 数据表了:
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
}
例如,我们可以使用 findByName
方法查询所有有给定名称的用户:
@Autowired
private UserRepository userRepository;
public List<User> getUsersByName(String name) {
return userRepository.findByName(name);
}