MyBatis Plus是MyBatis的扩展框架,而代码生成器是MP的核心功能之一,另外还有 “条件构造器”和“通用CRUD”等功能。

mpper的代码生成器有两种方式自动生成代码,一种是通过main方法来执行程序,另一种是通过maven插件build产生。第二种方法需要在pom.xml中添加大量的配置信息,因此本人偏向于使用第一种方式。步骤如下:

一、添加mybatis plus依赖:
如果还没有创建项目,当然需要先创建一个工程项目,然后将jar包依赖添加到项目的classpath下,如果是含有pom.xml的maven项目,比如我最近在使用的springboot项目,那么可以直接添加pom依赖:

<dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>3.1.1</version>
         </dependency>
         <!--添加 代码生成器 依赖-->
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-generator</artifactId>
             <version>3.1.1</version>
         </dependency>


        

二、创建生成器主类

官方给出的实例连接:代码生成器, 此处贴出我整理过后的代码:

import java.util.ArrayList;
 import java.util.List;
 import java.util.Scanner;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.generator.AutoGenerator;
 import com.baomidou.mybatisplus.generator.InjectionConfig;
 import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
 import com.baomidou.mybatisplus.generator.config.FileOutConfig;
 import com.baomidou.mybatisplus.generator.config.GlobalConfig;
 import com.baomidou.mybatisplus.generator.config.PackageConfig;
 import com.baomidou.mybatisplus.generator.config.StrategyConfig;
 import com.baomidou.mybatisplus.generator.config.TemplateConfig;
 import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
 import com.baomidou.mybatisplus.generator.config.po.TableInfo;
 import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
 import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;public class CodeGenerator {
    /**
      * 读取控制台内容
      */
     public static String scanner(String tip) {
         Scanner scanner = new Scanner(System.in);
         StringBuilder help = new StringBuilder();
         help.append("请输入" + tip + ":");
         System.out.println(help.toString());
         if (scanner.hasNext()) {
             String ipt = scanner.next();
             if (StringUtils.isNotEmpty(ipt)) {
                 return ipt;
             }
         }
         throw new MybatisPlusException("请输入正确的" + tip + "!");
     }    public static void main(String[] args) {
         /**
          * 代码生成器
          */
         AutoGenerator mpg = new AutoGenerator();        /**
          * 全局配置
          */
         GlobalConfig globalConfig = new GlobalConfig();
         //生成文件的输出目录
         String projectPath = System.getProperty("user.dir");
         globalConfig.setOutputDir(projectPath + "/src/main/java");
         //Author设置作者
         globalConfig.setAuthor("baochi");
         //是否覆盖文件
         globalConfig.setFileOverride(true);
         //生成后打开文件
         globalConfig.setOpen(false);
         mpg.setGlobalConfig(globalConfig);        /**
          * 数据源配置
           */
         DataSourceConfig dataSourceConfig = new DataSourceConfig();
         // 数据库类型,默认MYSQL
         dataSourceConfig.setDbType(DbType.ORACLE);
         //自定义数据类型转换
 //        dataSourceConfig.setTypeConvert(new MySqlTypeConvert());
 //        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mp?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSL=false");
 //        dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
 //        dataSourceConfig.setUsername("root");
 //        dataSourceConfig.setPassword("1234");
         
         dataSourceConfig.setTypeConvert(new MySqlTypeConvert());
         dataSourceConfig.setUrl("jdbc:oracle:thin:@IP:1521:mes");
         dataSourceConfig.setDriverName("oracle.jdbc.driver.OracleDriver");
         dataSourceConfig.setUsername("用户名");
         dataSourceConfig.setPassword("密码");
         mpg.setDataSource(dataSourceConfig);        /**
          * 包配置
          */
         PackageConfig pc = new PackageConfig();
         pc.setModuleName(scanner("模块名"));
         //父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
         pc.setParent("cn.evun.gmes4x");
         mpg.setPackageInfo(pc);         /**
          * 自定义配置
          */
         InjectionConfig cfg = new InjectionConfig() {
             @Override
             public void initMap() {
                 // to do nothing
             }
         };        /**
          * 模板
          */
         //如果模板引擎是 freemarker
         String templatePath = "/templates/mapper.xml.ftl";
         // 如果模板引擎是 velocity
         // String templatePath = "/templates/mapper.xml.vm";         /**
          * 自定义输出配置
          */
         List<FileOutConfig> focList = new ArrayList<>();
         // 自定义配置会被优先输出
         focList.add(new FileOutConfig(templatePath) {
             @Override
             public String outputFile(TableInfo tableInfo) {
                 // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                 return projectPath + "/src/main/resources/mapper/"+ pc.getModuleName()
                         + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
             }
         });
         cfg.setFileOutConfigList(focList);
         mpg.setCfg(cfg);        /**
          * 配置模板
          */
         TemplateConfig templateConfig = new TemplateConfig();        // 配置自定义输出模板
         //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别
         // templateConfig.setEntity("templates/entity2.java");
         // templateConfig.setService();
         // templateConfig.setController();        templateConfig.setXml(null);
         mpg.setTemplate(templateConfig);        /**
          * 策略配置
          */
         StrategyConfig strategy = new StrategyConfig();
         //设置命名格式
         strategy.setNaming(NamingStrategy.underline_to_camel);
         strategy.setColumnNaming(NamingStrategy.underline_to_camel);
         strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
         //实体是否为lombok模型(默认 false)
         strategy.setEntityLombokModel(true);
         //生成 @RestController 控制器
         strategy.setRestControllerStyle(true);
         //设置自定义继承的Entity类全称,带包名
         //strategy.setSuperEntityClass("com.jiangfeixiang.mpdemo.BaseEntity");
         //设置自定义继承的Controller类全称,带包名
         //strategy.setSuperControllerClass("com.jiangfeixiang.mpdemo.BaseController");
         //设置自定义基础的Entity类,公共字段
         strategy.setSuperEntityColumns("id");
         //驼峰转连字符
         strategy.setControllerMappingHyphenStyle(true);
         //表名前缀
         strategy.setTablePrefix(pc.getModuleName() + "_");
         mpg.setStrategy(strategy);
         mpg.setTemplateEngine(new FreemarkerTemplateEngine());
         mpg.execute();
     }
 }
   文件基本可以拿过来直接用,但需要注意这两句代码:
  globalConfig.setOutputDir(projectPath + "/src/main/java"); //父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
  pc.setParent("cn.evun.gmes4x");

下图是我项目的路径(执行代码生成器之后的项目结构):

beetsql 代码生成器 freemarker 代码生成器mybatis plus_Mybatis Plus

执行main方法前请注意,在生成文件的时候需要有一个模板引擎的选择,MyBatis Plus的默认模板引擎是velocity。我们可以使用freemarker。

<dependency>
             <groupId>org.freemarker</groupId>
             <artifactId>freemarker</artifactId>
        </dependency>

注意,代码生成前请确保数据库中表已经存在。