MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
github地址:https://github.com/baomidou/mybatis-plus

今天主要介绍他的代码生成功能。其实官方文档已经写得很清楚了,这里做了些简单的封装。官方代码生成器文档:https://mybatis.plus/guide/generator.html。

mybatis-plus-generator:根据数据源中的表,反向生成controller、entity、service和mapper。

项目是作为一个整个maven项目的一个模块,结构如下:

首先是依赖,我用的是freemarker的模板,所以引入了org.freemarker,依赖如下:

    <dependencies><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>${mybatis.plus.version}</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>${freemarker.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>

定义一个CodeGeneConfig类,里面是mybatis-plus-generator常用的配置属性,还有一个CodeGeneProps类,对应属性文件code.properties里面的key。分别如图:

@Data
public class CodeGeneConfig {private String geneModule;private String genePkgModule;private String genePkgParent;private String geneDsUrl;private String geneDsUsername;private String geneDsPassword;private String geneTableNames;private String geneTablePrefix;private String geneBaseEntity;private String geneBaseEntityFields;private String geneBaseController;private String geneEntityName;private String geneAuthor;
}
public interface CodeGeneProps {/*** 项目子模块*/String GENE_MODULE = "gene.module";/*** 所在包*/String GENE_PKG_MODULE = "gene.pkg.module";/*** 所在包的父包*/String GENE_PKG_PARENT = "gene.pkg.parent";/*** 数据源url*/String GENE_DS_URL = "gene.ds.url";/*** 数据源账号*/String GENE_DS_USERNAME = "gene.ds.username";/*** 数据源密码*/String GENE_DS_PASSWORD = "gene.ds.password";/*** 全部表名,多个用逗号分隔*/String GENE_TABLE_NAMES = "gene.table.names";/*** 表前缀,生成@TableName注解里的表前缀*/String GENE_TABLE_PREFIX = "gene.table.prefix";/*** entity的父类*/String GENE_BASE_ENTITY = "gene.base.entity";/*** entity父类的字段,多个用逗号分隔*/String GENE_BASE_ENTITY_FIELDS = "gene.base.entity.fields";/*** controller的父类*/String GENE_BASE_CONTROLLER = "gene.base.controller";/*** entity的类名*/String GENE_ENTITY_NAME = "gene.entity.name";/*** 注释中的author*/String GENE_AUTHOR = "gene.author";
}
gene.module=easy-starter-app
gene.pkg.module=system
gene.pkg.parent=me.heysgene.ds.url=jdbc:mysql://192.168.41.130:3306/trade?useUnicode=true&characterEncoding=utf-8
gene.ds.username=root
gene.ds.password=mysqlgene.table.names=t_user
gene.table.prefix=t_gene.base.entity=me.heys.core.base.BaseEntity
gene.base.entity.fields=id,create_user,create_time,update_time
gene.base.controller=gene.entity.name=%sEntity
gene.author=heys

最后就是CodeGenerator类,基本上是依照官方文档写的。CodeGeneConfig配置优先,如果没有配置,就读取code.properties里面的配置:

@Slf4j
public class CodeGenerator {private CodeGeneConfig config;public CodeGenerator(CodeGeneConfig config) {this.config = mergeProps(config);}private CodeGeneConfig mergeProps(CodeGeneConfig config) {if (null == config) {config = new CodeGeneConfig();}Properties props = new Properties();try {props.load(CodeGenerator.class.getClassLoader().getResourceAsStream("code.properties"));} catch (IOException e) {log.error("CodeGenerator读取配置失败", e);}if (StringUtil.isBlank(config.getGeneModule())) {config.setGeneModule(props.getProperty(CodeGeneProps.GENE_MODULE));}if (StringUtil.isBlank(config.getGenePkgModule())) {config.setGenePkgModule(props.getProperty(CodeGeneProps.GENE_PKG_MODULE));}if (StringUtil.isBlank(config.getGenePkgParent())) {config.setGenePkgParent(props.getProperty(CodeGeneProps.GENE_PKG_PARENT));}if (StringUtil.isBlank(config.getGeneDsUrl())) {config.setGeneDsUrl(props.getProperty(CodeGeneProps.GENE_DS_URL));}if (StringUtil.isBlank(config.getGeneDsUsername())) {config.setGeneDsUsername(props.getProperty(CodeGeneProps.GENE_DS_USERNAME));}if (StringUtil.isBlank(config.getGeneDsPassword())) {config.setGeneDsPassword(props.getProperty(CodeGeneProps.GENE_DS_PASSWORD));}if (StringUtil.isBlank(config.getGeneTableNames())) {config.setGeneTableNames(props.getProperty(CodeGeneProps.GENE_TABLE_NAMES));}if (StringUtil.isBlank(config.getGeneTablePrefix())) {config.setGeneTablePrefix(props.getProperty(CodeGeneProps.GENE_TABLE_PREFIX));}if (StringUtil.isBlank(config.getGeneBaseEntity())) {config.setGeneBaseEntity(props.getProperty(CodeGeneProps.GENE_BASE_ENTITY));}if (StringUtil.isBlank(config.getGeneBaseEntityFields())) {config.setGeneBaseEntityFields(props.getProperty(CodeGeneProps.GENE_BASE_ENTITY_FIELDS));}if (StringUtil.isBlank(config.getGeneBaseController())) {config.setGeneBaseController(props.getProperty(CodeGeneProps.GENE_BASE_CONTROLLER));}if (StringUtil.isBlank(config.getGeneEntityName())) {config.setGeneEntityName(props.getProperty(CodeGeneProps.GENE_ENTITY_NAME));}if (StringUtil.isBlank(config.getGeneAuthor())) {config.setGeneAuthor(props.getProperty(CodeGeneProps.GENE_AUTHOR));}return config;}public void execute() {// 代码生成器AutoGenerator generator = new AutoGenerator();// 全局配置GlobalConfig globalConfig = new GlobalConfig();StringBuilder builder = new StringBuilder(System.getProperty("user.dir"));if (StringUtil.isNotBlank(config.getGeneModule())) {builder.append("/" + config.getGeneModule());}builder.append("/src/main/java");globalConfig.setEntityName(config.getGeneEntityName());globalConfig.setOutputDir(builder.toString());globalConfig.setAuthor(config.getGeneAuthor());globalConfig.setOpen(false);generator.setGlobalConfig(globalConfig);// 数据源配置DataSourceConfig dataSourceConfig = new DataSourceConfig();dataSourceConfig.setUrl(config.getGeneDsUrl());dataSourceConfig.setSchemaName("public");dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");dataSourceConfig.setUsername(config.getGeneDsUsername());dataSourceConfig.setPassword(config.getGeneDsPassword());generator.setDataSource(dataSourceConfig);// 包配置PackageConfig packageConfig = new PackageConfig();packageConfig.setModuleName(config.getGenePkgModule());packageConfig.setParent(config.getGenePkgParent());generator.setPackageInfo(packageConfig);// 模板配置TemplateConfig templateConfig = new TemplateConfig();templateConfig.setXml(null);generator.setTemplate(templateConfig);InjectionConfig injectionConfig = new InjectionConfig() {@Overridepublic void initMap() {Map<String, Object> map = new HashMap<>();// 用来作为类注释的时间,模板中通过${cfg.datetime}获取map.put("datetime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));this.setMap(map);}};generator.setCfg(injectionConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);if (StringUtil.isNotBlank(config.getGeneBaseEntity())) {strategy.setSuperEntityClass(config.getGeneBaseEntity());}strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);if (StringUtil.isNotBlank(config.getGeneBaseController())) {strategy.setSuperControllerClass(config.getGeneBaseController());}strategy.setInclude(config.getGeneTableNames().split(","));String superFields = config.getGeneBaseEntityFields();if(StringUtil.isNotBlank(superFields)) {strategy.setSuperEntityColumns(superFields.split(","));}strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(config.getGeneTablePrefix());generator.setStrategy(strategy);generator.setTemplateEngine(new FreemarkerTemplateEngine());generator.execute();}
}

使用方式:

public class Generator {public static void main(String[] args) {CodeGeneConfig codeGeneConfig = new CodeGeneConfig();codeGeneConfig.setGeneModule("easy-starter-app");new CodeGenerator(codeGeneConfig).execute();}
}

mybatis-plus-generator的templates目录下是模板,稍微修改了一下模板:修改了注释、加了@Slf4j注解。
只需要把模板复制到自己代码resources/templates目录下,会自动读取。

这个模块可以打成一个jar包,在不同地方单独使用。如下效果:

转载于:https://www.cnblogs.com/ahhyong/p/10511566.html

mybatis-plus的代码生成器相关推荐

  1. 开源一个SpringBoot + Mybatis + Vue的代码生成器

    来源 | 公众号「Java基基」 这里,推荐一款代码生成工具,可自定义模板生成不同的代码,支持MySQL.Oracle.SQL Server.PostgreSQL. 1. 只需要一个Java8环境,下 ...

  2. MyBatis Generator:代码生成器

    目录 一.简介 二.使用步骤 1.编写MGB的配置文件 2.运行代码生成器代码 3.简单测试 4.QBC风格的带条件查询测试 一.简介 MyBatis Generator: 简称MBG,是一个专门为M ...

  3. MyBatis Plus Generator 代码生成器 v3.5.x 案例,含校验、MapStruct、Swagger、QO、VO,自定义 FreeMarker 模板引擎

    v3.5.3.v3.5.3.1 详情请点击 v3.5.1 代码生成器 import com.baomidou.mybatisplus.annotation.IdType; import com.bao ...

  4. Mybatis Plus最新代码生成器AutoGenerator,更简单更高效!

    一.概述 AutoGenerator 是 MyBatis Plus推出的代码生成器,可以快速生成Entity.Mapper.Mapper XML.Service.Controller等各个模块的代码, ...

  5. 一个基于SpringBoot + Mybatis + Vue的代码生成器

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! code-gen 一款代码生成工具,可自定义模板生成不同的 ...

  6. java SpringMVC mybatis 多数据源 代码生成器 SSM java redis shiro ehcache

    获取[下载地址]   QQ: 313596790 A 调用摄像头拍照,自定义裁剪编辑头像,头像图片色度调节 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 ...

  7. SSM springmvc spring mybatis Java 集代码生成器 后台框架源码

    A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 (单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 ,0个代码不用 ...

  8. SpringMVC mybatis 多数据源 代码生成器 SSM java redis

    A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;   ...

  9. SpringMVC mybatis SSM 集成代码生成器 java redis shiro ehcache

    获取[下载地址] QQ: 313596790 官网 http://www.fhadmin.org/ A 代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [ ...

  10. SpringBoot项目集成Mybatis Plus(二)代码生成器

    承接上文,接着开始最基础的代码开发,使用Mybatis Plus的代码生成器,简化流程式的开发工作. 1.引入maven依赖, <dependency><groupId>com ...

最新文章

  1. Python 运行 Python hello.py 出错,提示: File stdin , line 1
  2. Android 系统镜像: boot.img kernel.img ramdisk.img system.img userdata.img cache.img recovery.img
  3. 安卓在代码中设置TextView的drawableLeft、drawableRight、drawableTop、drawableBottom
  4. android 进程间的通信,Android native进程间通信实例-binder结合共享内存
  5. srsLTE源码学习:RRC:(Radio Resource Control):无线资源控制协议
  6. ubuntu安装mysql后不能远程访问的方法
  7. c++邻接表实现BFS算法遍历
  8. 八爪鱼采集ajax表格,如何快速统计简书数据——八爪鱼采集器(二)
  9. Java实现PPT转化为PDF
  10. 用文华财经软件编写埃尔德动力系统
  11. ChinaSoft 论坛巡礼 | CCF-华为胡杨林基金-系统软件专项论坛
  12. 终于搞清楚了:SOLID设计原则出处
  13. c语言时间函数怎么用,C语言时间函数应用
  14. 认识Android应用开发(一)
  15. Linux学习笔记35——特定权限设置(比group、user更细的设置)、身份切换(su、sudo)、密码验证过程详解(PAM)、批量创建用户
  16. RS232电平 RS485电平 RS422电平
  17. 特斯拉Model X使用的是新密钥在几分钟内就被破解了
  18. Python:模拟邮箱登陆
  19. 数据分析项目-某加油站订单分析(SQL需求篇)
  20. 如何构建智能车联网主动防御体系

热门文章

  1. html页面怎么让高度充满屏幕,怎么让一个页面高度占整个屏幕的_html/css_WEB-ITnose...
  2. (12) ejb学习: JPA的传播属性
  3. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案(一)
  4. linux 安装 mysql 5.6_Linux安装MySQL_5.6
  5. 条件随机场 python_如何直观地理解条件随机场,并通过PyTorch简单地实现
  6. 实战渗透之一个破站日一天
  7. 20个非常好用的正则表达式
  8. Redis系列(十四)、Redis6新特性之RESP3与客户端缓存(Client side caching)
  9. Java路径问题最终解决方案—可定位所有资源的相对路径寻址
  10. win10安装docker