在 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;
相关推荐
短剑重铸之日7 分钟前
《SpringBoot4.0初识》第一篇:前瞻与思想
java·开发语言·后端·spring·springboot4.0
蓝色王者28 分钟前
springboot 2.6.13 整合flowable6.8.1
java·spring boot·后端
柠檬叶子C28 分钟前
PostgreSQL 忘记 postgres 密码怎么办?(已解决)
数据库·postgresql
Tao____36 分钟前
基于Ruoyi开发的IOT物联网平台
java·网络·物联网·mqtt·网络协议
864记忆1 小时前
Qt创建连接注意事项
数据库·qt·nginx
花哥码天下1 小时前
apifox登录后设置token到环境变量
java·后端
浩瀚地学2 小时前
【Java】常用API(二)
java·开发语言·经验分享·笔记·学习
毕设十刻2 小时前
基于Vue的迅读网上书城22f4d(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
薛定谔的猫19822 小时前
Langchain(十二)LangGraph 实战入门:用流程图思维构建 LLM 工作流
数据库·microsoft