当前位置: 首页 > 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
http://www.lryc.cn/news/24465.html

相关文章:

  • 李迟2023年02月工作生活总结
  • 【Python百日进阶-Web开发-Vue3】Day542 - Vue3 商城后台 02:Windi CSS 与 Vue Router4
  • Jupyter Lab | “丢下R,一起来快乐地糟蹋服务器!”
  • 分页与分段
  • 【UE4 】制作螺旋桨飞机
  • 五.家庭:亲情背后有理性
  • 【Leedcode】栈和队列必备的面试题(第三期)
  • 《图机器学习》-GNN Augmentation and Training
  • 【Node.js算法题】数组去重、数组删除元素、数组排序、字符串排序、字符串反向、字符串改大写 、数组改大写、字符替换
  • Win10系统开始菜单无法点击解决方法分享
  • libmodbus从linux访问window上的服务超时问题
  • 挑战图像处理100问(26)——双线性插值
  • NXP iMX8系列处理器Pin Multiplexing定义说明
  • 用Python的Supervisor進行進程監控以及自動啓動
  • Centos和Window系统下Frp内网穿透
  • 春招冲刺(四):flex布局面试题总结
  • 我的 System Verilog 学习记录(7)
  • canvas复习笔记(绘制直线、矩形、圆形、圆弧)
  • LeetCode 653. 两数之和 IV - 输入二叉搜索树
  • 【Datawhale图机器学习】图神经网络
  • 【项目精选】 javaEE采购管理系统(论文+视频+源码)
  • 【Servlet篇2】创建一个web项目
  • Allegro如何手动让静态铜皮避让过孔操作指导
  • Java使用SpringBoot的Filter来扩展管道请求
  • 「JVM 高效并发」锁优化
  • 当园区物流遇上云计算,会发生什么事情?
  • 作为测试开发岗的面试官,我都是怎么选人的?
  • android事件分发机制源码分析
  • 今天,小灰37岁了!
  • 基于.NET 7 + iView 的前后端分离的通用后台管理系统开源框架