Spring Boot新手未手动写SQL实现CRUD,如何获取对应数据库结构SQL脚本
问题解决思路
你之前能零SQL完成CRUD接口,本质是用到了Spring Data JPA(或同类ORM框架)的自动表结构生成特性,按以下步骤就能导出所需脚本、完成配置:
1. 导出数据库建表SQL脚本
方案A:从运行的数据库直接导出(最快)
如果你的应用已经成功运行过,本地/测试环境已经生成了实际的表结构,直接用数据库客户端工具导出即可:
- MySQL:执行
mysqldump -u 用户名 -p -d 数据库名 > schema.sql,-d参数表示只导出表结构不导出数据 - PostgreSQL:执行
pg_dump -U 用户名 -s 数据库名 > schema.sql - 用可视化工具(Navicat、DBeaver等)直接选中数据库,右键选择「导出SQL」-「仅结构」即可
方案B:通过JPA配置自动生成SQL脚本(无需运行过数据库)
直接修改Spring Boot配置文件application.yml或application.properties,开启Hibernate的SQL导出功能:
application.yml配置示例
spring: jpa: hibernate: ddl-auto: create # 仅生成脚本时临时配置,生产环境要改成none或者validate properties: hibernate: hbm2ddl: delimiter: ; # 每条SQL末尾加;分隔符 show_sql: true format_sql: true # 格式化SQL方便阅读 javax: persistence: schema-generation: scripts: action: create # 生成建表脚本 create-target: ./schema.sql # 脚本生成路径,就在项目根目录 create-source: metadata # 从实体类元数据生成
启动一次应用,就能在配置的路径下拿到完整的建表SQL脚本,生成完成后记得把临时配置改回正常参数。
2. 数据库连接配置参考
你需要提供的连接配置相关内容,一般是项目配置文件的数据库配置模板,可参考以下示例,敏感信息用占位符标注即可:
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver # MySQL8+用这个,低版本用com.mysql.jdbc.Driver url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME:你的库名}?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false username: ${DB_USER:root} password: ${DB_PWD:你的密码} jpa: hibernate: ddl-auto: none # 生产环境必须关闭自动建表,避免数据丢失 show-sql: false # 生产环境关闭SQL打印 properties: hibernate: dialect: org.hibernate.dialect.MySQL8Dialect # 对应你的数据库版本
3. 额外注意事项
- 导出的脚本要先在空库执行一遍验证,避免存在依赖缺失(比如索引、外键顺序不对的问题)
- 如果用到了枚举类、自定义字段类型,要检查生成的SQL字段类型是否符合业务要求,不合适的可以手动调整脚本
- 如果项目要求使用Flyway或Liquibase做数据库版本管理,把生成的
schema.sql放到对应版本的脚本目录即可
内容的提问来源于stack exchange,提问作者Artisz
相关产品推荐
相关产品推荐

