跳转到主内容
极星编程网:以代码为星,赴技术山海!

SpringBoot集成JPA全指南

目录

一、前言

二、JPA 简介

三、项目环境准备

1. 新建 Spring Boot 项目2. Maven 依赖

3. 配置数据库连接

四、编写 JPA 样例

1. 创建实体类

2. 创建 Repository 接口3. 创建 Service 层4. 创建 Controller

五、运行测试

六、常见问题

七、总结

一、前言

在 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 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

配置如下:

org.springframework.bootspring-boot-starter-web

org.springframework.bootspring-boot-starter-data-jpa

com.mysqlmysql-connector-jruntime

org.springframework.bootspring-boot-starter-testtest

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.javapackage 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.javapackage com.example.jpademo.repository;

import com.example.jpademo.entity.User;import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository {// 按用户名查找User findByUsername(String username);}JpaRepository

已经内置了大量方法:

save()、findAll()、findById()、deleteById()等。

3. 创建 Service 层UserService.javapackage 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 getAllUsers() {return userRepository.findAll();}

public User createUser(User user) {return userRepository.save(user);}}4. 创建 ControllerUserController.javapackage 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 list() {return userService.getAllUsers();}

@PostMapping public User add(@RequestBody User user) {return userService.createUser(user);}}

五、运行测试

启动 Spring Boot 项目(IDEARun)

使用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改成none或validate,用手动 SQL 建表。

怎么写复杂 SQL?

方法名查询:

findByUsernameAndPasswordJPQL 查询:@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的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:jdk17 SpringBoot JPA集成多数据库的示例详解SpringBoot集成IJPay实现微信v3支付的示例代码SpringBoot如何使用TestEntityManager进行JPA集成测试SpringBoot集成Jpa对数据进行排序、分页、条件查询和过滤操作SpringBoot集成JPA持久层框架,简化数据库操作

相关文章