Administrator
Published on 2026-03-24 / 0 Visits
0

Spring Data JPA 集成 PostgreSQL 完整教程

#AI

Spring Data JPA 集成 PostgreSQL 完整教程

这是最简洁、可直接运行的 Spring Boot + Spring Data JPA + PostgreSQL 集成方案,包含完整配置、实体类、Repository、测试代码。

一、环境准备

  1. JDK 8+
  2. Spring Boot 2.x/3.x
  3. PostgreSQL 10+(本地/远程均可)
  4. Maven/Gradle

二、核心依赖(pom.xml)

<!-- Spring Boot 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>

<!-- PostgreSQL 驱动 -->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
</dependency>

三、application.yml 配置(推荐)

spring:
  # 数据源配置
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://localhost:5432/你的数据库名
    username: 数据库用户名
    password: 数据库密码

  # JPA 配置
  jpa:
    hibernate:
      # 自动创建/更新表(生产环境建议 none)
      ddl-auto: update
    # 显示 SQL 语句
    show-sql: true
    properties:
      hibernate:
        # 格式化 SQL
        format_sql: true
    # 指定数据库方言
    database-platform: org.hibernate.dialect.PostgreSQLDialect

关键配置说明

  • ddl-auto: update自动根据实体类创建/更新表,无需手动建表
  • database-platform:必须指定 PostgreSQL 方言,适配 pgsql 语法
  • 生产环境建议:ddl-auto: none,避免自动修改表结构

四、编写实体类(映射 PostgreSQL 表)

以用户表 sys_user 为例:

import jakarta.persistence.*; // Spring Boot 3.x
// Spring Boot 2.x 用 import javax.persistence.*;

import lombok.Data;

@Data
@Entity
@Table(name = "sys_user") // 映射 PostgreSQL 表名
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "username", unique = true, nullable = false, length = 50)
    private String username;

    @Column(name = "password", nullable = false, length = 100)
    private String password;

    @Column(name = "email", length = 100)
    private String email;

    @Column(name = "age")
    private Integer age;
}

五、编写 Repository 接口(继承 JPA)

直接继承 JpaRepository无需写 SQL 即可实现增删改查:

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    // 可自定义方法,JPA 自动实现
    User findByUsername(String username);
}

六、测试(Service/Controller)

1. Service 层

import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
@RequiredArgsConstructor
public class UserService {

    private final UserRepository userRepository;

    // 新增/更新用户
    public User saveUser(User user) {
        return userRepository.save(user);
    }

    // 根据ID查询
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    // 查询所有
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    // 删除
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

2. Controller 层(测试接口)

import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    @PostMapping("/save")
    public User save(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @GetMapping("/{id}")
    public User get(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @GetMapping("/list")
    public List<User> list() {
        return userService.getAllUsers();
    }

    @DeleteMapping("/{id}")
    public String delete(@PathVariable Long id) {
        userService.deleteUser(id);
        return "删除成功";
    }
}

七、启动测试

  1. 启动 Spring Boot 项目
  2. 自动在 PostgreSQL 中创建 sys_user
  3. 调用接口即可完成数据操作

常见问题解决

1. 连接失败

检查:

  • PostgreSQL 服务是否启动
  • 数据库名、账号、密码是否正确
  • 防火墙/安全组开放 5432 端口

2. 表创建失败

  • 确认 ddl-auto: update
  • 检查实体类 @Entity@Id 注解是否添加

3. Spring Boot 3.x 报错

必须使用 jakarta.persistence 包,不能用 javax.persistence


总结

  1. 只需3步完成集成:引入依赖 → 配置数据源 → 写实体+Repository
  2. Spring Data JPA 自动实现 CRUD,零 SQL 开发
  3. PostgreSQL 适配核心:驱动 + 方言 + 正确连接地址
  4. 生产环境关闭 ddl-auto,保证数据安全