AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

简单来说将你重复的工作封装起来,用的直接直接调用即可生成。

1.添加依赖

MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:

  • 添加 代码生成器 依赖
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.3.2</version>
</dependency>
  • 添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。
    Velocity(默认):
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.2</version>
</dependency>

Freemarker:

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.30</version>
</dependency>
2.开始
2.1全局配置
//1.全局配置
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setActiveRecord(true)//是否支持AR模式
    .setAuthor("yangjun")//作者
    .setOutputDir(System.getProperty("user.dir") + "/src/main/java")//生成路径
    .setFileOverride(true)//文件覆盖
    .setIdType(IdType.ASSIGN_ID)//主键策略
    .setServiceName("%sService")//设置生成的servic接口的名字首字母是否为I 例如:IUserService
    .setBaseResultMap(true)//生成mapper文件的SQL映射
    .setEnableCache(false)// XML 二级缓存
    .setBaseColumnList(true)//生成列集合
    .setSwagger2(true);//需要引入swagger依赖
2.2数据源配置
//2.数据源配置
DataSourceConfig dataSourceConfig = new DataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL)//数据库选择
    .setDriverName("com.mysql.cj.jdbc.Driver")
    .setUrl("jdbc:mysql://localhost:3306/cmsserverTimezone=GMT%2B8&&useSSL=false")
    .setUsername("账户")
    .setPassword("密码");
2.3策略配置
//3.策略配置
StrategyConfig strategyConfig = new StrategyConfig();
//自动填充策略
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(createTime);
tableFills.add(updateTime);

strategyConfig.setCapitalMode(true)//全局大写命名
                .setNaming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setEntityLombokModel(true)//引入lombok依赖省去getset方法
                .setTableFillList(tableFills)//自动填充策略
                .setVersionFieldName("version")//自动生成逻辑删除,数据库中必须有deleted字段
                .setInclude("table/需要生成的表
2.4包名策略配置
//4、包名策略配置
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent("com.cms")//父目录
            .setMapper("mapper")//mapper文件夹
            .setService("service")//service目录
            .setController("controller")//controlle目录
            .setEntity("entity")//实体类目录
            .setXml("mapper/log");//mapper.xml目录
//上面的都可以根据实际情况改动
2.4加载配置
//5、整合配置
AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(globalConfig)
        .setDataSource(dataSourceConfig)
        .setStrategy(strategyConfig)
        .setPackageInfo(packageConfig);
        //执行
        autoGenerator.execute();
完整代码:
/**
 * @Author: yangjun
 * @Date: 2020/6/8 20:16
 * @Version 1.0
 */
public class MPGenerator {

    /**
     * @param table 表名
     */
    public static void AutoGenerator(String table){
        //1.全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setActiveRecord(true)//是否支持AR模式
                .setAuthor("yangjun")//作者
                .setOutputDir(System.getProperty("user.dir") + "/src/main/java")//生成路径
                .setFileOverride(true)//文件覆盖
                .setIdType(IdType.ASSIGN_ID)//主键策略
                .setServiceName("%sService")//设置生成的servic接口的名字首字母是否为I 例如:IUserService
                .setBaseResultMap(true)//生成mapper文件的SQL映射
                .setEnableCache(false)// XML 二级缓存
                .setBaseColumnList(true)//生成列集合
                .setSwagger2(true);
        //2.数据源配置
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL)
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUrl("jdbc:mysql://localhost:3306/cms?serverTimezone=GMT%2B8&&useSSL=false")
                .setUsername("root")
                .setPassword("root");
        //3.策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        //自动填充策略
        TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
        TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(createTime);
        tableFills.add(updateTime);
        strategyConfig.setCapitalMode(true)//全局大写命名
//                      .isCapitalModeNaming(  NamingStrategy.underline_to_camel())
                //指定表明 字段名是否为下划线
                .setNaming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setEntityLombokModel(true)
                .setTableFillList(tableFills)//自动填充策略
                .setVersionFieldName("version")
                .setInclude("log");//s生成的表
        //4、包名策略配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.cms")
                .setMapper("mapper")
                .setService("service")
                .setController("controller")
                .setEntity("entity")
                .setXml("mapper/log");
        //5、整合配置
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(globalConfig)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);
        //执行
        autoGenerator.execute();
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("請輸入要生成的表名");
        AutoGenerator(scanner.next());
    }
}