java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot集成JPA

SpringBoot集成JPA全指南

作者:柯南二号

在Java Web开发中,数据库访问是绕不开的话题,传统方式使用JDBC编写SQL,维护困难、可读性差,后来有了MyBatis这种半自动ORM框架,再到JPA这种全自动ORM规范,SpringBoot对JPA提供了非常友好的自动化支持,本文给大家介绍了SpringBoot集成JPA全指南

一、前言

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

传统方式使用 JDBC 编写 SQL,维护困难、可读性差。后来有了 MyBatis 这种半自动 ORM 框架,再到 JPA(Java Persistence API)这种全自动 ORM 规范,可以让我们用面向对象的方式操作数据库,而不必写大量 SQL。

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

二、JPA 简介

JPA(Java Persistence API)并不是一个具体实现,而是 Java 官方定义的 ORM 规范,它的常见实现有:

核心思想

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

例如:

// 查询所有用户
List<User> users = userRepository.findAll();

// 根据用户名查询
User user = userRepository.findByUsername("Tom");

三、项目环境准备

1. 新建 Spring Boot 项目

在 Spring Initializr 选择:

Spring Boot 版本:3.x(或 2.7.x)

依赖:

生成后导入 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 参数说明:

四、编写 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?

七、总结

Spring Boot 集成 JPA 最大的优点就是:

但要注意:

以上就是SpringBoot集成JPA全指南的详细内容,更多关于SpringBoot集成JPA的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文