原文链接:橙子&栗子&世界——Mybatis-Plus的使用(二)—— 代码生成器

代码生成器的介绍

对于我来说,开发时最难受的时候除了有bug没有解决之外,就是做复制粘贴了。每次创建一个新的模块,都要重复的不断复制实体类的属性,然后在写上一次注释,再把代码中该继承的继承。用Mybatis-Plus的代码生成器AutoGenerator就可以省去这一部分的烦恼。它帮我直接把Entity、Mapper、Mapper XML、Service、Controller等文件预先生成好,也帮我把Entity对应的表做好了映射,也写好的注释,还有Service以及Mapper文件,也帮我把Mybatis-Plus需要用的父类继承好了。这样就省去我这一部分的开发工作。

代码生成器的依赖

除了一章节的Mybatis-Plus的核心依赖以外,还需要添加两个重要的依赖:

 <!--mybatisplus的代码生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.1.2</version></dependency>

以及

 <!--freemarker模板引擎--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.28</version></dependency>

代码生成工具类

AutoGenerator

代码生成器的主类,之后的各种配置都会添加到这个类里面,例如:

 AutoGenerator mpg = new AutoGenerator();// 代码生成器主类

GlobalConfig

全局配置,定义文件的输出目录,设置文件的@author信息等

        GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");// 获取用户程序当前路径(项目根的路径)gc.setOutputDir(projectPath + "/src/main/java");// 生成文件的输出目录(默认值:D 盘根目录)gc.setAuthor("ck");// 开发人员(默认值:null)gc.setOpen(false);// 是否打开输出目录(默认值:null)gc.setFileOverride(true);// 是否覆盖已有文件(默认值:false)mpg.setGlobalConfig(gc);//把全局配置添加到代码生成器主类

DataSourceConfig

数据源配置,这个比较清晰了,数据库表映射实体类时需要配置数据库的连接信息。

        DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://47.103.17.3:3306/lm_dev?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8");dsc.setSchemaName("public");// 数据库 schema name(例如 PostgreSQL 可指定为 public)dsc.setDbType(DbType.MYSQL);// 数据库类型dsc.setDriverName("com.mysql.cj.jdbc.Driver");// 驱动名称dsc.setUsername("chenkang"); // 用户名dsc.setPassword("258963"); // 密码

类型转换 默认由 dbType 类型决定选择对应数据库内置实现。
实现 ITypeConvert 接口自定义数据库 字段类型 转换为自己需要的 java 类型,也可以直接重写自带的MySqlTypeConvert类的processTypeConvert方法,是一个道理

 dsc.setTypeConvert(new MySqlTypeConvert() {@Overridepublic IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {return super.processTypeConvert(globalConfig, fieldType);}});mpg.setDataSource(dsc);//把数据源配置添加到代码生成器主类

PackageConfig

包配置,就是每个类最上面的package,比如:package com.ck.mybatisplus.foundation.service;这里包配置可以分别配置service、entity、controller等等

 PackageConfig pc = new PackageConfig();pc.setModuleName("foundation");// 父包模块名pc.setParent("com.ck.mybatisplus");// 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名pc.setService("service");// Service包名pc.setEntity("entity");// Entity包名pc.setServiceImpl("service.impl");// ServiceImpl包名pc.setMapper("mapper");// Mapper包名pc.setController("controller");// Contoller包名// pc.setXml("mapper.xml");// Mapper.xml包名mpg.setPackageInfo(pc);// 把包配置添加到代码生成器主类

TemplateConfig

模板配置,配置模板,此模板配置默认生成mybatisplus自带模板的controller.java、service.java、serviceImpl.java、mapper.java、.xml、entity类的文件
若不想用默认的模板生成的文件,有两种方法:

  1. 一种是直接set自定义的模板路径,如下面的templateConfig.setController("/templates/MyController.java.ftl")
  2. 第二种是使用自定义配置(下面有讲解),前提是要先把默认值设为null,如templateConfig.setXml(null)。两种方法的共同点是都需要先有自定义的模板文件,

不同是第一种的文件生成路径是在前面的包配置固定了的,第二种是连文件生成的路径都是可以自定义的!

 TemplateConfig templateConfig = new TemplateConfig();templateConfig.setXml(null);
