在 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;
相关推荐
圆周率的后六位2 分钟前
图数据库调研
数据库·图数据库
m0_748256567 分钟前
MySQL数据库误删恢复_mysql 数据 误删
数据库·mysql·adb
O(1)的boot34 分钟前
微服务的问题
java·数据库·微服务
一个略懂代码的程序员38 分钟前
Redis01
java·redis
IT界的奇葩42 分钟前
基于springboot使用Caffeine
java·spring boot·后端·caffeine
rookiesx1 小时前
springboot jenkins job error console log
spring boot·后端·jenkins
西埃斯迪恩-霖1 小时前
Idea导入SpringBoot3.2.x源码
java·ide·intellij-idea
骐骥11 小时前
PostgreSQL/PostGIS中提升空间查询(分析)性能(效率)的一些方法
数据库·postgresql·postgis·空间分析·空间查询
jikuaidi6yuan1 小时前
并行口的基本概念
数据库·mongodb
m0_748251722 小时前
Spring Boot 经典九设计模式全览
java·spring boot·设计模式