欢迎来到徐庆高(Tea)的个人博客网站
磨难很爱我,一度将我连根拔起。从惊慌失措到心力交瘁,我孤身一人,但并不孤独无依。依赖那些依赖我的人,信任那些信任我的人,帮助那些给予我帮助的人。如果我愿意,可以分裂成无数面镜子,让他们看见我,就像看见自己。察言观色和模仿学习是我的领域。像每个深受创伤的人那样,最终,我学会了随遇而安。
当前位置: 日志文章 > 详细内容

SpringBoot集成JPA全指南

2025年08月17日 Java
一、前言在 java web 开发中,数据库访问是绕不开的话题。传统方式使用 jdbc 编写 sql,维护困难、可读性差。后来有了 mybatis 这种半自动 orm 框架,再到 jpa(java p

一、前言

在 java web 开发中,数据库访问是绕不开的话题。

传统方式使用 jdbc 编写 sql,维护困难、可读性差。后来有了 mybatis 这种半自动 orm 框架,再到 jpa(java persistence api)这种全自动 orm 规范,可以让我们用面向对象的方式操作数据库,而不必写大量 sql。

spring boot 对 jpa 提供了非常友好的自动化支持,几乎可以“零配置”就完成数据库操作。

二、jpa 简介

jpa(java persistence api)并不是一个具体实现,而是 java 官方定义的 orm 规范,它的常见实现有:

  • hibernate(最常用,spring boot 默认 jpa 实现)
  • eclipselink
  • openjpa

核心思想

实体类(entity)映射数据库表,用 方法调用 代替手写 sql。

例如:

// 查询所有用户
list<user> users = userrepository.findall();

// 根据用户名查询
user user = userrepository.findbyusername("tom");

三、项目环境准备

1. 新建 spring boot 项目

在 spring initializr 选择:

spring boot 版本:3.x(或 2.7.x)

依赖:

  • spring web
  • spring data jpa
  • mysql driver

生成后导入 ide(intellij idea / vscode)。

2. maven 依赖

如果是手动添加,pom.xml 配置如下:

<dependencies>
    <!-- spring web -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-web</artifactid>
    </dependency>

    <!-- spring data jpa -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-data-jpa</artifactid>
    </dependency>

    <!-- mysql 驱动 -->
    <dependency>
        <groupid>com.mysql</groupid>
        <artifactid>mysql-connector-j</artifactid>
        <scope>runtime</scope>
    </dependency>

    <!-- 测试依赖 -->
    <dependency>
        <groupid>org.springframework.boot</groupid>
        <artifactid>spring-boot-starter-test</artifactid>
        <scope>test</scope>
    </dependency>
</dependencies>

3. 配置数据库连接

application.yml 中配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/jpa_demo?usessl=false&servertimezone=utc
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.driver

  jpa:
    hibernate:
      ddl-auto: update   # 自动建表(create、update、validate、none)
    show-sql: true       # 控制台打印 sql
    properties:
      hibernate:
        format_sql: true # 格式化 sql 输出

ddl-auto 参数说明:

  • create:每次启动删除旧表,创建新表
  • update:如果表不存在则创建,如果有新字段则更新
  • validate:验证表结构和实体类是否匹配
  • none:不做任何处理

四、编写 jpa 样例

1. 创建实体类

user.java

package com.example.jpademo.entity;

import jakarta.persistence.*;
import lombok.data;

@data
@entity
@table(name = "users") // 表名
public class user {

    @id
    @generatedvalue(strategy = generationtype.identity) // 自增主键
    private long id;

    @column(nullable = false, unique = true, length = 50)
    private string username;

    @column(nullable = false)
    private string password;
}

2. 创建 repository 接口

userrepository.java

package com.example.jpademo.repository;

import com.example.jpademo.entity.user;
import org.springframework.data.jpa.repository.jparepository;

public interface userrepository extends jparepository<user, long> {
    // 按用户名查找
    user findbyusername(string username);
}

jparepository 已经内置了大量方法:save()findall()findbyid()deletebyid() 等。

3. 创建 service 层

userservice.java

package com.example.jpademo.service;

import com.example.jpademo.entity.user;
import com.example.jpademo.repository.userrepository;
import org.springframework.stereotype.service;

import java.util.list;

@service
public class userservice {

    private final userrepository userrepository;
    public userservice(userrepository userrepository) {
        this.userrepository = userrepository;
    }

    public list<user> getallusers() {
        return userrepository.findall();
    }

    public user createuser(user user) {
        return userrepository.save(user);
    }
}

4. 创建 controller

usercontroller.java

package com.example.jpademo.controller;

import com.example.jpademo.entity.user;
import com.example.jpademo.service.userservice;
import org.springframework.web.bind.annotation.*;

import java.util.list;

@restcontroller
@requestmapping("/users")
public class usercontroller {

    private final userservice userservice;
    public usercontroller(userservice userservice) {
        this.userservice = userservice;
    }

    @getmapping
    public list<user> list() {
        return userservice.getallusers();
    }

    @postmapping
    public user add(@requestbody user user) {
        return userservice.createuser(user);
    }
}

五、运行测试

启动 spring boot 项目(idea run

使用 postman 测试:

新增用户

post http://localhost:8080/users
content-type: application/json

{
  "username": "tom",
  "password": "123456"
}

查询所有用户

get http://localhost:8080/users

控制台会输出类似:

insert into users (password, username) values (?, ?)
select u1_0.id, u1_0.password, u1_0.username from users u1_0

六、常见问题

为什么启动时会自动建表?
因为 spring.jpa.hibernate.ddl-auto 设置了 update,hibernate 会自动根据实体生成表结构。

不想自动建表怎么办?
ddl-auto 改成 nonevalidate,用手动 sql 建表。

怎么写复杂 sql?

  • 方法名查询:findbyusernameandpassword
  • jpql 查询:@query("select u from user u where u.username = ?1")
  • 原生 sql:@query(value = "select * from users where username = ?1", nativequery = true)

七、总结

spring boot 集成 jpa 最大的优点就是:

  • 几乎零配置即可运行
  • 面向对象操作数据库,减少 sql 编写
  • 内置方法丰富,支持分页、排序、条件查询
  • 复杂 sql 也可以灵活编写

但要注意:

  • 适合中小型业务,超复杂 sql 可能 mybatis 更高效
  • ddl-auto 在生产环境建议设为 none,防止误删表
  • 尽量用事务(@transactional)保证数据一致性

以上就是springboot集成jpa全指南的详细内容,更多关于springboot集成jpa的资料请关注代码网其它相关文章!