当前位置: 首页 > news >正文

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.使用方法

  1. 创建maven工程引入maven的相关依赖,注意scope只需要写test就可以了

    image-20230301142424097

  2. 引入相关依赖

	<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>
  1. 在项目的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还包含一些基本的配置参数以及各个可扩展的接口,比如自定义模板参数,具体的说明可查看源码注释。

  1. 运行该启动类,启动一个Generator Server。然后访问http://localhost:8068(端口是可配置的)即可进入到管理界面。

image-20230301142617929

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工程中

image-20230301142849445

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

image-20230301143049265

image-20230301143233158

image-20230301143315419

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

image-20230301143347396

动态sql生成功能

image-20230301143522096

3.自定义扩展

  • 相关模板调整

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

image-20230301143734090

image-20230301143814081

  • 代码层级的配置

在一些团队中,肯定对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 开发提速器&#xff1a;mybatis-plus-generator-ui 1.简介 github地址 &#xff1a; https://github.com/davidfantasy/mybatis-plus-generator-ui 提供交互式的Web UI用于生成兼容mybatis-plus框架的相关功能代码&#xff0c;包括Entity,Mapper,Mapper.xml,Se…...

李迟2023年02月工作生活总结

本文为 2023 年 2 月工作生活总结。 研发编码 Linux Go 某工程使用到一些数据的统计&#xff0c;为方便&#xff0c;使用 map 存储数量&#xff0c;由于其是无序的&#xff0c;输出的列表顺序不固定&#xff0c;将其和历史版本对比不方便&#xff0c;所以需要将 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,一起来快乐地糟蹋服务器!”

写作前面 工具永远只是为了帮助自己提升工作效率 —— 沃兹基硕得 所以说&#xff0c;为什么要使用jupyterlab呢&#xff1f;当然是因为基于服务器来处理数据就可以使劲造了&#xff0c;而且深切地感觉到&#xff0c;“R这玩意儿是人用的吗”。 jupyter-lab | mamba安装以及…...

分页与分段

前面我们分析了虚拟地址和物理地址 我们这里进行一个简单的分析 这个是程序运行时的地址映射 那么这些碎片&#xff0c;我们现在的操作系统究竟如何处理呢&#xff1f; 我们再引入一个实际问题 我们如何把右边的进程p塞入左边的内存空间里面 有一种方法将p5kill掉&#xff…...

【UE4 】制作螺旋桨飞机

一、素材资源链接&#xff1a;https://pan.baidu.com/s/1xPVYYw05WQ6FABq_ZxFifg提取码&#xff1a;ivv8二、课程视频链接https://www.bilibili.com/video/BV1Bb411h7qw/?spm_id_from333.337.search-card.all.click&vd_source36a3e35639c44bb339f59760641390a8三、最终效果…...

五.家庭:亲情背后有理性

5.1经济学帝国主义【单选题】以下属于经济学研究范围的是&#xff08; &#xff09;。A、约束最优化B、稀缺资源配置C、价格竞争与非价格竞争D、以上都对我的答案&#xff1a;D【多选题】为何有学科分类?A、分工B、专业化C、累积创新D、科技进步我的答案&#xff1a;ABCD【判断…...

【Leedcode】栈和队列必备的面试题(第三期)

【Leedcode】栈和队列必备的面试题&#xff08;第三期&#xff09; 文章目录【Leedcode】栈和队列必备的面试题&#xff08;第三期&#xff09;一、题目&#xff08;用两个栈实现队列&#xff09;二、思路图解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 之前的假设&#xff1a; Raw input graph computational graph&#xff0c;即原始图等于计算…...

【Node.js算法题】数组去重、数组删除元素、数组排序、字符串排序、字符串反向、字符串改大写 、数组改大写、字符替换

