目录
一、前言
二、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
// 根据用户名查询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
配置如下:
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 JpaRepositoryJpaRepository
已经内置了大量方法:
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
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
@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持久层框架,简化数据库操作
