Spring Boot JPA

Spring Boot JPA 是什么?

Spring Boot JPA 是 Spring Boot 框架对 JPA(Java Persistence API,Java持久化API)的封装与简化 ,核心是通过整合 Spring Data JPA 实现对数据库的对象化操作,让开发者无需编写繁琐的 SQL 语句,仅通过面向对象的方式(实体类、注解、Repository 接口)即可完成数据库的增删改查、分页、排序等操作。

简单来说:

  • JPA 是 Java 官方定义的持久化规范(接口),本身不提供实现;
  • Hibernate 是 JPA 最主流的实现(Spring Boot 默认集成 Hibernate);
  • Spring Data JPA 是 Spring 对 JPA 的进一步封装,简化了 Repository 层的代码编写;
  • Spring Boot JPA 则是 Spring Boot 把上述组件(Spring Data JPA + Hibernate)做了自动配置,开箱即用。

核心优势

  1. 简化开发:无需编写 SQL,通过注解/方法命名即可实现数据库操作;
  2. 对象化映射:将数据库表与 Java 实体类一一映射,符合面向对象思想;
  3. 自动配置:Spring Boot 自动配置数据源、JPA 核心组件(EntityManager、事务等);
  4. 灵活扩展:支持自定义 SQL、分页、排序、复杂查询(JPQL/Criteria API);
  5. 事务支持:无缝集成 Spring 事务管理。

核心组件与使用步骤

1. 核心依赖(Maven)

Spring Boot 提供了 spring-boot-starter-data-jpa 启动器,自动引入所有核心依赖:

xml 复制代码
<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>
2. 核心配置(application.yml)

Spring Boot 自动配置 JPA,但可通过配置项自定义:

yaml 复制代码
spring:
  # 数据源配置
  datasource:
    url: jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  # JPA配置
  jpa:
    hibernate:
      ddl-auto: update  # 表结构自动更新(create/create-drop/update/validate/none)
    show-sql: true      # 打印执行的SQL
    properties:
      hibernate:
        format_sql: true  # 格式化SQL
    database-platform: org.hibernate.dialect.MySQL8Dialect  # 数据库方言
3. 核心组件
组件 作用
实体类(@Entity) 映射数据库表,通过注解定义字段、主键、关联关系等
Repository 接口 继承 JpaRepository<T, ID>,自动获得增删改查、分页等方法
EntityManager JPA 核心对象,负责实体的持久化操作(Spring Boot 自动管理)
事务注解(@Transactional) 声明事务边界,Spring 自动管理事务
4. 快速使用示例
步骤1:定义实体类(映射数据库表)
java 复制代码
import jakarta.persistence.*; // Spring Boot 3.x 用jakarta.persistence,2.x 用javax.persistence

@Entity // 标记为JPA实体
@Table(name = "t_user") // 映射的数据库表名
public class User {
    @Id // 主键
    @GeneratedValue(strategy = GenerationType.IDENTITY) // 自增主键
    private Long id;
    
    @Column(name = "user_name", length = 50, nullable = false) // 映射字段
    private String userName;
    
    private Integer age;
    
    // 无参构造器(JPA必须)、getter/setter
    public User() {}
    
    // 省略getter/setter
}
步骤2:定义Repository接口
java 复制代码
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // 无需实现,Spring Data JPA 根据方法名自动生成SQL
    // 示例:根据年龄查询用户
    List<User> findByAge(Integer age);
    
    // 示例:根据用户名模糊查询 + 年龄排序
    List<User> findByUserNameLikeOrderByAgeDesc(String userName);
}
步骤3:业务层/控制器使用
java 复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    
    // 新增/修改用户
    @Transactional // 事务注解
    public User saveUser(User user) {
        return userRepository.save(user);
    }
    
    // 根据ID查询用户
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }
    
    // 根据年龄查询用户
    public List<User> getUsersByAge(Integer age) {
        return userRepository.findByAge(age);
    }
    
    // 删除用户
    @Transactional
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

关键知识点补充

  1. ddl-auto 配置说明

    • create:每次启动删除旧表,创建新表(开发测试用);
    • create-drop:启动创建表,关闭删除表;
    • update:根据实体类更新表结构(保留数据,推荐开发用);
    • validate:校验实体与表结构是否一致,不一致则报错;
    • none:不做任何操作(生产环境推荐)。
  2. 方法命名规则

    Spring Data JPA 支持通过方法名自动生成SQL,核心关键字:

    • 查询:findBygetByqueryBy
    • 条件:AndOrLikeBetweenGreaterThanLessThan
    • 排序:OrderBy...Asc/Desc
    • 统计:countByexistsBy
    • 删除:deleteBy
  3. 复杂查询

    • JPQL:面向对象的查询语言(类似SQL,但操作实体类);
    • Criteria API:动态构建查询(类型安全);
    • 原生SQL:通过 @Query(nativeQuery = true) 执行原生SQL。
  4. 分页与排序

    java 复制代码
    // 分页查询
    Page<User> page = userRepository.findAll(PageRequest.of(0, 10)); // 第1页,每页10条
    // 排序查询
    List<User> list = userRepository.findAll(Sort.by(Sort.Direction.DESC, "age"));

适用场景

  • 中后台管理系统、快速开发的业务场景;
  • 对 SQL 灵活性要求不高,追求开发效率的场景;
  • 适合面向对象的开发模式,减少重复的 CRUD 代码。

如果需要极致的 SQL 性能优化(如复杂报表、高并发查询),建议结合 MyBatis 一起使用(Spring Boot 也支持整合 MyBatis + JPA)。

相关推荐
SadSunset2 小时前
(44)Spring6集成MyBatis3.5(了解即可,大部分用springboot)
java·spring boot·后端
fanruitian3 小时前
SpringBoot 调用springai ollama
java·spring boot·后端
李慕婉学姐3 小时前
Springboot在线阅读平台的设计与实现5yy58005(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
计算机毕设VX:Fegn08953 小时前
计算机毕业设计|基于springboot + vue高校实验室教学管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
计算机学姐3 小时前
基于SpringBoot的共享单车管理系统【2026最新】
java·spring boot·后端·spring·java-ee·intellij-idea·mybatis
小贝IT~4 小时前
基于SpringBoot的网页时装购物系统-049
java·spring boot·后端
悟空码字4 小时前
文档变形记,SpringBoot实战:3步让Word乖乖变PDF
java·spring boot·后端
用户2190326527354 小时前
能省事”。SpringBoot+MyBatis-Plus:开发效率提升10倍!
java·spring boot·mybatis
爱笑的源码基地4 小时前
智慧校园电子班牌系统源码:基于Java+SpringBoot+Vue等技术开发的数字化管理平台,智慧班牌云平台源码
spring boot·智慧校园·电子班牌·源码·数字化·智慧班牌·智能化