Mybatis-Plus 开发提速器:mybatis-plus-generator-ui
Mybatis-Plus 开发提速器:mybatis-plus-generator-ui
1.简介
github地址 : https://github.com/davidfantasy/mybatis-plus-generator-ui
提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等 ,可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。
2.使用方法
-
创建maven工程引入maven的相关依赖,注意scope只需要写test就可以了

-
引入相关依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.davidfantasy</groupId><artifactId>mybatis-plus-generator-ui</artifactId><version>2.0.1</version><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.3.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
- 在项目的test目录新建一个启动类,代码示例如下:
package com.llp.mybatisplusgeneratorui;import com.github.davidfantasy.mybatisplus.generatorui.GeneratorConfig;
import com.github.davidfantasy.mybatisplus.generatorui.MybatisPlusToolsApplication;
import com.github.davidfantasy.mybatisplus.generatorui.mbp.NameConverter;public class GeberatorUIServer {public static void main(String[] args) {GeneratorConfig config = GeneratorConfig.builder().jdbcUrl("jdbc:mysql://127.0.0.1:3306/mybatisplus").userName("root").password("root").driverClassName("com.mysql.jdbc.Driver")//.driverClassName("com.mysql.cj.jdbc.Driver") //8.0以上版本mysql//数据库schema,MSSQL,PGSQL,ORACLE,DB2类型的数据库需要指定//.schemaName("mybatisplus")//如果需要修改entity及其属性的命名规则,以及自定义各类生成文件的命名规则,可自定义一个NameConverter实例,覆盖相应的名称转换方法,详细可查看该接口的说明:.nameConverter(new NameConverter() {/*** 自定义Service类文件的名称规则*/@Overridepublic String serviceNameConvert(String tableName) {return this.entityNameConvert(tableName) + "Service";}/*** 自定义Controller类文件的名称规则*/@Overridepublic String controllerNameConvert(String tableName) {return this.entityNameConvert(tableName) + "Controller";}})//所有生成的java文件的父包名,后续也可单独在界面上设置.basePackage("com.llp.mybatisplus")//访问端口.port(8068).build();MybatisPlusToolsApplication.run(config);}}
GeneratorConfig还包含一些基本的配置参数以及各个可扩展的接口,比如自定义模板参数,具体的说明可查看源码注释。
- 运行该启动类,启动一个Generator Server。然后访问
http://localhost:8068(端口是可配置的)即可进入到管理界面。

2.1重要更新
1.4.0 版本之后,可支持将GeberatorUIServer独立部署为一个单独的spring boot项目,通过页面指定目标项目根目录的方式为多个项目提供源码生成服务。
2.0.0 版本已经支持最新的mybatis-plus 3.5.X,才用重构后新的MBP作为代码生成引擎。
详细功能
参考https://github.com/davidfantasy/mybatis-plus-generator-ui
2.2使用演示
需求:使用mybatis-plus-generator-ui生成代码到llp-mybatisplus工程中

ps:表查询展示哪些表取决于mybatis-plus-generator-ui设置的数据库



在输出配置中可以进行生成代码的细节调整,比如实体类的逻辑删除字段、自动填充字段等

动态sql生成功能

3.自定义扩展
- 相关模板调整
在相关的页面中,可以进行相应的调整,在对应的btl模板中下载对应文件的具体模板,使用文本工具打开,直接修改源代码,文中取一种方式示例,其它方式一样。


- 代码层级的配置
在一些团队中,肯定对Mapper的定义为Dao,Controller层需要定义为Action,通过修改代码模板btl的方式是可以的,还有一种方式是通过调整内部映射的方式来进行修改。主要使用的类是NameConverter。
/**
* 自定义Service类文件的名称规则
*/
public String serviceNameConvert(String tableName) {return this.entityNameConvert(tableName) + "Service";
}/**
* 自定义Controller类文件的名称规则
*/
public String controllerNameConvert(String tableName) {return this.entityNameConvert(tableName) + "Action";
}
除了Service、Controller、Entity、FieldName都可以实现自定义的扩展。下面是NameConverter类的核心代码,这里有详细的定义。
package com.github.davidfantasy.mybatisplus.generatorui.mbp;import cn.hutool.core.util.StrUtil;
import com.github.davidfantasy.mybatisplus.generatorui.dto.Constant;
import com.google.common.base.Strings;import static com.github.davidfantasy.mybatisplus.generatorui.dto.Constant.DOT_JAVA;
import static com.github.davidfantasy.mybatisplus.generatorui.dto.Constant.DOT_XML;/*** 自定义各类名称转换的规则*/
public interface NameConverter {/*** 自定义Entity.java的类名称** @param tableName 表名称* @return*/default String entityNameConvert(String tableName) {if (Strings.isNullOrEmpty(tableName)) {return "";}tableName = tableName.substring(tableName.indexOf(StrUtil.UNDERLINE) + 1, tableName.length());return StrUtil.upperFirst(StrUtil.toCamelCase(tableName.toLowerCase()));}/*** 自定义表字段名到实体类属性名的转换规则** @param fieldName 表字段名称* @return*/default String propertyNameConvert(String fieldName) {if (Strings.isNullOrEmpty(fieldName)) {return "";}if (fieldName.contains("_")) {return StrUtil.toCamelCase(fieldName.toLowerCase());}return fieldName;}/*** 自定义Mapper.java的类名称*/default String mapperNameConvert(String tableName) {return entityNameConvert(tableName) + "Mapper";}/*** 自定义Mapper.xml的文件名称*/default String mapperXmlNameConvert(String tableName) {return entityNameConvert(tableName) + "Mapper";}/*** 自定义Service.java的类名称*/default String serviceNameConvert(String tableName) {return "I" + entityNameConvert(tableName) + "Service";}/*** 自定义ServiceImpl.java的类名称*/default String serviceImplNameConvert(String tableName) {return entityNameConvert(tableName) + "ServiceImpl";}/*** 自定义Controller.java的类名称*/default String controllerNameConvert(String tableName) {return entityNameConvert(tableName) + "Controller";}/*** 自定义其它生成文件的文件名(不包括entity,mapper.java,mapper.xml,service,serviceImpl,controller这6种)** @param fileType 在页面上输入的输出文件标识* @param tableName 关联的数据表名称名称* @return 生成文件的名称,带后缀*/default String outputFileNameConvert(String fileType, String tableName) {if (fileType.equals(Constant.FILE_TYPE_ENTITY)) {return this.entityNameConvert(tableName) + DOT_JAVA;} else if (fileType.equals(Constant.FILE_TYPE_MAPPER)) {return this.mapperNameConvert(tableName) + DOT_JAVA;} else if (fileType.equals(Constant.FILE_TYPE_MAPPER_XML)) {return this.mapperXmlNameConvert(tableName) + DOT_XML;} else if (fileType.equals(Constant.FILE_TYPE_SERVICE)) {return this.serviceNameConvert(tableName) + DOT_JAVA;} else if (fileType.equals(Constant.FILE_TYPE_SERVICEIMPL)) {return this.serviceImplNameConvert(tableName) + DOT_JAVA;} else if (fileType.equals(Constant.FILE_TYPE_CONTROLLER)) {return this.controllerNameConvert(tableName) + DOT_JAVA;}return this.entityNameConvert(tableName) + fileType;}}
mybatis-plus-generator-ui的功能非常丰富,甚至针对ui都是可以自定义修改的。如果需要定制UI的话,将代码clone下来后,进入到frontend目录下,进行相应的扩展开发。

修改完成后,需要另行编译src\frontend中的静态资源(源码中不包含已编译的页面),在src\frontend文件夹中执行:
yarn install
yarn run build
相关文章:
Mybatis-Plus 开发提速器:mybatis-plus-generator-ui
Mybatis-Plus 开发提速器:mybatis-plus-generator-ui 1.简介 github地址 : https://github.com/davidfantasy/mybatis-plus-generator-ui 提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Se…...
李迟2023年02月工作生活总结
本文为 2023 年 2 月工作生活总结。 研发编码 Linux Go 某工程使用到一些数据的统计,为方便,使用 map 存储数量,由于其是无序的,输出的列表顺序不固定,将其和历史版本对比不方便,所以需要将 key 排序再输…...
【Python百日进阶-Web开发-Vue3】Day542 - Vue3 商城后台 02:Windi CSS 与 Vue Router4
文章目录 一、WindiCSS 初始1.1 WindiCSS 是什么?1.2 为什么选择 Windi CSS?1.3. 基础用法1.4 集成二、简单按钮2.1 设置背景色2.2 设置字体颜色和上下左右padding2.3 设置圆角2.4 鼠标悬浮,颜色加深2.5 鼠标划入动画2.6 设置阴影2.7 @apply 抽离class代码到 style 块中三、…...
Jupyter Lab | “丢下R,一起来快乐地糟蹋服务器!”
写作前面 工具永远只是为了帮助自己提升工作效率 —— 沃兹基硕得 所以说,为什么要使用jupyterlab呢?当然是因为基于服务器来处理数据就可以使劲造了,而且深切地感觉到,“R这玩意儿是人用的吗”。 jupyter-lab | mamba安装以及…...
分页与分段
前面我们分析了虚拟地址和物理地址 我们这里进行一个简单的分析 这个是程序运行时的地址映射 那么这些碎片,我们现在的操作系统究竟如何处理呢? 我们再引入一个实际问题 我们如何把右边的进程p塞入左边的内存空间里面 有一种方法将p5kill掉ÿ…...
【UE4 】制作螺旋桨飞机
一、素材资源链接:https://pan.baidu.com/s/1xPVYYw05WQ6FABq_ZxFifg提取码:ivv8二、课程视频链接https://www.bilibili.com/video/BV1Bb411h7qw/?spm_id_from333.337.search-card.all.click&vd_source36a3e35639c44bb339f59760641390a8三、最终效果…...
五.家庭:亲情背后有理性
5.1经济学帝国主义【单选题】以下属于经济学研究范围的是( )。A、约束最优化B、稀缺资源配置C、价格竞争与非价格竞争D、以上都对我的答案:D【多选题】为何有学科分类?A、分工B、专业化C、累积创新D、科技进步我的答案:ABCD【判断…...
【Leedcode】栈和队列必备的面试题(第三期)
【Leedcode】栈和队列必备的面试题(第三期) 文章目录【Leedcode】栈和队列必备的面试题(第三期)一、题目(用两个栈实现队列)二、思路图解1.定义两个栈2.初始化两个数组栈3. 将数据放入pushST数组栈中4.删除…...
《图机器学习》-GNN Augmentation and Training
GNN Augmentation and Training一、Graph Augmentation for GNNs1、Feature Augmentation2、Structure augmentation3、Node Neighborhood Sampling一、Graph Augmentation for GNNs 之前的假设: Raw input graph computational graph,即原始图等于计算…...
【Node.js算法题】数组去重、数组删除元素、数组排序、字符串排序、字符串反向、字符串改大写 、数组改大写、字符替换
文章目录前言数组去重数组删除元素数组排序字符串排序字符串反向字符串改大写数组改大写字符替换字符替换运行结果: 总结前言 本期文章是js的一些算法题,包括…...
Win10系统开始菜单无法点击解决方法分享
Win10系统开始菜单无法点击解决方法分享。有用户电脑一开机之后,就出现了开始菜单无法正常点击的情况。我们很多设置项都是通过开始菜单来进行开启的。那么这个功能无法点击了怎么办呢?接下来我们一起来看看以下的解决方法分享吧。 方法一: 1…...
libmodbus从linux访问window上的服务超时问题
window:使用EasyModbusTCP Server Simulator 作为服务。linux:程序:#include <stdio.h> #include <modbus/modbus.h>int main() {modbus_t *ctx;uint16_t holding_registers[1];// Create a new Modbus TCP contextctx modbus_new_tcp(&quo…...
挑战图像处理100问(26)——双线性插值
双线性插值是一种常用的图像插值方法,用于将低分辨率的图像放大到高分辨率。它基于一个假设:在两个相邻像素之间的值是线性的。 双线性插值考察444邻域的像素点,并根据距离设置权值。虽然计算量增大使得处理时间变长,但是可以有效…...
NXP iMX8系列处理器Pin Multiplexing定义说明
By Toradex秦海1). 简介为了提高处理器的设计灵活性和可用性,NXP的所有i.MX系列处理器都配备了基于 IOMUX Controller (IOMUXC)和IOMUX来使能Pin Mux功能,使得一个特定的IO管脚可以选择不同的可能多达8种的功能定义模块(ALT0, ALT1, ALT2, ALT3...)&…...
用Python的Supervisor進行進程監控以及自動啓動
python 限制同一时间只执行一个 作服務器端開發的同窗應該都對進程監控不會陌生,最近剛好要更換 uwsgi 爲 gunicorn,而gunicorn又剛好有這麼一章講進程監控,因此多研究了下。python 結合以前在騰訊工做的經驗,也會講講騰訊的服務…...
Centos和Window系统下Frp内网穿透
frp 是一个高性能的内网穿透的反向代理软件,支持 TCP、UDP、HTTP、HTTPS 等常见协议(TCP最常用),可以将处于局域网或者家用电脑主机、办公电脑主机通过中转服务器的方式暴露在公网里,使用户可以通过访问公网的IP(域名)…...
春招冲刺(四):flex布局面试题总结
flex布局面试题总结 Q1:什么是弹性盒布局? 特点:让元素对不同屏幕尺寸和不同显示设备做好适应。在响应式网站表现较好。 一、容器属性 Q2:display:flex和display:inline-flex的作用 使容器变成弹性布局,为其子元素…...
我的 System Verilog 学习记录(7)
引言 本文简单介绍 SystemVerilog 语言的 testbench 组件间通信和数据交互。 前文链接: 我的 System Verilog 学习记录(1) 我的 System Verilog 学习记录(2) 我的 System Verilog 学习记录(3ÿ…...
canvas复习笔记(绘制直线、矩形、圆形、圆弧)
canvas 画一条直线 <body><canvasid"c"width"300"height"200"style"border: 1px solid #ccc;"></canvas> </body><script>// 2、获取 canvas 对象const cnv document.getElementById("c");…...
LeetCode 653. 两数之和 IV - 输入二叉搜索树
653. 两数之和 IV - 输入二叉搜索树 难度:easy\color{Green}{easy}easy 题目描述 给定一个二叉搜索树 rootrootroot 和一个目标结果 kkk,如果二叉搜索树中存在两个元素且它们的和等于给定的目标结果,则返回 truetruetrue。 示例 1…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
