坚持学习第四天:SpringBoot 2.x 整合Mypatis-plus 3.x代码生成器梳理

  • 认真是一种态度,坚持是一种品格,优秀是一种习惯!
    掰着手指头算算,从15年毕业到现在,已经是工作的第四个年头了。都说程序猿3年是个坎,我也不知道算是个坎还是不是坎。反正工作还在继续,学习不能停止。越工作越觉得自己啥也不会<><ganga .....扯远了,说回正题。
    自打用了Mybatis-Plus觉得开发快了不止一星半点。但是每次新增一个业务时总要从bean到mapper再到service搞一遍总还是有些不爽的,还在mp有diamante生成器,简单记录一下这个代码生成器怎么玩。

1 基础框架

SpringBoot 2.0.6、JDK 1.8、mybatis-plus 3.1.1、mybatis-plus-generator 3.1.1、velocity 1.7、MySQL 5.7
因基本都称mybatis-plus为mp,后面我都简称mp

2.具体实现

  • 创建项目我就不在描述了,学习第一天记录过了坚持学习第一天
  • 因为mp 3.1.1版本把代码生成单独拎出来了,所以需要在原项目基础上加上generate相关包。
    <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>
      <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.34</version>
        </dependency>

因为代码生成的模板我这里选择用velocity,所以将velocity 包引入了。语法参考:https://jzhua.iteye.com/blog/311405
默认可以直接使用mp提供的默认模板文件。
这里先简单通过执行main方法的形式使用该代码生成器,mp的代码生成器很完善,基本上满足开发的基本需要。

基础表

create database demo_generate;

use demo_generate;

