前言

初次接触mybatis plus是17年末,当时的版本是2.0+,在那之前公司使用的mybatis框架是tk.mybatis,也是衍生于mybatis的一款扩展框架。当时拿mybatis plus与tk相比虽然觉得plus功能已经足够强大了(如逻辑删除、sql打印插件、分页插件、雪花算法生成id等),但plus到了3.0之后新增的函数式编程才让我觉得开发者的体验质变版的提升,不会再出现字段输错的问题(注意换行,观感更强),具体可到官网网站查看,国人开源,文档也很详细完善,就不在此介绍了。

tk.mybatis与mybatis的代码生成器相同,都是通过maven插件+配置文件或IDE插件+配置文件生成,而mybatis-plus则需新建一个生成项目去生成,不同数据库的生成都要重新配置,对于我而言这2种都十分麻烦,于是开始从对mybatis-plus的生成源码进行更改后转成了将生成源码更改并集成为maven插件。

生成流程

虽然市面上也有不少生成器框架,连前端vue页面都生成了的都有,但习惯了前后端分离的我只需要后端页面(没有艺术感的我对样式敬而远之),且还想生成器可以根据自己的扩展模板(如常量类、Manager层、VO或DTO)去生成文件。后文介绍的框架并不一定适用于大家的需求,但大家可以了解下生成的流程,因为万变不离其宗,思想总有相同[doge]:

1.设定各层(Entity、Constant、DAO、Service等)模板文件

2.JDBC连接数据库获取相关表信息并转成相应类(如Table存储表信息,TableField存储字段信息)

3.遍历数据库表信息类对模板文件进行填充

模板文件:文件中通过特定范式表示动态内容,通过外部设定范式值进行范式替换填充以获得目标文件样式

干货时间

先说下一开始造这货的主要目的(也是这货的功能):

  • 由于项目Root模块下的各子模块可能负责的业务不同,即连接的数据库不同,所以每个模块都想配置一个生成器,配置也必须简单
  • 生成的位置必须易于提取
  • 由于负责其他业务的同事可能需要了解我负责业务的一些信息或常量,但他不一定了解我当前负责业务的常量划分(如商品库存的常量是放到商品的常量类中还是商品库存的常量类中,如果是放到商品常量类中会不会由于不了解误用了商品类的),于是决定通过傻瓜式生成常量类,只要数据库表字段含特定的常量范式【如:删除(YES:1-已删除,NO:0-未删除)】,就可以生成字段所属表的常量类
  • 文件模板必须可以自定义与扩展(如其它层Manager、DTO等模板文件)

作为一个生成工具没必要考虑模板框架的性能问题,且只需对模板语法略知一二就可配置模板文件,所以生成器也就从mybatis plus原支持的模板Velocity与Freemarker中随便选了个Freemarker。


快速开始

  • 添加maven插件依赖
  • 执行结果

生成的文件会放到当前项目模块的targer/generated-sources目录下,上图中删除字段常量范式为:删除(YES:1-已删除,NO:0-未删除),生成的常量结果如上图,如果字段是字符串范式为:状态(ENABLE-启用,DISABLE-禁用),则将无视commentPattern配置生成上图效果。当时达到目的效果,唔.....

更多配置项

扩展配置项挺多的,如:

  • 覆盖插件原有的各层ftl模板文件(templates子标签xxxPattern、xxxPath)
  • 自定义扩展模板文件templates子标签cusoms)
  • 不生成特定层文件
  • ......

更多配置项可到源码地址查看文档,这里就不多BB啦。造出来的轮子虽然不适用于所有人,但制造过程的思想希望还是能对大家有点用的。

附:看过我之前swagger2-spring-boot-starer文章的条友们应该都知道github上框架的源码地址是https://github.com/{groupId最后位}/{artifactId}这个小技巧啦,在该文章中 groupId最后位 = wilson-he,artifactId=generator-maven-plugin,gitee上也是同理,只是地址前缀改为https://gitee.com/

