< dependency> < groupId> </ groupId> < artifactId> </ artifactId> < version> </ version> </ dependency> < dependency> < groupId> </ groupId> < artifactId> </ artifactId> < version> </ version> </ dependency> < dependency>  温馨提示: 
 从上面的pom.xml配置可以看出,使用的mybatis版本为:3.5.3。不同的版本其实现自动生成代码的方式不同,特别是3.5.1及其以上的版本和之前的版本有很大区别。
 
  
这是官网中的说明:
 
 
package  com. mycompany. common. utils ; import  com. au. sa. common. services.  CommonAbstractService ; 
import  com. baomidou. mybatisplus. generator.  FastAutoGenerator ; 
import  com. baomidou. mybatisplus. generator. config.  OutputFile ; 
import  com. baomidou. mybatisplus. generator. engine.  FreemarkerTemplateEngine ; 
import  lombok. extern. slf4j.  Slf4j ; 
import  org. apache. commons. lang.  StringUtils ; import  java. io.  BufferedReader ; 
import  java. io.  File ; 
import  java. io.  FileReader ; 
import  java. io.  FileWriter ; 
import  java. util.  Collections ; 
import  java. util. regex.  Matcher ; 
import  java. util. regex.  Pattern ; 
@Slf4j 
public  class  MyBatisAutoGeneratorUtil  { public  static  final  String  DB_URL  =  "jdbc:mysql://{ip}:{port}/{dbName}?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=true&autoReconnect=true" ; public  static  final  String  DB_USER_NAME  =  "username" ; public  static  final  String  DB_PASSWORD  =  "*****" ; public  static  final  String  AUTHOR  =  "xiaohuihui" ; private  static  final  String [ ]  SUPPER_ENTITY_CONTAINS_FIELD  =  { "delete_flag" ,  "version_num" ,  "creation_date" ,  "created_by" ,  "last_update_date" ,  "last_updated_by" } ; private  static  final  String  DEFAULT_OUT_PUT_DIR  =  "D://MyBatisPlusAutoGeneratorDir" ; private  static  final  String  RESP_OUT_PUT_DIR  =  "D://MyBatisPlusAutoGeneratorDir" ; private  static  final  String  DEFAULT_PARENT_PACK  =  "com.au.sa.storeRebate" ; private  static  final  String  BASE_SUPER_ENTITY_CLASS_NAME  =  "com.au.sa.storeRebate.common.entity.BaseDbEntity" ; private  static  final  String [ ]  TABLE_NAMES  =  new  String [ ] { "table_name" } ; public  static  void  main ( String [ ]  args)  { FastAutoGenerator . create ( DB_URL ,  DB_USER_NAME ,  DB_PASSWORD ) . globalConfig ( builder ->  { builder. author ( AUTHOR )  . enableSwagger ( )  . outputDir ( DEFAULT_OUT_PUT_DIR ) ;  } ) . packageConfig ( builder ->  { builder. parent ( "com.au.sa" )  . moduleName ( "storeRebate" )  . pathInfo ( Collections . singletonMap ( OutputFile . xml,  DEFAULT_OUT_PUT_DIR ) ) ;  } ) . strategyConfig ( builder ->  { builder. addInclude ( TABLE_NAMES )  . entityBuilder ( ) . enableTableFieldAnnotation ( ) . enableLombok ( ) . enableFileOverride ( ) . superClass ( BASE_SUPER_ENTITY_CLASS_NAME ) . controllerBuilder ( ) . superClass ( CommonAbstractService . class ) . enableHyphenStyle ( ) . enableRestStyle ( ) . enableFileOverride ( ) . formatFileName ( "%sController" ) . serviceBuilder ( ) . enableFileOverride ( ) . formatServiceFileName ( "%sService" ) . formatServiceImplFileName ( "%sServiceImpl" ) . mapperBuilder ( ) . enableFileOverride ( ) . enableBaseResultMap ( ) . enableBaseColumnList ( ) . formatMapperFileName ( "%sDao" ) ; } ) . templateEngine ( new  FreemarkerTemplateEngine ( ) )  . execute ( ) ; produceViewObject ( false ,  TABLE_NAMES ) ; } private  static  void  produceViewObject ( boolean  isTablePrefix,  String . . .  tableNames)  { for  ( int  i =  0 ;  i <  tableNames. length;  i++ )  { String  tableName =  tableNames[ i] ; tableName =  isTablePrefix ?  tableName. substring ( tableName. indexOf ( "_" )  +  1 )  :  tableName; String  outPutDir =  RESP_OUT_PUT_DIR  +  "/"  +  ( DEFAULT_PARENT_PACK . replace ( "." ,  "/" ) )  +  "/resp/" ; String  baseFileName =  underline2Camel ( tableName,  false ) ; try  { File  outFile =  new  File ( outPutDir) ; if  ( ! outFile. exists ( ) )  { outFile. mkdirs ( ) ; } File  voFile =  new  File ( outFile,  baseFileName +  "Resp.java" ) ; if  ( ! voFile. exists ( ) )  { voFile. createNewFile ( ) ; } BufferedReader  reader =  new  BufferedReader ( new  FileReader ( DEFAULT_OUT_PUT_DIR  +  "/"  +  ( DEFAULT_PARENT_PACK . replace ( "." ,  "/" ) )  +  "/entity/" +  baseFileName +  ".java" ) ) ; FileWriter  fw =  new  FileWriter ( voFile) ; String  line =  null ; String  description =  null ; String  regex =  "([\u4e00-\u9fa5]+)" ; while  ( ( line =  reader. readLine ( ) )  !=  null )  { Matcher  matcher =  Pattern . compile ( regex) . matcher ( line) ;  if  ( matcher. find ( ) )  { description =  matcher. group ( 1 ) ; } int  index =  line. indexOf ( baseFileName) ; if  ( line. contains ( "package" ) )  { line =  StringUtils . substringBeforeLast ( line,  "." )  +  ".resp;" ; }  else  if  ( index >  - 1  &&  ! line. contains ( "@ApiModel" ) )  { if  ( line. contains ( "+" ) )  { line =  StringUtils . substring ( line,  0 ,  index +  baseFileName. length ( ) )  +  "{\" +" ;  }  else  { line =  StringUtils . substring ( line,  0 ,  index +  baseFileName. length ( ) )  +  "{" ; } line =  line. replace ( baseFileName,  baseFileName +  "Resp" ) ; }  else  if  ( line. contains ( "@TableName" ) )  { description =  "" ; continue ; }  else  if  ( line. contains ( "@TableField" )  ||  line. contains ( "@TableId" ) )  { boolean  required =  true ; for  ( String  col :  SUPPER_ENTITY_CONTAINS_FIELD )  { if  ( line. contains ( col)  &&  ! StringUtils . equals ( "version_num" ,  col) )  { required =  false ; break ; } } description =  "" ; continue ; }  else  if  ( line. contains ( "@Accessors" )  ||  line. contains ( "@Override" )  ||  line. contains ( "@TableLogic" )  ||  line. contains ( "@Version" ) )  { continue ; } line +=  "\r\n" ; fw. write ( line) ; } fw. close ( ) ; reader. close ( ) ; }  catch  ( Exception  e)  { log. error ( e. getMessage ( ) ,  e) ; } } } public  static  String  underline2Camel ( String  line,  boolean . . .  smallCamel)  { if  ( StringUtils . isBlank ( line) )  { return  "" ; } StringBuffer  sb =  new  StringBuffer ( ) ; Pattern  pattern =  Pattern . compile ( "([A-Za-z\\d]+)(_)?" ) ; Matcher  matcher =  pattern. matcher ( line) ; while  ( matcher. find ( ) )  { String  word =  matcher. group ( ) ; if  ( ( smallCamel. length ==  0  ||  smallCamel[ 0 ] )  &&  matcher. start ( )  ==  0 )  { sb. append ( Character . toLowerCase ( word. charAt ( 0 ) ) ) ; }  else  { sb. append ( Character . toUpperCase ( word. charAt ( 0 ) ) ) ; } int  index =  word. lastIndexOf ( '_' ) ; if  ( index >  0 )  { sb. append ( word. substring ( 1 ,  index) . toLowerCase ( ) ) ; }  else  { sb. append ( word. substring ( 1 ) . toLowerCase ( ) ) ; } } return  sb. toString ( ) ; } 
} 
参考官网:MyBatis-Plus代码生成器配置
 
 
 
