Flutter Floor中如何触发新实体的数据库迁移?
部署时自动创建新实体对应数据表的方案
通用核心思路
不管使用哪种持久化框架,核心都是让框架在应用启动时检测到新增的实体类,并根据实体定义自动生成对应数据库表。关键在于配置框架的自动建表策略,确保它不仅能处理已有表的列修改,还能识别新增实体并创建表。
针对常见框架的具体操作
1. JPA/Hibernate 场景
- 检查配置文件(
application.properties/application.yml)中的Hibernate参数:- 确保
spring.jpa.hibernate.ddl-auto(Spring Boot环境)或hibernate.hbm2ddl.auto(原生Hibernate)设置为update。这个策略的作用是:- 自动创建不存在的表(包括新的
Resource实体对应的表) - 保留已有表的数据和结构,仅调整不符合实体定义的列
- 不会删除已有表或数据
- 自动创建不存在的表(包括新的
- 示例Spring Boot配置:
spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true # 可选,用于查看框架生成的建表SQL
- 确保
- 确认新的
Resource实体类已添加@Entity注解,且被Spring容器扫描到(比如实体类放在启动类的同级/子包下,或通过@EntityScan指定扫描路径)。
2. MyBatis Plus 场景
- 开启自动建表功能:
- 在配置文件中添加以下参数:
mybatis-plus.global-config.db-config.id-type=auto # 可选,根据需求设置主键生成策略 mybatis-plus.configuration.map-underscore-to-camel-case=true # 可选,开启驼峰字段与数据库下划线字段的映射 - 给
Resource实体类添加必要注解:@TableName(可选,指定表名)、@TableId(标记主键字段)等,并确保实体类被MyBatis Plus扫描到(通过@MapperScan指定DAO接口路径即可,实体类默认会被关联扫描)。 - 若使用旧版本MyBatis Plus,需确保引入
mybatis-plus-boot-starter依赖,并配置db-type指定数据库类型。
- 在配置文件中添加以下参数:
3. 原生JDBC/自定义DAO场景
- 编写初始化SQL脚本,让应用启动时自动执行:
- 在
resources目录下创建schema.sql,写入创建Resource表的SQL:CREATE TABLE IF NOT EXISTS resource ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, url VARCHAR(512) NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP -- 其他字段根据实体定义补充 ); - 在Spring Boot中配置
spring.sql.init.mode=always(或embedded仅针对嵌入式数据库),让应用启动时自动执行该脚本。
- 在
注意事项
- 生产环境禁止使用
create或create-drop策略,避免误删已有数据,update或validate是更安全的选择。 - 多环境配置时,要确保生产环境的建表策略不会意外修改已有数据。
- 部署前先在测试环境验证,确认新表能正常创建且原有数据不受影响。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