create table if not exists t_equipment (
   equipment_id int(11) not null AUTO_INCREMENT comment '设备ID',
   device_name varchar(50) comment '设备名称',
   modnum varchar(50) comment '设备编号', 
   picture varchar(255) comment '设备图片',
   create_time date comment '创建时间',
   enabled tinyint(4) default 0 comment '1启用/0禁用',
   primary key (equipment_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备信息';

先简单看一下执行效果:

"C:\Program Files\Java\jdk1.8.0_31\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\lib\idea_rt.jar=62211:C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\java\jdk1.8.0_31\jre\lib\charsets.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\deploy.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\access-bridge-64.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\cldrdata.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\dnsns.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\jaccess.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\jfxrt.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\localedata.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\nashorn.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\sunec.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\sunjce_provider.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\sunmscapi.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\sunpkcs11.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\ext\zipfs.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\javaws.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\jce.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\jfr.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\jfxswt.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\jsse.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\management-agent.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\plugin.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\resources.jar;C:\Program Files\java\jdk1.8.0_31\jre\lib\rt.jar;C:\workspaces\Java_learn\cooper_sp\target\classes;C:\software\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot-starter-web\2.1.5.RELEASE\spring-boot-starter-web-2.1.5.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot-starter\2.1.5.RELEASE\spring-boot-starter-2.1.5.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot\2.1.5.RELEASE\spring-boot-2.1.5.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot-starter-logging\2.1.5.RELEASE\spring-boot-starter-logging-2.1.5.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\software\apache-maven-3.5.0\repo\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\software\apache-maven-3.5.0\repo\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;C:\software\apache-maven-3.5.0\repo\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;C:\software\apache-maven-3.5.0\repo\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;C:\software\apache-maven-3.5.0\repo\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\software\apache-maven-3.5.0\repo\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot-starter-json\2.1.5.RELEASE\spring-boot-starter-json-2.1.5.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\com\fasterxml\jackson\core\jackson-databind\2.9.8\jackson-databind-2.9.8.jar;C:\software\apache-maven-3.5.0\repo\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;C:\software\apache-maven-3.5.0\repo\com\fasterxml\jackson\core\jackson-core\2.9.8\jackson-core-2.9.8.jar;C:\software\apache-maven-3.5.0\repo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.8\jackson-datatype-jdk8-2.9.8.jar;C:\software\apache-maven-3.5.0\repo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.8\jackson-datatype-jsr310-2.9.8.jar;C:\software\apache-maven-3.5.0\repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.8\jackson-module-parameter-names-2.9.8.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot-starter-tomcat\2.1.5.RELEASE\spring-boot-starter-tomcat-2.1.5.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\apache\tomcat\embed\tomcat-embed-core\9.0.19\tomcat-embed-core-9.0.19.jar;C:\software\apache-maven-3.5.0\repo\org\apache\tomcat\embed\tomcat-embed-el\9.0.19\tomcat-embed-el-9.0.19.jar;C:\software\apache-maven-3.5.0\repo\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.19\tomcat-embed-websocket-9.0.19.jar;C:\software\apache-maven-3.5.0\repo\org\hibernate\validator\hibernate-validator\6.0.16.Final\hibernate-validator-6.0.16.Final.jar;C:\software\apache-maven-3.5.0\repo\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;C:\software\apache-maven-3.5.0\repo\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;C:\software\apache-maven-3.5.0\repo\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-web\5.1.7.RELEASE\spring-web-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-beans\5.1.7.RELEASE\spring-beans-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-webmvc\5.1.7.RELEASE\spring-webmvc-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-aop\5.1.7.RELEASE\spring-aop-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-context\5.1.7.RELEASE\spring-context-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-expression\5.1.7.RELEASE\spring-expression-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\com\h2database\h2\1.4.199\h2-1.4.199.jar;C:\software\apache-maven-3.5.0\repo\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar;C:\software\apache-maven-3.5.0\repo\com\baomidou\mybatis-plus-generator\3.1.1\mybatis-plus-generator-3.1.1.jar;C:\software\apache-maven-3.5.0\repo\com\baomidou\mybatis-plus-extension\3.1.1\mybatis-plus-extension-3.1.1.jar;C:\software\apache-maven-3.5.0\repo\com\baomidou\mybatis-plus-core\3.1.1\mybatis-plus-core-3.1.1.jar;C:\software\apache-maven-3.5.0\repo\com\baomidou\mybatis-plus-annotation\3.1.1\mybatis-plus-annotation-3.1.1.jar;C:\software\apache-maven-3.5.0\repo\com\github\jsqlparser\jsqlparser\1.2\jsqlparser-1.2.jar;C:\software\apache-maven-3.5.0\repo\org\mybatis\mybatis\3.5.1\mybatis-3.5.1.jar;C:\software\apache-maven-3.5.0\repo\org\mybatis\mybatis-spring\2.0.1\mybatis-spring-2.0.1.jar;C:\software\apache-maven-3.5.0\repo\mysql\mysql-connector-java\5.1.34\mysql-connector-java-5.1.34.jar;C:\software\apache-maven-3.5.0\repo\org\apache\velocity\velocity\1.7\velocity-1.7.jar;C:\software\apache-maven-3.5.0\repo\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;C:\software\apache-maven-3.5.0\repo\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;C:\software\apache-maven-3.5.0\repo\com\baomidou\mybatis-plus-boot-starter\3.1.1\mybatis-plus-boot-starter-3.1.1.jar;C:\software\apache-maven-3.5.0\repo\com\baomidou\mybatis-plus\3.1.1\mybatis-plus-3.1.1.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot-autoconfigure\2.1.5.RELEASE\spring-boot-autoconfigure-2.1.5.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\boot\spring-boot-starter-jdbc\2.1.5.RELEASE\spring-boot-starter-jdbc-2.1.5.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-jdbc\5.1.7.RELEASE\spring-jdbc-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-tx\5.1.7.RELEASE\spring-tx-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-core\5.1.7.RELEASE\spring-core-5.1.7.RELEASE.jar;C:\software\apache-maven-3.5.0\repo\org\springframework\spring-jcl\5.1.7.RELEASE\spring-jcl-5.1.7.RELEASE.jar" com.cooper.common.generate.AutoGenerateCode
14:58:43.195 [main] INFO com.cooper.common.generate.AutoGenerateCode - equipment
14:58:43.199 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================准备生成文件...==========================
14:58:43.517 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\bean]
14:58:43.517 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\controller]
14:58:43.518 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\mapper\xml]
14:58:43.519 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\service]
14:58:43.519 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 创建目录: [C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\service\impl]
14:58:43.536 [main] DEBUG org.apache.velocity - CommonsLogLogChute name is 'org.apache.velocity'
14:58:43.536 [main] DEBUG org.apache.velocity - Initializing Velocity, Calling init()...
14:58:43.536 [main] DEBUG org.apache.velocity - Starting Apache Velocity v1.7 (compiled: 2010-11-19 12:14:37)
14:58:43.536 [main] DEBUG org.apache.velocity - Default Properties File: org\apache\velocity\runtime\defaults\velocity.properties
14:58:43.536 [main] DEBUG org.apache.velocity - Trying to use logger class org.apache.velocity.runtime.log.AvalonLogChute
14:58:43.536 [main] DEBUG org.apache.velocity - Target log system for org.apache.velocity.runtime.log.AvalonLogChute is not available (java.lang.NoClassDefFoundError: org/apache/log/format/Formatter).  Falling back to next log system...
14:58:43.536 [main] DEBUG org.apache.velocity - Trying to use logger class org.apache.velocity.runtime.log.Log4JLogChute
14:58:43.536 [main] DEBUG org.apache.velocity - Target log system for org.apache.velocity.runtime.log.Log4JLogChute is not available (java.lang.NoClassDefFoundError: org/apache/log4j/Layout).  Falling back to next log system...
14:58:43.536 [main] DEBUG org.apache.velocity - Trying to use logger class org.apache.velocity.runtime.log.CommonsLogLogChute
14:58:43.536 [main] DEBUG org.apache.velocity - Using logger class org.apache.velocity.runtime.log.CommonsLogLogChute
14:58:43.540 [main] DEBUG org.apache.velocity - ResourceLoader instantiated: org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:58:43.549 [main] DEBUG org.apache.velocity - ResourceCache: initialized (class org.apache.velocity.runtime.resource.ResourceCacheImpl) with class java.util.Collections$SynchronizedMap cache map.
14:58:43.550 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Stop
14:58:43.552 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Define
14:58:43.552 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Break
14:58:43.553 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Evaluate
14:58:43.554 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Literal
14:58:43.555 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Macro
14:58:43.556 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Parse
14:58:43.557 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Include
14:58:43.558 [main] DEBUG org.apache.velocity - Loaded System Directive: org.apache.velocity.runtime.directive.Foreach
14:58:43.587 [main] DEBUG org.apache.velocity - Created '20' parsers.
14:58:43.593 [main] DEBUG org.apache.velocity - Velocimacro : "velocimacro.library" is not set.  Trying default library: VM_global_library.vm
14:58:43.594 [main] DEBUG org.apache.velocity - Could not load resource 'VM_global_library.vm' from ResourceLoader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader: ClasspathResourceLoader Error: cannot find resource VM_global_library.vm
14:58:43.594 [main] DEBUG org.apache.velocity - Velocimacro : Default library not found.
14:58:43.594 [main] DEBUG org.apache.velocity - Velocimacro : allowInline = true : VMs can be defined inline in templates
14:58:43.594 [main] DEBUG org.apache.velocity - Velocimacro : allowInlineToOverride = false : VMs defined inline may NOT replace previous VM definitions
14:58:43.594 [main] DEBUG org.apache.velocity - Velocimacro : allowInlineLocal = false : VMs defined inline will be global in scope if allowed.
14:58:43.594 [main] DEBUG org.apache.velocity - Velocimacro : autoload off : VM system will not automatically reload global library macros
14:58:43.624 [main] DEBUG org.apache.velocity - ResourceManager : found /templates/entity.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:58:43.635 [main] DEBUG org.apache.velocity - Left side (${versionFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 86, column 26]
14:58:43.635 [main] DEBUG org.apache.velocity - Left side (${logicDeleteFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 90, column 30]
14:58:43.635 [main] DEBUG org.apache.velocity - Left side (${versionFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 86, column 26]
14:58:43.635 [main] DEBUG org.apache.velocity - Left side (${logicDeleteFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 90, column 30]
14:58:43.635 [main] DEBUG org.apache.velocity - Left side (${versionFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 86, column 26]
14:58:43.635 [main] DEBUG org.apache.velocity - Left side (${logicDeleteFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 90, column 30]
14:58:43.636 [main] DEBUG org.apache.velocity - Left side (${versionFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 86, column 26]
14:58:43.636 [main] DEBUG org.apache.velocity - Left side (${logicDeleteFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 90, column 30]
14:58:43.636 [main] DEBUG org.apache.velocity - Left side (${versionFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 86, column 26]
14:58:43.636 [main] DEBUG org.apache.velocity - Left side (${logicDeleteFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 90, column 30]
14:58:43.638 [main] DEBUG org.apache.velocity - Left side (${versionFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 86, column 26]
14:58:43.638 [main] DEBUG org.apache.velocity - Left side (${logicDeleteFieldName}) of '==' operation has null value. If it is a reference, it may not be in the context or its toString() returned null. /templates/entity.java.vm[line 90, column 30]
14:58:43.643 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/entity.java.vm;  文件:C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\bean\TEquipment.java
14:58:43.644 [main] DEBUG org.apache.velocity - ResourceManager : found /templates/mapper.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:58:43.650 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/mapper.java.vm;  文件:C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\mapper\TEquipmentMapper.java
14:58:43.653 [main] DEBUG org.apache.velocity - ResourceManager : found /templates/mapper.xml.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:58:43.662 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/mapper.xml.vm;  文件:C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\mapper\xml\TEquipmentMapper.xml
14:58:43.664 [main] DEBUG org.apache.velocity - ResourceManager : found /templates/service.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:58:43.670 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/service.java.vm;  文件:C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\service\ITEquipmentService.java
14:58:43.672 [main] DEBUG org.apache.velocity - ResourceManager : found /templates/serviceImpl.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:58:43.678 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/serviceImpl.java.vm;  文件:C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\service\impl\TEquipmentServiceImpl.java
14:58:43.680 [main] DEBUG org.apache.velocity - ResourceManager : found /templates/controller.java.vm with loader org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
14:58:43.682 [main] DEBUG com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine - 模板:/templates/controller.java.vm;  文件:C:\workspaces\Java_learn\cooper_sp/src/main/java\com\cooper\module\equipment\controller\TEquipmentController.java
14:58:43.683 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================文件生成完成!!!==========================
14:58:43.683 [main] ERROR com.cooper.common.generate.AutoGenerateCode - >>>>>>> Generate Code Completed... >>>>>>>

Process finished with exit code 0

通过执行日志,我们基本上能看到整个生成执行过程,先读取数据相关信息,将读取到信息通过流输出到模板,模板解析生成对应得bean,mapper等文件。

  • 生成的代码:


    生成结果

附上主要代码:

package com.cooper.common.generate;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;

/**
 * mp代码生成实践
 *
 * @author jackcooperz
 * @version v1.0
 * @since 2019
 */
@Component
public class AutoGenerateCode {

    private static Logger logger = LogManager.getLogger(AutoGenerateCode.class);

    public static void main(String[] args) {
        /**
         * 根路径,我这里先直接放到此项目中。可以根据自己需要修改制定
         */
        String basePath = System.getProperty("user.dir");
        String parentPackageName = "com.cooper.module";
        String moduleName = "equipment";
        String[] tableNames = new String[]{"t_equipment"};
        String[] tablePres = new String[]{"f_"};
        String jdbcHost = "localhost";
        String jdbcPort = "3306";
        String jdbcDatabase = "demo_generate";
        String jdbcUrl = String.format("jdbc:mysql://%s:%s/%s?characterEncoding=utf8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai",
                jdbcHost, jdbcPort, jdbcDatabase);
        AutoDataSourceConfig autoDataSourceConfig = AutoDataSourceConfig.builder()
                .jdbcDriverClassName("com.mysql.jdbc.Driver")
                .jdbcPassword("admin123")
                .jdbcUserName("admin")
                .jdbcUrl(jdbcUrl)
                .build();
        String outputDir = String.format("%s/src/main/java", basePath);
        new AutoGenerateCode().generateCode(outputDir, parentPackageName,
                moduleName, autoDataSourceConfig, tablePres, tableNames);
    }


    /**
     * 生成代码
     *
     * @param outputDir         输出目录
     * @param parentPackageName 父级包
     * @param moduleName        模块名称
     * @param dataSourceConfig  数据源配置
     * @param tablePres         表前缀
     * @param tableNames        待生成表名
     */
    private void generateCode(String outputDir, String parentPackageName,
                              String moduleName, AutoDataSourceConfig dataSourceConfig, String[] tablePres, String[] tableNames) {
        try {
            AutoGenerator autoGenerator = new AutoGenerator();
            autoGenerator.setGlobalConfig(initGlobConfig(outputDir))
                    .setDataSource(initDataSource(dataSourceConfig))
                    .setStrategy(initStrategyConfig(tablePres, tableNames))
                    .setPackageInfo(initPackage(parentPackageName, moduleName))
                    .setTemplate(initTemplateConfig())
                    .execute();
            logger.error(">>>>>>> Generate Code Completed... >>>>>>>");
        } catch (Exception e) {
            logger.error("Generate Code failed:", e);
            throw new RuntimeException(String.format("Generate Code failed"));
        }
    }

    /**
     * 全局设置配置
     *
     * @param outputDir 生成文件输出根目录
     * @return GlobalConfig
     */
    private GlobalConfig initGlobConfig(String outputDir) {
        return new GlobalConfig()
                .setOutputDir(outputDir)
                /**
                 * 方法都比较见名知意了,就不做赘述
                 */
                .setFileOverride(false)
                .setOpen(false)
                .setEnableCache(false)
                .setKotlin(false)
                .setActiveRecord(false)
                .setBaseResultMap(true)
                .setBaseColumnList(true)
                /**
                 * 以下个人系统的类后缀,可根据自己需要调整
                 */
                .setMapperName("%sMapper")
                .setXmlName("%sMapper")
                .setServiceName("I%sService")
                .setServiceImplName("%sServiceImpl")
                .setControllerName("%sController")
                .setAuthor("jackcooperz")
                .setIdType(IdType.ID_WORKER);
    }

    /**
     * 设置数据源信息
     *
     * @param dataSourceConfig 数据源配置
     * @return DataSourceConfig
     */
    private DataSourceConfig initDataSource(AutoDataSourceConfig dataSourceConfig) {
        return new DataSourceConfig()
                .setDbType(DbType.MYSQL)
                .setTypeConvert(new MySqlTypeConvert() {
                    /**
                     * 自定义部分数据库类型对应转换的Java类型,根据个人需要设定
                     */
                    @Override
                    public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                        if (fieldType.toLowerCase().contains("tinyint")) {
                            return DbColumnType.BOOLEAN;
                        }
                        return super.processTypeConvert(globalConfig, fieldType);
                    }
                })
                .setDriverName(dataSourceConfig.getJdbcDriverClassName())
                .setUrl(dataSourceConfig.getJdbcUrl())
                .setUsername(dataSourceConfig.getJdbcUserName())
                .setPassword(dataSourceConfig.getJdbcPassword());
    }

    /**
     * 设置生成策略
     *
     * @param tablePre   表前缀
     * @param tableNames 待生成表列表
     * @return StrategyConfig
     */
    private StrategyConfig initStrategyConfig(String[] tablePre, String[] tableNames) {
        return new StrategyConfig()
                .setNaming(NamingStrategy.underline_to_camel)
                .setColumnNaming(NamingStrategy.underline_to_camel)
                .setTablePrefix(tablePre)
                .setControllerMappingHyphenStyle(true)
                .setEntityTableFieldAnnotationEnable(true)
                .setEntityLombokModel(true)
                .setInclude(tableNames)
                .setRestControllerStyle(false);
    }

    /**
     * 设置包配置信息
     *
     * @param parentPackageName 父级包
     * @param moduleName        模块名称
     * @return PackageConfig
     */
    private PackageConfig initPackage(String parentPackageName, String moduleName) {
        logger.info(moduleName);
        PackageConfig packageConfig = new PackageConfig()
                .setParent(parentPackageName)
                .setEntity("bean")
                .setService("service")
                .setServiceImpl("service.impl")
                .setMapper("mapper")
                .setXml("mapper.xml")
                .setController("controller");
        if (StringUtils.isNotEmpty(moduleName)) {
            packageConfig.setModuleName(moduleName);
        }
        return packageConfig;
    }

    /**
     * 指定生成代码模板文件路径【可以不指定,使用mp默认的】
     *
     * @return TemplateConfig
     */
    private TemplateConfig initTemplateConfig() {
        return new TemplateConfig();
        /**
         * 这里暂时不自定义模板,若有需要可自行修改
         */
//                .setController("/templates/mybatis/controller.java.vm")
//                .setService("/templates/mybatis/service.java.vm")
//                .setEntity("/templates/mybatis/entity.java.vm")
//                .setServiceImpl("/templates/mybatis/serviceImpl.java.vm")
//                .setXml("/templates/mybatis/mapper.xml.vm")
//                .setMapper("/templates/mybatis/mapper.java.vm");

    }
}
  • 数据源实体
package com.cooper.common.generate;

import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class AutoDataSourceConfig {


    private String jdbcUrl;
    private String jdbcDriverClassName;
    private String jdbcUserName;
    private String jdbcPassword;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容