属性 说明 示例 url jdbc 路径 jdbc:mysql://127.0.0.1:3306/mybatis-plus username 数据库账号 root password 数据库密码 123456 
 
new  DataSourceConfig. Builder ( "jdbc:mysql://127.0.0.1:3306/mybatis-plus" , "root" , "123456" ) . build ( ) ; 
方法 说明 示例 dbQuery(IDbQuery) 数据库查询 new MySqlQuery(),只在SQLQuery下生效 schema(String) 数据库 schema(部分数据库适用) mybatis-plus typeConvert(ITypeConvert) 数据库类型转换器 new MySqlTypeConvert(),只在SQLQuery下生效 keyWordsHandler(IKeyWordsHandler) 数据库关键字处理器 new MySqlKeyWordsHandler() typeConvertHandler(ITypeConvertHandler) 类型转换器(默认) 自定义实现ITypeConvertHandler,只在DefaultQuery下生效 databaseQueryClass(AbstractDatabaseQuery) 数据库查询方式 默认DefaultQuery.class(通用元数据), SQLQuery.class(SQL查询) 
 
new  DataSourceConfig. Builder ( "jdbc:mysql://127.0.0.1:3306/mybatis-plus" , "root" , "123456" ) . dbQuery ( new  MySqlQuery ( ) ) . schema ( "mybatis-plus" ) . typeConvert ( new  MySqlTypeConvert ( ) ) . keyWordsHandler ( new  MySqlKeyWordsHandler ( ) ) . databaseQueryClass ( SQLQuery . class ) . build ( ) ; 
new  DataSourceConfig. Builder ( "jdbc:mysql://127.0.0.1:3306/mybatis-plus" , "root" , "123456" ) . schema ( "mybatis-plus" ) . keyWordsHandler ( new  MySqlKeyWordsHandler ( ) ) . build ( ) ; 
方法 说明 示例 disableOpenDir 禁止打开输出目录 默认值:true outputDir(String) 指定输出目录 /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp author(String) 作者名 baomidou 默认值:作者 enableKotlin 开启 kotlin 模式 默认值:false enableSwagger 开启 swagger 模式 默认值:false dateType(DateType) 时间策略 DateType.ONLY_DATE 默认值: DateType.TIME_PACK commentDate(String) 注释日期 默认值: yyyy-MM-dd 
 
