
⚠️ 重要提示: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 | @TableField | MP 原生字段注解 |
@ColumnId | @TableId | MP 原生主键注解 |
@Table | @TableName | MP 原生表注解 |
@UniqueIndex | @TableField(exist=false) | 手动管理索引 |
💡 重要说明:
- 使用 MPE/MFE 的用户:这些注解仍然可用,无需迁移!
- 直接使用 AutoTable Starter 的用户:建议使用 MP/MF 原生注解,以获得更好的兼容性和一致性。
📝 为什么建议迁移?
MPE/MFE 的注解本质上是 MP/MF 原生注解的封装或别名。直接使用原生注解的好处:
- ✅ 代码更清晰,不依赖于特定的扩展库
- ✅ 更容易在不同 ORM 框架之间迁移
- ✅ 符合 AutoTable 的零侵入设计理念
✅ 保留的标准注解
以下注解仍可使用(但建议使用 MP 原生):
@AutoColumn- 仍可用于多数据库场景@Ignore- 忽略字段- 所有 MySQL 专用注解(如
@MysqlColumnUnsigned)
💡 核心价值:零侵入式集成
AutoTable 适配器让您无需引入任何 AutoTable 注解即可享受自动建表能力:
🚀 极简演示
第一步:引入依赖
<!-- 只加这一个 Starter 就够了 -->
<dependency>
<groupId>org.dromara.autotable</groupId>
<artifactId>auto-table-adapter-mybatis-plus-spring-boot-starter</artifactId>
<version>2.6.5</version>
</dependency>第二步:定义实体(完全用 MP 原生注解)
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;
}第三步:启动应用
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:自动扫描实体类上的@TableNameMybatisPlusMetadataAdapter:解析@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 即可:
<!-- 只加这一个 Starter -->
<dependency>
<groupId>org.dromara.mybatis-plus-ext</groupId>
<artifactId>mybatis-plus-ext-spring-boot-starter</artifactId>
<version>X.X.X</version>
</dependency>MPE 会自动提供以下能力:
- ✅ AutoTable 自动建表 - 自动识别 MP 原生注解创建表结构
- ✅ 代码生成器 - 基于实体类生成 Mapper、Service、Controller
- ✅ 数据填充器 - 自动填充创建时间、更新人等字段
- ✅ 关联查询助手 - 简化多表关联查询
- ✅ 其他扩展功能 - 见 MPE 官方文档
💡 工作原理:MPE 内部会读取您代码中的
@TableName、@TableField等 MP 原生注解,通过 AutoTable 接口自动完成建表,对外完全透明。
只用 AutoTable(不依赖 MPE)
如果您只需要 AutoTable 的自动建表能力,而不需要使用 MPE 的其他扩展功能,推荐直接使用独立的 AutoTable 适配器:
<!-- 仅引入 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 功能相互影响
配置项
自动建库模式
auto-table:
create-database-enabled: true # 默认 false,自动创建数据库
database-url: jdbc:mysql://localhost:3306 # 连库 URL运行模式
| 模式 | 说明 | 推荐环境 |
|---|---|---|
validate(默认) | 只校验不修改 | 生产环境 |
update | 自动更新差异 | 开发环境 |
create | 创建缺失表 | 测试环境 |
auto-table:
mode: updateSQL 记录
记录每次执行的 SQL,方便审计和排查问题:
auto-table:
record-sql-enabled: true
record-sql-type: DB # 文件 (FILE) 或 数据库 (DB)高级特性
动态数据源支持
如果使用了 dynamic-datasource,AutoTable 会自动识别:
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_.sqlSchema 支持
对于 PostgreSQL、Oracle 等多 Schema 数据库:
@TableName(schema = "public", value = "user")
public class User {
// ...
}AutoTable 会自动创建对应的 Schema 和表。
逻辑删除字段
AutoTable 会自动识别 MP 的逻辑删除配置:
@TableField("deleted")
private Integer deleted;配合全局配置:
mp:
global-config:
db-config:
logic-delete-field: deleted
logic-not-delete-value: 0
logic-delete-value: 1常见问题
表未创建?
- 检查是否引入了 starter 依赖
- 确认实体上有
@TableName注解 - 查看日志是否有错误信息
字段未更新?
- 确认运行模式为
update - 检查字段是否被
@TableField(exist = false)标记 - 确认不是
static或final字段
Invalid value type 错误?
通常是类型映射问题:
- 检查 Java 类型是否能转换为数据库类型
- 复杂类型可以自定义 TypeHandler
相关资源
社区支持
如有问题或建议,欢迎:
- 提交 Issue:Gitee Issues
- 参与讨论:贡献指南
感谢每一位贡献者!🌟