//        templateConfig.setController("/templates/MyController.java.ftl");mpg.setTemplate(templateConfig);// 把模板配置添加到代码生成器主类

InjectionConfig

自定义配置,前面也说了,只要有相应的模板文件,基本上能满足在项目中任何位置生成你想要的文件,比如.java、.xml、.jsp文件等,首先new出自定义配置的对象,如下

 InjectionConfig cfg = new InjectionConfig() {/*** 使用initMap是抽象方法,所以必须被重写,* 注入自定义 Map 对象(注意需要setMap放进去),该对象可以传递到模板引擎通过 cfg.xxx 引用*/@Overridepublic void initMap() {Map<String, Object> map = new HashMap<>();map.put("mapperId", "testMapperId");this.setMap(map);}};

然后配置模板的路径

.ftl表示是模板引擎是 freemarker,还有.vm表示模板引擎是 velocity等等

String templatePath = "/templates/mapper.xml.ftl";

再自定义输出配置,配置 FileOutConfig 指定模板文件、输出文件达到自定义文件生成目的,如果同时自定义两个或多个以上,可以直接focList.add多个new FileOutConfig(templatePath) {}配置

自定义配置会被优先输出

 List<FileOutConfig> focList = new ArrayList<>();focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});

自定义判断是否创建文件,该配置用于判断某个类是否需要覆盖创建,如果想覆盖之前已生成的文件,isCreate方法直接返回true,默认是false

