spring.jpa.hibernate.ddl-auto 程序启动时如何处理数据库表结构

 

 

spring.jpa.hibernate.ddl-auto
 
Hibernate 根据这个配置值,决定程序启动时如何处理数据库表结构(schema)
ddl-auto:自动管理数据表。应用每次启动,Hibernate 自动操作表、字段、约束;支持创建、更新、校验、删除表。
5 种模式对应:
  1. Builder mode → create
  2. Cleaner mode → create-drop
  3. Upgrader mode → update
  4. Inspector mode → validate
  5. Hands-off mode → none

二、application.properties 最简配置(直接复制)

properties
 
 
# 数据库连接(配合你的docker mysql)
spring.datasource.url=jdbc:mysql://localhost:3306/jobportal?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8mb4&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# =================ddl-auto 核心配置=================
# 开发推荐用 update
spring.jpa.hibernate.ddl-auto=update

# 打印SQL(方便观察建表语句)
spring.jpa.show-sql=true
# 格式化SQL
spring.jpa.properties.hibernate.format_sql=true
# MySQL8方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

 

 

三、5 个可选值完整说明(面试重点)

properties
 
 
# 1. create 【Builder模式】
# 启动:先删除所有表 → 重新创建表
# 关闭:不删除表
spring.jpa.hibernate.ddl-auto=create

# 2. create-drop 【Cleaner模式】
# 启动:删表重建;项目正常关闭时自动删除全部表
# 仅用于单元测试!不要业务开发使用
spring.jpa.hibernate.ddl-auto=create-drop

# 3. update 【Upgrader模式|日常开发首选】
# 不会删除已有数据;只新增表、新增字段;不会删除旧字段
# ⚠️ 缺陷:不会自动删除实体里移除的字段
spring.jpa.hibernate.ddl-auto=update

# 4. validate 【Inspector模式】
# 不创建/修改表;只校验:实体类 和 数据库表结构是否匹配
# 结构不一致直接启动报错!适合准生产环境
spring.jpa.hibernate.ddl-auto=validate

# 5. none 【Hands-off模式|生产环境强制推荐】
# 完全关闭自动表管理,Hibernate不执行任何DDL语句
# 生产环境使用,表结构通过SQL脚本/迁移工具Flyway/Liquibase管理
spring.jpa.hibernate.ddl-auto=none
 

四、最简实体测试代码(验证自动建表)

java
 
运行
 
 
import jakarta.persistence.*;

@Entity
@Table(name = "contact_messages")
public class Contact {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;
    private String message;

    // 无参构造(JPA必须要有)
    public Contact(){}

    // getter setter
    public Long getId() {return id;}
    public void setId(Long id) {this.id = id;}
    public String getName() {return name;}
    public void setName(String name) {this.name = name;}
    public String getEmail() {return email;}
    public void setEmail(String email) {this.email = email;}
    public String getMessage() {return message;}
    public void setMessage(String message) {this.message = message;}
}
 

 

五、配套 Repository

java
 
运行
 
 
import org.springframework.data.jpa.repository.JpaRepository;

public interface ContactRepository extends JpaRepository<Contact, Long> {
}

 

 

六、学习使用建议

✅ 本地开发:update
 
✅ 测试环境:validate
 
✅ 线上生产:none
 
❌ 生产禁止使用 create /create-drop,会清空业务数据!
 
 
 
 
******************************************************************************************************************************************************************************************************************************************************************************************************
******************************************************************************************************************************************************************************************************************************************************************************************************
******************************************************************************************************************************************************************************************************************************************************************************************************
posted @ 2026-07-31 13:54  漫漫长路</>  阅读(8)  评论(0)    收藏  举报