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<User> users = userRepository.findAll(); // 根据用户名查询 User user = userRepository.findByUsername("Tom");
三、项目环境准备
1. 新建 Spring Boot 项目
在 Spring Initializr 选择:
Spring BesnTyoot 版本: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?usandroideSSL=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; } php
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.jwww.devze.compademo.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 { www.devze.com 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
改成 none
或 validate
,用手动 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的资料请关注编程客栈(www.devze.com)其它相关文章!
精彩评论