文章目录前言数组去重数组删除元素数组排序字符串排序字符串反向字符串改大写数组改大写字符替换字符替换运行结果&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/8ac1c15e6f0944cdb8ca50bcb844182a.png)总结前言 本期文章是js的一些算法题&#xff0c;包括…...

Win10系统开始菜单无法点击解决方法分享

Win10系统开始菜单无法点击解决方法分享。有用户电脑一开机之后&#xff0c;就出现了开始菜单无法正常点击的情况。我们很多设置项都是通过开始菜单来进行开启的。那么这个功能无法点击了怎么办呢&#xff1f;接下来我们一起来看看以下的解决方法分享吧。 方法一&#xff1a; 1…...

libmodbus从linux访问window上的服务超时问题

window&#xff1a;使用EasyModbusTCP Server Simulator 作为服务。linux:程序&#xff1a;#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)——双线性插值

双线性插值是一种常用的图像插值方法&#xff0c;用于将低分辨率的图像放大到高分辨率。它基于一个假设&#xff1a;在两个相邻像素之间的值是线性的。 双线性插值考察444邻域的像素点&#xff0c;并根据距离设置权值。虽然计算量增大使得处理时间变长&#xff0c;但是可以有效…...

NXP iMX8系列处理器Pin Multiplexing定义说明

By Toradex秦海1). 简介为了提高处理器的设计灵活性和可用性&#xff0c;NXP的所有i.MX系列处理器都配备了基于 IOMUX Controller (IOMUXC)和IOMUX来使能Pin Mux功能&#xff0c;使得一个特定的IO管脚可以选择不同的可能多达8种的功能定义模块(ALT0, ALT1, ALT2, ALT3...)&…...

用Python的Supervisor進行進程監控以及自動啓動

python 限制同一时间只执行一个 作服務器端開發的同窗應該都對進程監控不會陌生&#xff0c;最近剛好要更換 uwsgi 爲 gunicorn&#xff0c;而gunicorn又剛好有這麼一章講進程監控&#xff0c;因此多研究了下。python 結合以前在騰訊工做的經驗&#xff0c;也會講講騰訊的服務…...

Centos和Window系统下Frp内网穿透

frp 是一个高性能的内网穿透的反向代理软件&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等常见协议(TCP最常用)&#xff0c;可以将处于局域网或者家用电脑主机、办公电脑主机通过中转服务器的方式暴露在公网里&#xff0c;使用户可以通过访问公网的IP&#xff08;域名&#xff09;…...

春招冲刺(四):flex布局面试题总结

flex布局面试题总结 Q1&#xff1a;什么是弹性盒布局&#xff1f; 特点&#xff1a;让元素对不同屏幕尺寸和不同显示设备做好适应。在响应式网站表现较好。 一、容器属性 Q2&#xff1a;display:flex和display:inline-flex的作用 使容器变成弹性布局&#xff0c;为其子元素…...

我的 System Verilog 学习记录(7)

引言 本文简单介绍 SystemVerilog 语言的 testbench 组件间通信和数据交互。 前文链接&#xff1a; 我的 System Verilog 学习记录&#xff08;1&#xff09; 我的 System Verilog 学习记录&#xff08;2&#xff09; 我的 System Verilog 学习记录&#xff08;3&#xff…...

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 - 输入二叉搜索树 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 给定一个二叉搜索树 rootrootroot 和一个目标结果 kkk&#xff0c;如果二叉搜索树中存在两个元素且它们的和等于给定的目标结果&#xff0c;则返回 truetruetrue。 示例 1&#xf…...

从防火墙到AI:企业级网络异常检测方案选型指南(2024最新版)

从防火墙到AI&#xff1a;企业级网络异常检测方案选型指南&#xff08;2024最新版&#xff09; 当某跨国零售企业遭遇持续3天的DDoS攻击导致线上业务瘫痪时&#xff0c;技术团队发现传统防火墙规则库已48小时未更新&#xff1b;而当某金融机构因AI模型误判正常促销流量为异常导…...

