1. 前言

对于写Crud的老司机来说时间非常宝贵,一些样板代码写不但费时费力,而且枯燥无味。经常有小伙伴问我,胖哥你怎么天天那么有时间去搞新东西,透露一下秘诀呗。

好吧,今天就把Mybatis-plus的代码生成器分享出来,让你也成为一个优秀的时间管理大师。

2. 基本依赖

Spring BootMySQL为例,你需要下面这些依赖:

<!-- lombok 如果不使用 需要修改代码生成器的相关配置 -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>compile</scope>
</dependency>
<!-- 连接池 你可以使用其它替换掉 -->
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId>
</dependency>
<!-- mysql -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis plus starter -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- mybatis plus 生成器模块 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><scope>compile</scope><optional>true</optional>
</dependency>
<!-- 引入freemarker包 作为代码生成器引擎 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId><scope>compile</scope><optional>true</optional>
</dependency>

然后配置好你的数据库,确保数据库连接通讯畅通。

3. 定制代码生成器

这里我期望生成的目录结构是这样的:

于是我花了点时间定制了一些生成器的配置,代码如下,就是这么硬核!

package cn.felord.mybatis.util;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;
import java.util.List;
import java.util.Optional;/*** 代码生成器配置** @author felord* @since 10 :39  2018/9/9*/
public class CodeGenerator {private String dbUrl;private String userName;private String password;private String dir;private String xmlDir;private String packageName;private CodeGenerator() {}/*** The type Config builder.*/public static class ConfigBuilder {private String dbUrl;private String userName;private String password;private String dir;private String xmlDir;private String packageName;/*** Db url config builder.** @param dbUrl the db url* @return the config builder*/public ConfigBuilder dbUrl(final String dbUrl) {this.dbUrl = dbUrl;return this;}/*** User name config builder.** @param userName the user name* @return the config builder*/public ConfigBuilder userName(final String userName) {this.userName = userName;return this;}/*** Password config builder.** @param password the password* @return the config builder*/public ConfigBuilder password(final String password) {this.password = password;return this;}/*** Dir config builder.** @param dir the dir* @return the config builder*/public ConfigBuilder dir(final String dir) {this.dir = dir;return this;}/*** Dir config builder.** @param xmlDir the dir* @return the config builder*/public ConfigBuilder xmlDir(final String xmlDir) {this.xmlDir = xmlDir;return this;}/*** Package name config builder.** @param packageName the package name* @return the config builder*/public ConfigBuilder packageName(final String packageName) {this.packageName = packageName;return this;}/*** Build code generator.** @return the code generator*/public CodeGenerator build() {CodeGenerator generator = new CodeGenerator();generator.dbUrl = Optional.of(this.dbUrl).get();generator.userName = Optional.of(this.userName).get();generator.password = Optional.of(this.password).get();generator.dir = Optional.of(this.dir).get();generator.xmlDir = Optional.of(this.xmlDir).get();generator.packageName = Optional.of(this.packageName).get();return generator;}}/*** Code.** @param tableNames the table names*/public void code(String... tableNames) {codingMysql(true, false, true, this.dbUrl, this.userName, this.password, this.dir, this.xmlDir, this.packageName, tableNames);}/**** 生成器核心部分** @param serviceNameStartWithI 是否前缀I* @param createController      是否生成controller* @param useLombok             是否使用 lombok* @param dbUrl                 数据库连接* @param username              用户名称* @param password              密码* @param outDir                输出目录* @param xmlDir                xml 文件目录* @param packageName           包路径* @param tableNames            表名称*/private static void codingMysql(boolean serviceNameStartWithI,boolean createController,boolean useLombok,String dbUrl,String username,String password,String outDir,String xmlDir,String packageName,String... tableNames) {GlobalConfig config = new GlobalConfig();DataSourceConfig dataSourceConfig = new DataSourceConfig();
//        数据库类型 这里使用 mysqldataSourceConfig.setDbType(DbType.MYSQL).setUrl(dbUrl).setUsername(username).setPassword(password)
//                驱动名称  这里使用mysql.setDriverName("com.mysql.jdbc.Driver");// 自定义xml输出路径InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};List<FileOutConfig> focList = new ArrayList<>();
//        你也可以定制 xml 的模板focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义xml文件的路径return xmlDir + "/mapper/" + tableInfo.getMapperName() + StringPool.DOT_XML;}});cfg.setFileOutConfigList(focList);//        策略配置项StrategyConfig strategyConfig = new StrategyConfig();strategyConfig.setCapitalMode(false)
//                是否使用 lombok.setEntityLombokModel(useLombok)
//                下划线转驼峰.setNaming(NamingStrategy.underline_to_camel)//修改替换成你需要的表名,多个表名传数组.setInclude(tableNames);
//        使用 AR 模式config.setActiveRecord(true)
//                设置头注释的 author.setAuthor("system")
//                项目输出路径.setOutputDir(outDir)
//                是否覆盖已经生成的同名文件.setFileOverride(true)
//                雪花算法生成id.setIdType(IdType.ASSIGN_ID)
//                是否使用缓存.setEnableCache(false)
//                是否生成 xml 中的 基础 resultMap.setBaseResultMap(true);if (!serviceNameStartWithI) {
//            Service 层的 通用格式后缀config.setServiceName("%sService");}
//             实体类包名PackageConfig packageConfig = new PackageConfig().setParent(packageName).setEntity("entity");TemplateConfig templateConfig = new TemplateConfig().setXml(null);
//        这里选择不生成 controller  实际上 生成的大多不符合我们需要  到服务层就行了if (!createController) {templateConfig.setController(null);}
//        整合起来运行new AutoGenerator().setGlobalConfig(config).setTemplateEngine(new FreemarkerTemplateEngine()).setDataSource(dataSourceConfig).setStrategy(strategyConfig).setPackageInfo(packageConfig).setCfg(cfg).setTemplate(templateConfig).execute();}}

如果我生成的目录结构能够满足你的需要,那就巧了,直接拿去用;如果不满足需要,你可以按照注释的说明进行微调。18年搞的用了好几年,没出过什么乱子。

4. 代码生成器的使用

使用起来非常简单,确保数据库能够使用JDBC连接成功,写个main方法,配置一下,跑起来就是了:

/*** @author felord.cn* @since 11:34**/
public class AutoCoding {public static void main(String[] args) {//          maven 工程 main 包的全路径final String mainDir = "C:IdeaProjectsbc-recylingsrcmain";CodeGenerator.ConfigBuilder builder = new CodeGenerator.ConfigBuilder();CodeGenerator codeGenerator = builder
//                数据库连接.dbUrl("jdbc:mysql://localhost:3306/test")
//                账户.userName("root")
//                密码.password("123456")// 生成类位置.dir(mainDir + "java")// 生成xml 位置.xmlDir(mainDir + "resources")// 包引用路径.packageName("cn.felord.mybatis").build();//根据表生成后台代码codeGenerator.code("user_info");}
}

然后代码就生成了,是不是非常的好用?恭喜你获得了 时间管理大师 荣誉称号。

切记不要炫耀,否则需求加倍。

5. 总结

虽然好用,但是建议新手不要使用,多手写一下代码。另外复杂的SQL还是建议自己写,多锻炼写SQL的能力。如果你在使用中有什么问题,可以私信我进行沟通。

关注微信公众号:Felordcn 获取更多干货

mybatisplus代码生成器_想做时间管理大师?你可以试试Mybatis Plus代码生成器相关推荐