new  GlobalConfig. Builder ( ) . fileOverride ( ) . outputDir ( "/opt/baomidou" ) . author ( "baomidou" ) . enableKotlin ( ) . enableSwagger ( ) . dateType ( DateType . TIME_PACK ) . commentDate ( "yyyy-MM-dd" ) . build ( ) ; 
方法 说明 示例 parent(String) 父包名 默认值:com.baomidou moduleName(String) 父包模块名 默认值:无 entity(String) Entity 包名 默认值:entity service(String) Service 包名 默认值:service serviceImpl(String) Service Impl 包名 默认值:service.impl mapper(String) Mapper 包名 默认值:mapper xml(String) Mapper XML 包名 默认值:mapper.xml controller(String) Controller 包名 默认值:controller other(String) 自定义文件包名 输出自定义文件时所用到的包名 pathInfo(Map<OutputFile, String>) 路径配置信息 Collections.singletonMap(OutputFile.mapperXml, “D://”) 
 
new  PackageConfig. Builder ( ) . parent ( "com.baomidou.mybatisplus.samples.generator" ) . moduleName ( "sys" ) . entity ( "po" ) . service ( "service" ) . serviceImpl ( "service.impl" ) . mapper ( "mapper" ) . xml ( "mapper.xml" ) . controller ( "controller" ) . other ( "other" ) . pathInfo ( Collections . singletonMap ( OutputFile . mapperXml,  "D://" ) ) . build ( ) ; 
方法 说明 示例 disable 禁用所有模板 disable(TemplateType…) 禁用模板 TemplateType.ENTITY entity(String) 设置实体模板路径(JAVA) /templates/entity.java entityKt(String) 设置实体模板路径(kotlin) /templates/entity.java service(String) 设置 service 模板路径 /templates/service.java serviceImpl(String) 设置 serviceImpl 模板路径 /templates/serviceImpl.java mapper(String) 设置 mapper 模板路径 /templates/mapper.java mapperXml(String) 设置 mapperXml 模板路径 /templates/mapper.xml controller(String) 设置 controller 模板路径 /templates/controller.java 
 
new  TemplateConfig. Builder ( ) . disable ( TemplateType . ENTITY ) . entity ( "/templates/entity.java" ) . service ( "/templates/service.java" ) . serviceImpl ( "/templates/serviceImpl.java" ) . mapper ( "/templates/mapper.java" ) . mapperXml ( "/templates/mapper.xml" ) . controller ( "/templates/controller.java" ) . build ( ) ; 
方法 说明 示例 beforeOutputFile(BiConsumer<TableInfo, Map<String, Object>>) 输出文件之前消费者 customMap(Map<String, Object>) 自定义配置 Map 对象 Collections.singletonMap(“test”, “baomidou”) customFile(Map<String, String>) 自定义配置模板文件 Collections.singletonMap(“test.txt”, “/templates/test.vm”) 方法 formatNameFunction 可以格式化文件,参考测试用例 H2CodeGeneratorTest.testCustomFileByList 
 
new  InjectionConfig. Builder ( ) . beforeOutputFile ( ( tableInfo,  objectMap)  ->  { System . out. println ( "tableInfo: "  +  tableInfo. getEntityName ( )  +  " objectMap: "  +  objectMap. size ( ) ) ; } ) . customMap ( Collections . singletonMap ( "test" ,  "baomidou" ) ) . customFile ( Collections . singletonMap ( "test.txt" ,  "/templates/test.vm" ) ) . build ( ) ; 
方法 说明 示例 enableCapitalMode 开启大写命名 默认值:false enableSkipView 开启跳过视图 默认值:false disableSqlFilter 禁用 sql 过滤 默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关 enableSchema 启用 schema 默认值:false,多 schema 场景的时候打开 likeTable(LikeTable) 模糊表匹配(sql 过滤) likeTable 与 notLikeTable 只能配置一项 notLikeTable(LikeTable) 模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项 addInclude(String…) 增加表匹配(内存过滤) include 与 exclude 只能配置一项 ,支持正则匹配、例如 ^t_.* 所有 t_ 开头的表名 addExclude(String…) 增加表排除匹配(内存过滤) include 与 exclude 只能配置一项 ,支持正则匹配、例如 .*st$ 所有 st 结尾的表名 addTablePrefix(String…) 增加过滤表前缀 addTableSuffix(String…) 增加过滤表后缀 addFieldPrefix(String…) 增加过滤字段前缀 addFieldSuffix(String…) 增加过滤字段后缀 outputFile 内置模板输出文件处理 参考测试用例 H2CodeGeneratorTest.testOutputFile entityBuilder 实体策略配置 controllerBuilder controller 策略配置 mapperBuilder mapper 策略配置 serviceBuilder service 策略配置 
 
new  StrategyConfig. Builder ( ) . enableCapitalMode ( ) . enableSkipView ( ) . disableSqlFilter ( ) . likeTable ( new  LikeTable ( "USER" ) ) . addInclude ( "t_simple" ) . addTablePrefix ( "t_" ,  "c_" ) . addFieldSuffix ( "_flag" ) . build ( ) ; 
方法 说明 示例 nameConvert(INameConvert) 名称转换实现 superClass(Class<?>) 设置父类 BaseEntity.class superClass(String) 设置父类 com.baomidou.global.BaseEntity disableSerialVersionUID 禁用生成 serialVersionUID 默认值:true enableFileOverride 覆盖已生成文件 默认值:false enableColumnConstant 开启生成字段常量 默认值:false enableChainModel 开启链式模型 默认值:false enableLombok 开启 lombok 模型 默认值:false enableRemoveIsPrefix 开启 Boolean 类型字段移除 is 前缀 默认值:false enableTableFieldAnnotation 开启生成实体时生成字段注解 默认值:false enableActiveRecord 开启 ActiveRecord 模型 默认值:false versionColumnName(String) 乐观锁字段名(数据库字段) versionColumnName与versionPropertyName二选一即可 versionPropertyName(String) 乐观锁属性名(实体) versionColumnName与versionPropertyName二选一即可 logicDeleteColumnName(String) 逻辑删除字段名(数据库字段) logicDeleteColumnName与logicDeletePropertyName二选一即可 logicDeletePropertyName(String) 逻辑删除属性名(实体) logicDeleteColumnName与logicDeletePropertyName二选一即可 naming 数据库表映射到实体的命名策略 默认下划线转驼峰命名:NamingStrategy.underline_to_camel columnNaming 数据库表字段映射到实体的命名策略 默认为 null,未指定按照 naming 执行 addSuperEntityColumns(String…) 添加父类公共字段 addIgnoreColumns(String…) 添加忽略字段 addTableFills(IFill…) 添加表字段填充 addTableFills(List) 添加表字段填充 idType(IdType) 全局主键类型 convertFileName(ConverterFileName) 转换文件名称 formatFileName(String) 格式化文件名称 
 
new  StrategyConfig. Builder ( ) . entityBuilder ( ) . superClass ( BaseEntity . class ) . disableSerialVersionUID ( ) . enableChainModel ( ) . enableLombok ( ) . enableRemoveIsPrefix ( ) . enableTableFieldAnnotation ( ) . enableActiveRecord ( ) . versionColumnName ( "version" ) . logicDeleteColumnName ( "deleted" ) . naming ( NamingStrategy . no_change) . columnNaming ( NamingStrategy . underline_to_camel) . addSuperEntityColumns ( "id" ,  "created_by" ,  "created_time" ,  "updated_by" ,  "updated_time" ) . addIgnoreColumns ( "age" ) . addTableFills ( new  Column ( "create_time" ,  FieldFill . INSERT ) ) . addTableFills ( new  Property ( "updateTime" ,  FieldFill . INSERT_UPDATE ) ) . idType ( IdType . AUTO ) . formatFileName ( "%sEntity" ) . build ( ) ; 
方法 说明 示例 superClass(Class<?>) 设置父类 BaseController.class superClass(String) 设置父类 com.baomidou.global.BaseController enableFileOverride 覆盖已生成文件 默认值:false enableHyphenStyle 开启驼峰转连字符 默认值:false enableRestStyle 开启生成@RestController 控制器 默认值:false convertFileName(ConverterFileName) 转换文件名称 formatFileName(String) 格式化文件名称 
 
new  StrategyConfig. Builder ( ) . controllerBuilder ( ) . superClass ( BaseController . class ) . enableHyphenStyle ( ) . enableRestStyle ( ) . formatFileName ( "%sAction" ) . build ( ) ; 
方法 说明 示例 superServiceClass(Class<?>) 设置 service 接口父类 BaseService.class superServiceClass(String) 设置 service 接口父类 com.baomidou.global.BaseService superServiceImplClass(Class<?>) 设置 service 实现类父类 BaseServiceImpl.class superServiceImplClass(String) 设置 service 实现类父类 com.baomidou.global.BaseServiceImpl enableFileOverride 覆盖已生成文件 默认值:false convertServiceFileName(ConverterFileName) 转换 service 接口文件名称 convertServiceImplFileName(ConverterFileName) 转换 service 实现类文件名称 formatServiceFileName(String) 格式化 service 接口文件名称 formatServiceImplFileName(String) 格式化 service 实现类文件名称 
 
new  StrategyConfig. Builder ( ) . serviceBuilder ( ) . superServiceClass ( BaseService . class ) . superServiceImplClass ( BaseServiceImpl . class ) . formatServiceFileName ( "%sService" ) . formatServiceImplFileName ( "%sServiceImp" ) . build ( ) ; 
方法 说明 示例 superClass(Class<?>) 设置父类 BaseMapper.class superClass(String) 设置父类 com.baomidou.global.BaseMapper enableFileOverride 覆盖已生成文件 默认值:false enableMapperAnnotation 开启 @Mapper 注解 默认值:false enableBaseResultMap 启用 BaseResultMap 生成 默认值:false enableBaseColumnList 启用 BaseColumnList 默认值:false cache(Class<? extends Cache>) 设置缓存实现类 MyMapperCache.class convertMapperFileName(ConverterFileName) 转换 mapper 类文件名称 convertXmlFileName(ConverterFileName) 转换 xml 文件名称 formatMapperFileName(String) 格式化 mapper 文件名称 formatXmlFileName(String) 格式化 xml 实现类文件名称 
 
new  StrategyConfig. Builder ( ) . mapperBuilder ( ) . superClass ( BaseMapper . class ) . enableMapperAnnotation ( ) . enableBaseResultMap ( ) . enableBaseColumnList ( ) . cache ( MyMapperCache . class ) . formatMapperFileName ( "%sDao" ) . formatXmlFileName ( "%sXml" ) . build ( ) ; 
public  final  class  EnhanceFreemarkerTemplateEngine  extends  FreemarkerTemplateEngine  { @Override protected  void  outputCustomFile ( @NotNull  Map < String ,  String > ,  @NotNull  TableInfo  tableInfo,  @NotNull  Map < String ,  Object > )  { String  entityName =  tableInfo. getEntityName ( ) ; String  otherPath =  this . getPathInfo ( OutputFile . other) ; customFile. forEach ( ( key,  value)  ->  { String  fileName =  String . format ( otherPath +  File . separator +  entityName +  "%s" ,  key) ; this . outputFile ( new  File ( fileName) ,  objectMap,  value) ; } ) ; } 
} 
使用方式样例(其他细节参数请查看文档)
 
entityDTO.java.ftl 可参考源码内entity.java.ftl文件
 
FastAutoGenerator . create ( url,  username,  password) . globalConfig ( builder ->  { builder. author ( "abc" )  . enableSwagger ( )  . fileOverride ( )  . disableOpenDir ( )  . outputDir ( finalProjectPath +  "/src/main/java" ) ;  } ) . packageConfig ( builder ->  { builder. parent ( "com.baomidou.mybatisplus.samples" )  . moduleName ( "test" )  . entity ( "model.entity" )  . other ( "model.dto" )  . pathInfo ( Collections . singletonMap ( OutputFile . xml,  finalProjectPath +  "/src/main/resources/mapper" ) ) ;  } ) . injectionConfig ( consumer ->  { Map < String ,  String > =  new  HashMap < > ( ) ; customFile. put ( "DTO.java" ,  "/templates/entityDTO.java.ftl" ) ; consumer. customFile ( customFile) ; } ) ;