debian 更新内核后,nvidia 驱动突然不见了,处理

nvidia 驱动通常由 dkms 来构建 安装新内核后&#xff0c; 对应 linux-headers-amd64 没有安装到&#xff0c;导致 dkms 不为新内核 构建驱动 解决办法&#xff1a; apt update apt install linux-headers-amd64 它会自动为已有的内核安装 linux 头文件 然后 用命令 dpkg-recon…...

如何彻底告别微软Edge浏览器:EdgeRemover专业卸载工具完全指南

如何彻底告别微软Edge浏览器&#xff1a;EdgeRemover专业卸载工具完全指南 【免费下载链接】EdgeRemover PowerShell script to remove Microsoft Edge in a non-forceful manner. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover 你是否曾经尝试卸载Microsof…...

电工必看:正弦交流电路中的相量法实战技巧(附计算示例)

电工必看&#xff1a;正弦交流电路中的相量法实战技巧&#xff08;附计算示例&#xff09; 在电气工程领域&#xff0c;正弦交流电路的分析是每位电工和电气工程师必须掌握的核心技能。面对复杂的电路计算&#xff0c;传统的三角函数解析法往往让从业者陷入繁琐的运算泥潭。相量…...

Python实现简易可信度推理引擎:用20行代码复现经典CF模型

Python实现简易可信度推理引擎&#xff1a;用20行代码复现经典CF模型 在金融风控领域&#xff0c;规则引擎的可信度评估直接影响着决策的准确性。想象一下&#xff0c;当系统需要同时处理多条相互矛盾的交易警报时&#xff0c;如何量化每条证据的可信程度&#xff1f;这正是可…...

NaViL-9B图文问答入门必看:纯文本+图像理解双模式快速上手

NaViL-9B图文问答入门必看&#xff1a;纯文本图像理解双模式快速上手 1. 认识NaViL-9B多模态模型 NaViL-9B是一款原生支持多模态交互的大语言模型&#xff0c;由专业研究团队开发。它最大的特点是能同时处理纯文本问答和图片内容理解任务&#xff0c;就像一个同时精通文字和视…...

MMC级联H桥仿真图解析:电压电流双闭环控制策略研究

MMC&#xff0c;级联H桥仿真图&#xff0c;电压电流双闭环。最近在搞MMC&#xff08;模块化多电平换流器&#xff09;的仿真&#xff0c;发现这玩意儿真是电力电子界的乐高——全靠子模块堆叠。特别是级联H桥的结构&#xff0c;玩电压合成比搭积木刺激多了。今天咱们就着电压电…...

Pixelorama扩展深度解析:3种自动化精灵图切割方案对比

Pixelorama扩展深度解析&#xff1a;3种自动化精灵图切割方案对比 【免费下载链接】Pixelorama A free & open-source 2D sprite editor, made with the Godot Engine! Available on Windows, Linux, macOS and the Web! 项目地址: https://gitcode.com/gh_mirrors/pi/Pi…...

基于STM32CubeMX的AD9850驱动开发与频率合成实战

1. 从零开始认识AD9850与STM32CubeMX 第一次接触AD9850这个芯片时&#xff0c;我完全被它的性能震撼到了——这个比指甲盖还小的芯片&#xff0c;居然能产生0.0291Hz分辨率的信号&#xff01;当时我正在做一个射频测试项目&#xff0c;需要生成精确的正弦波信号。市面上常见的…...

AS3935闪电传感器Arduino驱动库深度解析与工业级应用

1. 项目概述AS3935 是一款由 AMS&#xff08;现为 ams OSRAM&#xff09;推出的专用闪电检测传感器芯片&#xff0c;集成 RF 前端、数字信号处理器&#xff08;DSP&#xff09;、闪电算法引擎及 IC/SPI 接口&#xff0c;可实现对 40 km 范围内云地闪&#xff08;CG&#xff09;…...