  1. 学完 CompletionService,可以做时间管理大师?

    作者 | why技术 来源 | why技术(ID:hello_hi_why) 荒腔走板 老规矩,先荒腔走板聊聊其他的. 上面这图是上周六,成都叁缺壹演唱会的现场.正在唱歌的这个男人叫做李志.去年他因为 ...

  2. 想成为时间管理大师?试试番茄工作法!(内含 Python 实现)

    这是「进击的Coder」的第 709 篇技术分享 作者:Ckend 来源:Python 实用宝典 " 阅读本文大概需要 5 分钟. " 番茄工作法,是一种时间管理方法.掌握了它,或 ...

  3. 想成为时间管理大师?试试番茄工作法!(内含Python实现)

    番茄工作法,是一种时间管理方法.掌握了它,或许你就能成为时间管理大师. 番茄工作法有五个基本步骤: 1.决定待完成的任务 2.设定番茄工作法定时器至 n 分钟 (通常为25分钟) 3.持续工作直至定时 ...

  4. 想参加多人运动?并行流(ParallelStream)模式教你成为时间管理大师

    目的 提高程序运行效率, 减少响应时间或者增加吞吐量 例子代码 最近罗*祥, 福报厂P12 jf 引起了大家的关注, 二位都是因为私人生活问题, 搞的微博程序员天天加班加服务器, 让我等吃了一个又一个 ...

