在 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;
相关推荐
Tzarevich37 分钟前
AIGC 时代,用自然语言操作 SQLite3 数据库
数据库·sqlite
r***013838 分钟前
MySQL最多能有多少连接
数据库·mysql
b***666142 分钟前
Spring Boot 整合 Apollo 配置中心实战
java·spring boot·后端
CoderYanger1 小时前
递归、搜索与回溯-综合练习:27.黄金矿工
java·算法·leetcode·深度优先·1024程序员节
l***061 小时前
Redis--模糊查询--方法实例
数据库·redis·缓存
b***66611 小时前
前端的dist包放到后端springboot项目下一起打包
前端·spring boot·后端
i***11861 小时前
springboot使用redis
spring boot·redis·后端
七烦1 小时前
金仓KingbaseES数据库安装至Linux系统
数据库·mysql·kingbasees
r***R2891 小时前
MySQL的日期时间类型
数据库·mysql
vx_vxbs661 小时前
【SSM高校普法系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
android·java·python·mysql·小程序·php·idea