在 Spring Boot 中使用 JPA(Java Persistence API)进行数据库操作

步骤 1: 添加依赖

pom.xml 文件中添加相关依赖:

XML 复制代码
<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Data JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- MySQL JDBC Driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <!-- Spring Boot Starter Thymeleaf (Optional, 如果需要页面渲染的话) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

步骤 2: 配置数据库连接

application.propertiesapplication.yml 中配置数据库连接信息,并指定 JPA 自动生成数据库表的策略。

bash 复制代码
# MySQL 数据库连接配置
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false
spring.datasource.username=root
spring.datasource.password=your_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# JPA 配置,自动根据实体类生成数据库表
spring.jpa.hibernate.ddl-auto=update  # 自动更新表结构,开发中可以使用,生产中不推荐使用

# JPA 配置,指定数据库方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

# 显示SQL
spring.jpa.show-sql=true

# 自动格式化SQL
spring.jpa.properties.hibernate.format_sql=true
3. 创建实体类

创建一个简单的 JPA 实体类,这个类会映射到数据库中的表。如果数据库中不存在这个表,JPA 会根据实体类自动创建

java 复制代码
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)  // 自动生成主键
    private Long id;
    
    private String name;
    
    private String email;

    // Getters 和 Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
4. 创建 Repository 接口

创建一个继承 JpaRepository 的接口,JPA 会自动提供基本的 CRUD 操作。

java 复制代码
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    // 可以添加自定义查询方法
}
5. 创建服务层

创建一个服务层来操作数据。

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    // 保存用户
    public User saveUser(User user) {
        return userRepository.save(user);
    }

    // 获取所有用户
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }
}
6. 创建 Controller 层

创建一个简单的 Controller 来处理 HTTP 请求。

java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    // 获取所有用户
    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    // 创建用户
    @PostMapping
    public User createUser(@RequestBody User user) {
        return userService.saveUser(user);
    }
}
7. 数据库表结构变化

每当你对 User 实体类进行修改(例如增加字段),ddl-auto=update 配置会自动调整数据库表结构。例如,如果你在 User 类中添加一个字段:

java 复制代码
private String phoneNumber;
相关推荐
清水白石00810 分钟前
解构异步编程的两种哲学:从 asyncio 到 Trio,理解 Nursery 的魔力
运维·服务器·数据库·python
资生算法程序员_畅想家_剑魔12 分钟前
Mysql常见报错解决分享-01-Invalid escape character in string.
数据库·mysql
一嘴一个橘子18 分钟前
spring-aop 的 基础使用 - 4 - 环绕通知 @Around
java
小毅&Nora35 分钟前
【Java线程安全实战】⑨ CompletableFuture的高级用法:从基础到高阶,结合虚拟线程
java·线程安全·虚拟线程
冰冰菜的扣jio35 分钟前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
PyHaVolask38 分钟前
SQL注入漏洞原理
数据库·sql
小璐猪头1 小时前
专为 Spring Boot 设计的 Elasticsearch 日志收集 Starter
java
ptc学习者1 小时前
黑格尔时代后崩解的辩证法
数据库
代码游侠1 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
ps酷教程1 小时前
HttpPostRequestDecoder源码浅析
java·http·netty