Skip to content

⚠️ 重要提示:2.6.2 版本重大变更

🔴 立即查看升级指南!

AutoTable 2.6.2 版本对 MyBatis-Plus 适配器进行了重大重构:回归零侵入设计理念

🎯 您需要做什么?

  • 如果您从未使用过扩展注解:无需任何操作,继续使用 MP 原生注解即可正常工作。
  • 如果您使用了扩展注解(如 @Column@Table
    • 如果您使用的是 MPE/MFE:这些注解仍然保留在 MPE 中,继续使用即可!
    • 如果您直接使用 AutoTable Starter:必须迁移到 MP 原生注解,否则将无法工作。

📖 迁移资源

❌ 从 MPE/MFE 迁移到 MP/MF 原生注解

如果您直接使用 auto-table-adapter-* Starter(不依赖 MPE),建议从 MPE 风格的注解迁移到 MP/MF 原生注解:

MPE 风格注解✅ MP 原生注解说明
@Column@TableFieldMP 原生字段注解
@ColumnId@TableIdMP 原生主键注解
@Table@TableNameMP 原生表注解
@UniqueIndex@TableField(exist=false)手动管理索引

💡 重要说明

  • 使用 MPE/MFE 的用户:这些注解仍然可用,无需迁移!
  • 直接使用 AutoTable Starter 的用户:建议使用 MP/MF 原生注解,以获得更好的兼容性和一致性。

📝 为什么建议迁移?

MPE/MFE 的注解本质上是 MP/MF 原生注解的封装或别名。直接使用原生注解的好处:

  • ✅ 代码更清晰,不依赖于特定的扩展库
  • ✅ 更容易在不同 ORM 框架之间迁移
  • ✅ 符合 AutoTable 的零侵入设计理念

✅ 保留的标准注解

以下注解仍可使用(但建议使用 MP 原生):

  • @AutoColumn - 仍可用于多数据库场景
  • @Ignore - 忽略字段
  • 所有 MySQL 专用注解(如 @MysqlColumnUnsigned

💡 核心价值:零侵入式集成

AutoTable 适配器让您无需引入任何 AutoTable 注解即可享受自动建表能力:

🚀 极简演示

第一步:引入依赖

xml
<!-- 只加这一个 Starter 就够了 -->
<dependency>
    <groupId>org.dromara.autotable</groupId>
    <artifactId>auto-table-adapter-mybatis-plus-spring-boot-starter</artifactId>
    <version>2.6.5</version>
</dependency>

第二步:定义实体(完全用 MP 原生注解)

java
import com.baomidou.mybatisplus.annotation.*;

@Data
@TableName("sys_user")  // ← 只用 MP 的 @TableName
public class User {
    
    @TableId(value = "id", type = IdType.AUTO)  // ← 只用 MP 的 @TableId
    private Long id;
    
    @TableField("username")
    private String username;
    
    @TableField("email")
    private String email;
}

第三步:启动应用

java
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.example.mapper")
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

完成! 启动后 AutoTable 会自动:

  • 识别所有 @TableName 标注的实体
  • 根据 @TableId@TableField 解析字段
  • 自动创建数据库表结构
  • 后续修改实体,表结构自动同步

就这么简单!不需要写一行 AutoTable 的代码!

详细说明

工作原理

AutoTable 通过适配器机制自动识别和转换 MP 注解:

核心组件:

  • MybatisPlusAutoTableClassScanner:自动扫描实体类上的 @TableName
  • MybatisPlusMetadataAdapter:解析 @TableId@TableField 等注解
  • MybatisPlusJavaTypeToDatabaseTypeConverter:处理类型映射(枚举、Date 等)
  • MybatisPlusRunBeforeCallback:在 DDL 执行前屏蔽 MP 拦截器插件

支持的 MP 注解

AutoTable 会智能识别所有标准 MP 注解:

MP 注解作用AutoTable 支持
@TableName定义表名✅ 自动识别
@TableId定义主键✅ 支持所有 IdType
@TableField定义字段✅ 支持 exist、value、typeHandler
@EnumValue枚举值标记✅ 自动提取
@TableName.excludeProperty排除字段✅ 自动识别

使用 MyBatis-Plus-Ext

AutoTable v2.6.2+ 已深度集成到 MPE 中

如果您已经在使用 MyBatis-Plus-Ext(MPE),只需引入 MPE 即可

xml
<!-- 只加这一个 Starter -->
<dependency>
    <groupId>org.dromara.mybatis-plus-ext</groupId>
    <artifactId>mybatis-plus-ext-spring-boot-starter</artifactId>
    <version>X.X.X</version>
</dependency>

MPE 会自动提供以下能力:

  1. AutoTable 自动建表 - 自动识别 MP 原生注解创建表结构
  2. 代码生成器 - 基于实体类生成 Mapper、Service、Controller
  3. 数据填充器 - 自动填充创建时间、更新人等字段
  4. 关联查询助手 - 简化多表关联查询
  5. 其他扩展功能 - 见 MPE 官方文档

💡 工作原理:MPE 内部会读取您代码中的 @TableName@TableField 等 MP 原生注解,通过 AutoTable 接口自动完成建表,对外完全透明。


只用 AutoTable(不依赖 MPE)

如果您只需要 AutoTable 的自动建表能力,而不需要使用 MPE 的其他扩展功能,推荐直接使用独立的 AutoTable 适配器:

xml
<!-- 仅引入 AutoTable MP 适配器 -->
<dependency>
    <groupId>org.dromara.autotable</groupId>
    <artifactId>auto-table-adapter-mybatis-plus-spring-boot-starter</artifactId>
    <version>2.6.5</version>
</dependency>

优势:

  • 🚀 依赖更轻 - 不引入 MPE 额外的依赖包
  • 🎯 职责单一 - 专注于自动建表能力
  • 🔧 配置独立 - 不与 MPE 功能相互影响

配置项

自动建库模式

yaml
auto-table:
  create-database-enabled: true  # 默认 false,自动创建数据库
  database-url: jdbc:mysql://localhost:3306  # 连库 URL

运行模式

模式说明推荐环境
validate(默认)只校验不修改生产环境
update自动更新差异开发环境
create创建缺失表测试环境
yaml
auto-table:
  mode: update

SQL 记录

记录每次执行的 SQL,方便审计和排查问题:

yaml
auto-table:
  record-sql-enabled: true
  record-sql-type: DB  # 文件 (FILE) 或 数据库 (DB)

高级特性

动态数据源支持

如果使用了 dynamic-datasource,AutoTable 会自动识别:

yaml
spring:
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/db_master
        slave:
          url: jdbc:mysql://localhost:3306/db_slave

每个数据源的初始化脚本可以放在:

classpath:sql/master/_init_.sql
classpath:sql/slave/_init_.sql

Schema 支持

对于 PostgreSQL、Oracle 等多 Schema 数据库:

java
@TableName(schema = "public", value = "user")
public class User {
    // ...
}

AutoTable 会自动创建对应的 Schema 和表。

逻辑删除字段

AutoTable 会自动识别 MP 的逻辑删除配置:

java
@TableField("deleted")
private Integer deleted;

配合全局配置:

yaml
mp:
  global-config:
    db-config:
      logic-delete-field: deleted
      logic-not-delete-value: 0
      logic-delete-value: 1

常见问题

表未创建?

  1. 检查是否引入了 starter 依赖
  2. 确认实体上有 @TableName 注解
  3. 查看日志是否有错误信息

字段未更新?

  1. 确认运行模式为 update
  2. 检查字段是否被 @TableField(exist = false) 标记
  3. 确认不是 staticfinal 字段

Invalid value type 错误?

通常是类型映射问题:

  1. 检查 Java 类型是否能转换为数据库类型
  2. 复杂类型可以自定义 TypeHandler

相关资源

社区支持

如有问题或建议,欢迎:

感谢每一位贡献者!🌟

Released under the Apache 2.0 License.