1.使用背景

偶然情况下,同事介绍Mybatis-Plus有一个代码生成的功能,能够通过 AutoGenerator 快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。告别繁琐而无趣的重复性工作,极大提高工作效率。

对于该功能的使用,整理一份快速使用心得。

2.快速入门

2.1 准备工作

建议打开官方网站

2.2 导入依赖

com.baomidou

mybatis-plus-boot-starter

3.4.0

com.baomidou

mybatis-plus-generator

3.4.0

org.freemarker

freemarker

2.3.30

2.3 添加文件

// 演示例子,执行 main 方法控制台输入模块表名回车自动生成对应项目目录中

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.isNotBlank(ipt)) {

return ipt;

}

}

throw new MybatisPlusException("请输入正确的" + tip + "!");

}

public static void main(String[] args) {

// 代码生成器

AutoGenerator mpg = new AutoGenerator();

// 全局配置

GlobalConfig gc = new GlobalConfig();

String projectPath = System.getProperty("user.dir");

gc.setOutputDir(projectPath + "/src/main/java");

gc.setAuthor("jobob");

gc.setOpen(false);

// gc.setSwagger2(true); 实体属性 Swagger2 注解

mpg.setGlobalConfig(gc);

// 数据源配置

DataSourceConfig dsc = new DataSourceConfig();

dsc.setUrl("jdbc:mysql://localhost:3306/ant?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true");

// dsc.setSchemaName("public");

dsc.setDriverName("com.mysql.cj.jdbc.Driver");

dsc.setUsername("root");

dsc.setPassword("密码");

mpg.setDataSource(dsc);

// 包配置

PackageConfig pc = new PackageConfig();

pc.setModuleName(scanner("模块名"));

pc.setParent("com.baomidou.ant");

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 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.setFileCreate(new IFileCreate() {

@Override

public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {

// 判断自定义文件夹是否需要创建

checkDir("调用默认方法创建的目录,自定义目录用");

if (fileType == FileType.MAPPER) {

// 已经生成 mapper 文件判断存在,不想重新生成返回 false

return !new File(filePath).exists();

}

// 允许生成模板文件

return true;

}

});

*/

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.setSuperEntityClass("你自己的父类实体,没有就不用设置!");

strategy.setEntityLombokModel(true);

strategy.setRestControllerStyle(true);

// 公共父类

strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");

// 写于父类中的公共字段

strategy.setSuperEntityColumns("id");

strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));

strategy.setControllerMappingHyphenStyle(true);

strategy.setTablePrefix(pc.getModuleName() + "_");

mpg.setStrategy(strategy);

mpg.setTemplateEngine(new FreemarkerTemplateEngine());

mpg.execute();

}

}

2.4 快速开始

红色部分是要修改的部分

如果想进一步了解配置,可以去官网参考文档。

2.5 运用过程中遇到的问题

(1)数据源配置

图三已经给出配置方法,按照原来的文件配置,会出现一些问题。

(2)entity层

自动生成的代码,entity层的pojo文件,没有TableName和TableId注解和相应配置,在执行方法时,不会报错,但是也不执行,为了找该错误花了不少时间。

