# Mybatis-Flex 代码生成器
在 mybatis-flex 的模块 `mybatis-flex-codegen` 中,提供了可以通过数据库表,生成 Entity 类和 Mapper 类的功能。当我们把数据库表设计完成
后可以使用其快速生成 Entity 和 Mapper 的 java 类。
在使用前先添加 `mybatis-flex-codegen` 的 Maven 依赖:
```xml
com.mybatis-flex
mybatis-flex-codegen
1.0.3
```
同时需要添加数据源的 Maven 依赖和 jdbc 驱动依赖:
```xml
com.zaxxer
HikariCP
4.0.3
mysql
mysql-connector-java
8.0.32
```
然后,编写一个任意带有 main 方法的类,如下所示:
```java
public class Codegen {
public static void main(String[] args) {
//配置数据源
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/your-database?characterEncoding=utf-8");
dataSource.setUsername("root");
dataSource.setPassword("******");
//创建配置内容
GlobalConfig globalConfig = new GlobalConfig();
//设置只生成哪些表
globalConfig.addGenerateTable("account", "account_session");
//设置 entity 的包名
globalConfig.setEntityPackage("com.test.test");
//是否生成 mapper 类,默认为 false
globalConfig.setMapperGenerateEnable(true);
//设置 mapper 类的包名
globalConfig.setMapperPackage("com.test.mapper");
//可以单独配置某个列
ColumnConfig columnConfig = new ColumnConfig();
columnConfig.setColumnName("tenant_id");
columnConfig.setLarge(true);
columnConfig.setVersion(true);
globalConfig.addColumnConfig("account", columnConfig);
//通过 datasource 和 globalConfig 创建代码生成器
Generator generator = new Generator(dataSource, globalConfig);
//生成代码
generator.generate();
}
}
```
GlobalConfig 支持更多的配置如下:
```java
public class GlobalConfig {
//代码生成目录
private String sourceDir;
//entity 的包名
private String entityPackage;
//entity 是否使用 Lombok
private Boolean entityWithLombok = false;
//是否生成 mapper 类
private boolean mapperGenerateEnable = false;
//mapper 的包名
private String mapperPackage;
//数据库表前缀
private String tablePrefix;
//逻辑删除的默认字段名称
private String logicDeleteColumn;
//乐观锁的字段名称
private String versionColumn;
//是否生成视图映射
private boolean generateForView = false;
//单独为某张表添加独立的配置
private Map tableConfigMap;
//设置某个列的全局配置
private Map defaultColumnConfigMap;
//生成那些表,白名单
private Set generateTables;
//不生成那些表,黑名单
private Set unGenerateTables;
//使用哪个模板引擎来生成代码
protected ITemplate templateEngine;
}
```