mybatis plus 动态创建表和字段_mybatis-plus maven代码生成器相关推荐

  1. Mybatis动态创建表

    背景: 项目中涉及存储数据量过大,会导致数据读取慢等问题,所以考虑动态创建表来存储数据. ↓ 这里场景动态创建表,而且字段是不固定的.表名和字段对应关系存储在单张表中! 解释: 创建表涉及到数据类型. ...

  2. Mybatis的动态创建删除表

    Mybatis中可以使用JSTL标签 动态删除表 Mapper void deleteTable(@Param("tableName") String tableName); Ma ...

  3. python动态生成数据库表_Python-Flask:动态创建表的示例详解

    今天小编从项目的实际出发,由于项目某一个表的数据达到好几十万条,此时数据的增删查改会很慢:为了增加提高访问的速度,我们引入动态创建表. 代码如下: from app_factory import ap ...

  4. mysql 动态 建表,mysql数据库动态创建表的实例分享

    摘要 腾兴网为您分享:mysql数据库动态创建表的实例分享,易视云3,完美root,刷机大师,手游宝等软件知识,以及清仓兔,找明星,爱普生1500w,txt完结小说全本软件,windows自带画图软件 ...

  5. A.CTable开源框架Mybatis增强自动创建表/更新表结构/实现类似hibernate共通的增删改查-mybatis-enhance-actable

    mybatis-enhance-actable-1.3.1.RELEASE 项目已更新既支持传统Spring项目也支持Springboot项目,同时支持tk.mybatis能够支持更强大的CUDR(为 ...

  6. MyBatis实体属性与表的字段不对应的解决方案

    MyBatis实体属性与表的字段不对应的解决方案 参考文章: (1)MyBatis实体属性与表的字段不对应的解决方案 (2)https://www.cnblogs.com/EasonJim/p/765 ...

  7. mysql 存储过程 动态建表_MySQL存储过程动态创建表,数据分表

    BEGIN DECLARE `@i` int(11); DECLARE `@siteCount` int(11); DECLARE `@sqlstr` VARCHAR(2560); DECLARE ` ...

  8. mysql创建表选择字段的时候下尽量小

    创建表选择字段的时候,在符合业务需求的情况下尽量小,数据类型尽量简单 数据类型尽量简单很好理解,比如,使用数字类型要比使用字符类型效率更高,因为不涉及到校对规则和字符集.而字段尽量小,说的是在满足业务 ...

  9. (解题思路)Entity Framework 如动态创建表或者列

    1.数据库中建立关于表结构信息的视图.(这个完全可以做到) 2.根据视图信息动态生成(内存.文件)edmx信息,根据edmx信息动态生成ObjectContext内容. 3.动态编译edmx及Obje ...

最新文章

  1. RT/Metro商店应用如何如何获取图片的宽高
  2. 艿艿连肝了几个周末,写了一篇贼长的 Spring 响应式 Web 框架 WebFlux!市面第二完整~
  3. java进阶08 GUI图形界面
  4. Oracle 11.2.0.3 Patchset
  5. 手机蓝绿厂终于转正了,已有“名分”!
  6. 修改sublime textd3中的注释文字颜色
  7. EJB+JSF开发示例(附源码)
  8. eclipse svn插件安装_PHP 安装
  9. LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算(二)
  10. Windows Mobile下猜数字游戏的TDD实现
  11. 苹果mac图像后期处理软件:Lightroom Classic
  12. JDBC常用API和使用
  13. 四款常见IT自动化运维工具简单介绍-行云管家
  14. 论文校对错别字检测工具
  15. matlab最优化工具箱下载,matlab emd工具箱下载
  16. 最优秀的微信小程序UI组件库
  17. 2022 年度杭州未来科技城数字经济人才编程大赛
  18. PE+windows系统+苹果网站整理
  19. 【乐理学习笔记】音符时值和拍号
  20. 国产系统-Deepin安装图文(VIP典藏2022版)

热门文章

  1. 计算机中音乐设备数字接口,多媒体cai课件制作技术复习题
  2. linux输入过的命令行,LINUX中命令行的历史记录和编辑
  3. vscode中前端vue项目详解_web前端Vue项目实战-Music
  4. Gym - 100783E
  5. 二叉树中节点的最大的距离(编程之美3.8)
  6. SDOI 2016 游戏
  7. 擠出機步進馬達的 Steps per Unit 該如何計算?
  8. Android 解决双卡双待手机解析短信异常
  9. Android 文件管理器 Android文件管理器源代码
  10. Gstreamer衬垫(pad)支持的媒体类型(三)