一般情况可以不用配置这个,直接使用默认的不覆盖

 cfg.setFileCreate(new IFileCreate() {@Overridepublic boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {// 判断自定义文件夹是否需要创建,
//                checkDir("调用默认方法创建的目录");// 当然也可以自定义哪些文件可以被覆盖哪些不可以被覆盖,更新判断逻辑返回true或者falsereturn false;}});
 cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);

StrategyConfig

数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表等信息,

 StrategyConfig strategy = new StrategyConfig();// 数据库表映射到实体的命名策略:下划线转驼峰strategy.setNaming(NamingStrategy.underline_to_camel);// 数据库表字段映射到实体的命名策略, 未指定按照 naming 执行strategy.setColumnNaming(NamingStrategy.underline_to_camel);// 自定义继承类全称,带包名 (以下为示例)strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");strategy.setEntityLombokModel(true);// 【实体】是否为lombok模型(默认 false)strategy.setRestControllerStyle(true);// 生成 @RestController 控制器strategy.setSuperEntityColumns("id");// 写于父类中的公共字段strategy.setInclude("fnd_user");// 需要包含的表名,允许正则表达式(与exclude二选一配置)strategy.setExclude("m_fnd_user1");// 需要排除的表名,允许正则表达式strategy.setControllerMappingHyphenStyle(true);// 驼峰转连字符strategy.setEntityTableFieldAnnotationEnable(true);// 是否生成实体时,生成字段注解 默认false;strategy.setTablePrefix(pc.getModuleName() + "_");// 表前缀mpg.setStrategy(strategy);// 把策略配置添加到代码生成器主类

模板引擎

向代码生成器主类上配置模板引擎,这是是freemarker,mpg.execute()方法就是执行生成代码类。

 mpg.setTemplateEngine(new FreemarkerTemplateEngine());mpg.execute();

以上内容来源于

Mybatis-Plus的使用(二)—— 代码生成器相关推荐

  1. mybatis 思维导图,让 mybatis 不再难懂(二)

    上一篇文章写了mybatis的基本原理和配置文件的基本使用,这一篇写mybatis的使用,主要包括与sping集成.动态sql.还有mapper的xml文件一下复杂配置等.值得注意的是,导图17和18 ...

  2. mybatis源码阅读(二):mybatis初始化上

    转载自  mybatis源码阅读(二):mybatis初始化上 1.初始化入口 //Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与 ...

  3. mybatis思维导图,让mybatis不再难懂(二)

    转载自 mybatis思维导图,让mybatis不再难懂(二) 写在前面 上一篇文章写了mybatis的基本原理和配置文件的基本使用,这一篇写mybatis的使用,主要包括与sping集成.动态sql ...

  4. (转)MyBatis框架的学习(二)——MyBatis架构与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图:  下面作简要概述: ...

  5. Mybatis完整版(二)

    Mybatis完整版(二) 四.[配置解析(优化)](https://mybatis.org/mybatis-3/zh/configuration.html) 1.核心配置文件 2.[环境配置(env ...

  6. mybatis源码考究二(sqlsession线程安全和缓存失效)

    mybatis源码考究二 1.mybatis整合spring解决sqlsession线程安全问题 2.mybatis整合spring一级缓存失效问题 mybatis结合spring使用 1.项目依赖 ...

  7. 初学Java 从0-1创建Spring boot+Mybatis - plus+Swagger2+Mysql(代码生成器)

    第一章 初学Java 创建Spring boot+Mybatis-plus+mysql 目录 一.创建项目 二.配置pom.xml 三.配置application.yml 四.增加Mybatis-pl ...

  8. java学mybatis还用学jdbc吗,mybatis系统学习(二)——使用基础mybatis代替原始jdbc

    mybatis系统学习(二)--使用基础mybatis代替原始jdbc 前言 这一篇笔记的内容应当是建立在上一篇的基础之上,不论是使用的数据表,还是对应的实体类,都在上一篇有过说明. 有兴趣的或者对相 ...

  9. MyBatis增删改示例——MyBatis学习笔记之二

    上篇博文介绍了MyBatis的一个入门示例,今天介绍如何实现数据库的增加.删除和修改记录的操作.为简洁起见,与上个示例重复的注释将被删除(少数重要的除外).若影响了您的理解,可参考上篇博文. 本示例的 ...

  10. mybatis generator 中文注释_mybatis代码生成器,提高开发效率

    出处:https://www.cnblogs.com/homejim/p/9782403.html 在使用 mybatis 过程中, 当手写 JavaBean和XML 写的越来越多的时候, 就越来越同 ...

最新文章

  1. java case switch,Java中Switch Case的替代方案
  2. 01-迭代开发的基本需求和Scrum标准
  3. 安装Ruby和Rails运行环境
  4. cookie和session(1)
  5. JSON中的JSON.parseArray()、JSON.parseObject()、JSON.tojsonString()
  6. Linux字符设备与块设备的区别
  7. Exceeded maximum number of retries. Exceeded max scheduling attempts 3 for instance
  8. 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(二)
  9. 一台机器上同时部署多个tomcat服务
  10. python练手经典100例-Python 的练手项目有哪些值得推荐?
  11. CSS完美实现垂直居中-测试页
  12. ubunut18.04 pycharm创建快捷方式和右键创建空白文件夹
  13. ORACLE Primavera P6 / Unifier 19.12 免费虚拟机
  14. Php怎样实现通过邮箱找回密码,PHP如何使用邮箱找回密码?
  15. exp oracle 904,EXP-00008: ORACLE error 904 encountered的解决方法
  16. Nginx的 MIME TYPE问题导致的mjs文件加载出错的问题解决
  17. flv视频播放demo
  18. 还在使用Postman吗?out了兄弟,快来解锁Apifox这款国产化API工具吧
  19. Centos7搭建Squid代理服务器
  20. 《Restricted Boltzmann Machines for Collaborative Filtering》理解与资料整理

热门文章

  1. 电商篇 | 公众号对接商城+微社区,强强联合!
  2. Trait ‘Configuration‘ is abstract; cannot be instantiated
  3. Windows服务器远程桌面不能复制粘贴的解决方法
  4. 风云lua分析-Lua GC 的源码剖析 (2)
  5. 非侵入式负荷监测(NILM):分类与回归,单目标与多目标
  6. angular官网教程第7个HTTP,找不到angular-in-memory-web-api
  7. 发改委:发布产业结构调整指导目录征求意见稿,增加新能源汽车充电设施建设
  8. php拦截登录页面跳转页面,PHP未登录自动跳转到登录页面
  9. logback-spring.xml模板LOG_HOME说明
  10. 基于Andriod的温湿度检测超声波测量