  5. 不同时区时间戳是一样的吗_读完预科也能直升二年级?一不小心就成了时间管理大师!...

    在规划留学的时候,除了会考虑学校.专业.城市等等以外,很多同学都会考虑到时间. 这个项目要读多少年? 我要去先去法国读一年语言或者预科吗? 毕竟,每多读一年,毕业的时候就再大一岁: 每多读一年,在法国 ...

  6. 锁屏界面已由组织隐藏或管理_学会这些冷门电脑使用技巧,你也能当“时间管理大师”...

    工作学习过程中,很多不为人知的冷门技巧能够极大地提升办事效率.今天道客君就简单分享一波,学会了你也能上榜成为"时间管理大师". 看完觉得不错可以一键分享.点赞噢--- PART 0 ...

  7. 产品经理日常思考复盘:产品经理想做出好产品,先成为时间管理大师

    这是小胖的第155篇原创文章.本文2378字,阅读大概需要3分钟 . 作者:小胖  Punkboy ; 编辑:小胖  Punkboy 过去的一段新工作让自己又对产品经理这份工作有了一些不同的思考,趁着 ...

  8. 实用向Time相关模块 - 成为python时间管理大师吧

    前言 大家好,我是Samaritan. Python中有不少基础又实用的模块,甚至是无需安装的标准库.其中大家最先想到的可能就是time了,反正我第一个接触的模块和用法就是: import time ...

  9. 你离时间管理大师,就差这副眼镜了

    鱼羊 贾浩楠 发自 凹非寺 量子位 报道 | 公众号 QbitAI 你离时间管理大师,只差这副黑科技眼镜了. 只要249美元--1702元人民币. 最近,这款名为Specs的智能眼镜,出现在了众筹网站 ...

最新文章

  1. list extend 和 append
  2. MySQL中定义fk语句_MySQL基础篇/第3篇:MySQL基本操作语句.md · qwqoo/MySQL-Review - Gitee.com...
  3. iOS开发指南 从Hello World到App Store上架 第5版
  4. 网络运维之计算机端口
  5. lua中清空目录和递归创建目录
  6. Unity3d AR 增强现实技术列表(2016年3月31日更新)
  7. Python统计代码运行时间
  8. 简约清新二次元引导个人主页源码
  9. 下载pdf分页和不分页代码
  10. Sibelius 8 for Mac(西贝柳斯打谱软件)中文破解版
  11. 百度AI开放平台情感分类
  12. 小强再会卢绍杰漂亮PEUGEOT
  13. 基于PyTorch的生成对抗网络入门(3)——利用PyTorch搭建生成对抗网络(GAN)生成彩色图像超详解
  14. 微信小程序拼团功能页面展示
  15. Myeclipse9.0 正式版64位JDK 之win7下的完美破解
  16. Vue3大菠萝pinia笔记
  17. 【时间之外】一个命令解决win10登录黑屏
  18. 有了这个sku分析!老板再也不用担心我不会选款备货了
  19. App详细测试流程及测试点
  20. APP安全性测试总结-移动APP安全测试

热门文章

  1. Docker版本(三)
  2. Python开发以太坊智能合约指南(web3.py)
  3. 《JavaScript高级程序设计》第8-9章
  4. 快速开发平台网格部件合并单元格。
  5. Scrum失败/成功案例分析
  6. 《陶哲轩实分析》部分勘误
  7. Cisco路由器安全配置命令
  8. 更改WebBrowser控件的用户代理
  9. linux avd 界面,Android Studio创建AVD
  10. 阿里资深技术工程师: 程序员怎样快速成长?