基于mybatisplus3.5.2写一个代码生成器,在转换实体时滤掉表前缀
时间: 2025-07-29 12:24:43 浏览: 2
<think>根据用户需求,需要在MyBatis-Plus 3.5.2的代码生成器中实现生成实体类时过滤表前缀的功能。
在MyBatis-Plus中,代码生成器通过`AutoGenerator`类进行配置,其中`StrategyConfig`用于设置策略,包括表名、字段名、实体名称等。
过滤表前缀可以通过`StrategyConfig`的`setTablePrefix`方法实现,该方法接受一个字符串数组,每个元素是一个要忽略的前缀。
当设置表前缀后,生成实体类时,实体名将自动去除这些前缀(注意:去除前缀后,会根据下划线转驼峰规则生成类名)。
步骤:
1. 创建`AutoGenerator`对象。
2. 配置数据源(`DataSourceConfig`)。
3. 配置全局配置(`GlobalConfig`),如输出目录、作者等。
4. 配置包信息(`PackageConfig`),如父包名、模块名等。
5. 配置策略(`StrategyConfig`),这里设置表前缀过滤。
6. 配置模板(`TemplateConfig`),可选,如果需要自定义模板。
7. 执行生成。
注意:在`StrategyConfig`中,除了设置表前缀,还可以设置需要生成的表名、字段命名策略等。
示例代码:
假设我们有一个数据库表,表名为`t_user`,我们希望在生成实体类时去掉前缀`t_`,那么实体类名应为`User`。
下面是一个具体的配置示例:</think>在 MyBatis-Plus 3.5.2 中,可以通过配置 `StrategyConfig` 的 `setTablePrefix()` 方法实现生成实体类时过滤数据库表名前缀。以下是完整实现方案:
### 1. 添加 Maven 依赖
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version> <!-- 使用 Freemarker 模板 -->
</dependency>
```
### 2. 核心配置代码
```java
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
public class CodeGenerator {
public static void main(String[] args) {
// 1. 数据源配置
DataSourceConfig dsc = new DataSourceConfig.Builder(
"jdbc:mysql://localhost:3306/your_db?useSSL=false",
"root",
"password"
).build();
// 2. 全局配置
GlobalConfig gc = new GlobalConfig.Builder()
.outputDir(System.getProperty("user.dir") + "/src/main/java")
.author("YourName")
.openDir(false) // 生成后不打开目录
.fileOverride() // 覆盖已生成文件
.build();
// 3. 包配置
PackageConfig pc = new PackageConfig.Builder()
.parent("com.example")
.moduleName("system")
.entity("entity")
.mapper("mapper")
.build();
// 4. 策略配置(关键:过滤表前缀)
StrategyConfig strategy = new StrategyConfig.Builder()
.addInclude("t_user", "t_order") // 需要生成的表名
.addTablePrefix("t_", "sys_") // 过滤表名前缀(多个前缀用逗号分隔)
.entityBuilder()
.naming(NamingStrategy.underline_to_camel) // 下划线转驼峰
.columnNaming(NamingStrategy.underline_to_camel)
.enableLombok() // 启用 Lombok
.build();
// 5. 模板配置(可选)
TemplateConfig tc = new TemplateConfig.Builder()
.disable(TemplateType.CONTROLLER) // 不生成 Controller
.build();
// 6. 执行生成
AutoGenerator generator = new AutoGenerator(dsc)
.global(gc)
.packageInfo(pc)
.strategy(strategy)
.template(tc);
generator.execute();
}
}
```
### 关键配置说明
1. **`addTablePrefix("t_", "sys_")`**
- 声明需要过滤的前缀列表
- 例如表名 `t_user` 生成的实体类名为 `User`
- 支持多个前缀,按顺序匹配过滤
2. **命名策略**
- `underline_to_camel`:自动将下划线格式转为驼峰命名(如 `user_name` → `userName`)
3. **Lombok 支持**
- `enableLombok()` 生成的实体类自动添加 `@Data` 注解
### 效果示例
| 数据库表名 | 生成的实体类名 |
|------------|----------------|
| `t_user` | `User.java` |
| `sys_log` | `Log.java` |
| `order_info` | `OrderInfo.java` | // 无前缀则保留原名
> **注意**:过滤前缀后,剩余部分会根据下划线自动转为驼峰命名。例如 `sys_order_detail` → `OrderDetail.java`
### 自定义实体名规则
如果需要更复杂的命名规则,可通过重写 `INameConvert` 接口实现:
```java
strategy.entityBuilder()
.convertFileName((tableName) -> {
String name = tableName.replaceFirst("^(t_|sys_)", "");
return NamingStrategy.capitalFirst(NamingStrategy.underlineToCamel(name));
})
```
### 生成结果目录结构
```
src/main/java
└── com
└── example
└── system
├── entity // 实体类目录
│ ├── User.java
│ └── Order.java
└── mapper // Mapper 接口目录
├── UserMapper.java
└── OrderMapper.java
```
此方案通过 MyBatis-Plus 原生支持的 `TablePrefix` 配置实现,无需修改模板文件即可完成前缀过滤[^1]。
阅读全文
相关推荐


