mybaitis快速生成_关于Mybatis-Plus代码生成器快速使用心得相关推荐

  1. IDEA try catch快捷键、 快速生成get set 方法快捷键、快速生成有参和无参构造方法快捷键

    IDEA try catch快捷键. 快速生成get set 方法快捷键.快速生成有参和无参构造方法 1. try catch快捷键 小伙伴们在写代码的过程中,有时需要抛出异常,手写太浪费时间,我们想 ...

  2. php表单生成器实验报告,PHP表单生成器,快速生成现代化的form表单,快速上手

    form-builder PHP表单生成器,快速生成现代化的form表单.包含复选框.单选框.输入框.下拉选择框等元素以及省市区三级联动.时间选择.日期选择.颜色选择.树型.文件/图片上传等功能. 本 ...

  3. win10关闭快速启动_注意:win10系统快速启动功能虽然好用,但也会带来一些麻烦...

    快速启动是首先在Windows 8中实现并延续到Windows 10的功能,可在启动电脑时提供更快的启动时间.这是一个很方便的功能,也是大多数人在不知情的情况下使用的功能,但有一些高手会禁用它,为什么 ...

  4. 用matlab对excel数据傅里叶变换,快速傅里叶变换_用excel如何作快速傅里叶变换?...

    用excel如何作快速傅里叶变换? 具体实例如下: 1.对于时间序列,可以展开成傅立叶级数,进行频谱分析.对于时间序列xt其傅立叶级数展开式为展开成傅立叶级数: 由图可见,图形完全对称,通常只取左半部 ...

  5. java super快速生成_为什么当我使用编辑器代码生成器时,eclipse会在构造函数中自动添加一个java super()方法?...

    正如@Kon在他的评论中提到的, Java中的一个空构造函数包含对超类构造函数的隐式调用. 此外,没有明确调用super()的非空构造函数将在顶部具有隐式调用. 离开super()调用是唯一的时候,如 ...

  6. 网站快速成型_我的老板对快速成型有什么期望?

    网站快速成型 Some of the top excuses I have gotten from clients when inviting them into a prototyping sess ...

  7. java安卓开发 快速入门_安卓程序员如何快速入门后端开发常识

    首先,对于安卓开发人员来说,学习一下后端开发知识是有必要的,一方面可以拓展自身的知识面,另一方面也可以推动自己走向全栈程序员发展路线,在云计算时代,全栈程序员的发展空间会更大一些. 相对来说,安卓程序 ...

  8. python快速数据分析_收藏 | 10个可以快速用Python进行数据分析的小技巧

    编译:小七.蒋宝尚 一些小提示和小技巧可能是非常有用的,特别是在编程领域.有时候使用一点点黑客技术,既可以节省时间,还可能挽救"生命". 一个小小的快捷方式或附加组件有时真是天赐之 ...

  9. java版我的世界快速建造_我的世界原版快速打造建筑指令教程分享

    导读:在我的世界中,玩家可以利用MOD来进行快速建造,下面小编我就来教教大家原版快速建造建筑的教程,通过下面的指令,就可以轻松的实现. 快速建筑Mod,都知道吧,就是按一下,然后出来个大房子的东西 这 ...

最新文章

  1. 今日arXiv精选 | 13 篇 ICCV 2021 最新论文
  2. boost::spirit模块实现错误处理的测试程序
  3. [网络安全自学篇] 四十四.Windows远程桌面服务缺陷(CVE-2019-0708)复现及防御详解
  4. php dom 丢失内容,PHP DOMDocument缺失
  5. python中字典的value可以为任意对象_Python学习之字典的删改查操作
  6. Centos7.0系统下Rsync+sersync实现多文件数据实时增量同步
  7. [转载] Python 学习 - Numpy
  8. Lucene创建索引与搜索索引试手
  9. Visio软件方案UML选择
  10. 使用爬虫下载x书视频
  11. php探针作用,php探针使用原理和技巧讲解
  12. 软件项目经理应具备的素质和条件_软件企业项目经理应具备的基本能力
  13. 微信小程序 自定义导航栏
  14. 指环王中那个白色头发、擅长用弓箭的精灵族男子
  15. 国产PLM软件在创新实践中强势崛起
  16. 【SeedCoder2015年 热身题5 搜索】上上下下ABAB (题目+答案)
  17. golang 开源项目
  18. WIFI能杀死植物吗?
  19. VMware14下载安装ubuntu14.04.6(VMware系列二)
  20. Java实验作业13(星座测试系统)

热门文章

  1. python模块cv2人脸识别_Python基于Opencv来快速实现人脸识别过程详解(完整版)
  2. 对于python的感受_聊聊我对python的感受
  3. 针织erp_编程源于我们长期的针织工作
  4. Generator函数的基本概念
  5. 工业机器人控制问题---来自睿慕课
  6. linux 根目录分配多少好,Linux下硬盘怎么分区才合适:根分区(/)交换分区(/swap)和/boot分区需要多大...
  7. 手机距离传感器坏了有什么影响_适合手机兼职的工作有什么影响吗
  8. 数据结构----依据出栈顺序判断所需的最少栈空间
  9. nuxt.js 引入第三方插件报window is not defined
  10. Nginx http 视频点播服务器搭建操作指南