前言
在基于mybatis的开发模式中,很多开发者还会选择mybatis-plus来辅助功能开发,以此提高开发的效率。虽然mybatis也有代码生成的工具,但mybatis-plus由于在mybatis基础上做了一些调整,因此,常规的生成工具生成的代码还有一些不太符合预期。而且对于多数据库的支持不是很好。
因此,我们需要一款支持高度定制化,带图形ui页面,能适配多数数据库的基础程序生成框架。
文章通过实例集成的方式来详细讲解mybatis-plus-generator-ui,感兴趣的朋友可以自己clone下来,也可以自己进行扩展自定义。
一、mybatis-plus-generator-ui是什么?
它是对mybatis-plus-generator进行封装,通过web ui快速生成兼容spring boot,mybatis-plus框架的各类业务代码。提供交互式的web ui用于生成兼容mybatis-plus框架的相关功能代码,包括entity、mapper、mapper.xml、service、controller等,可以自定义模板以及各类输出参数,也可通过sql查询语句直接生成代码。
功能列表:
table查询: 查询配置的关系型数据库表的列表查询。
输出配置: 对需要生成的相关代码,比如entity、mapper、servcie、controller等代码模板信息进行配置,用于在转换时调用。
项目导入: 可以导入其它项目配置好的信息给本项目使用。
下载模板: 支持本项目配置的模板信息下载后共享。
策略配置: 直接定义各种文件的生成策略。
模板上传: 支持从别的项目中下载模板,同上传供本项目使用。
sql输入上传: 支持将查询语句直接上传或者复制到输入框中。
sql代码生成: 基于sql脚本生成相应的代码。
二、 mybatis-plus-generator-ui怎么用?
mybatis-plus-generator-ui提供以jar包的形式为外部项目提供服务,通过配置的数据库配置去读取数据库的配置信息,并通过web ui的方式提供给开发者使用。mybatis-plus-generator-ui支持postgre_sql、oracle、db2、mysql、sqlserver等常见的关系型数据库。
1、maven pom引入
4.0.0 com.yelang mybatis-plus-generator-ui-case 0.0.1-snapshot com.github.davidfantasy mybatis-plus-generator-ui 1.4.5 org.postgresql postgresql 42.2.25
2、新建程序入口,以main函数的方式运行
mybatis-plus-generator-ui在1.4.0版本之后,可支持将geberatoruiserver独立部署为一个单独的spring boot项目,通过页面指定目标项目根目录的方式为多个项目提供源码生成服务。这种方式适用于有多个项目库需要独立进行开发的模式。实例关键代码如下:
package com.yelang; import com.github.davidfantasy.mybatisplus.generatorui.generatorconfig;import com.github.davidfantasy.mybatisplus.generatorui.mybatisplustoolsapplication;import com.github.davidfantasy.mybatisplus.generatorui.mbp.nameconverter; public class generatormain { public static void main(string[] args) { generatorconfig config = generatorconfig.builder().jdbcurl(jdbc//127.0.0.1:5432/ghyapp) .username(ghy01).password(ghy01).driverclassname(org.postgresql.driver) // 数据库schema,postgre_sql,oracle,db2类型的数据库需要指定 // .schemaname(mybusiness) // 如果需要修改各类生成文件的默认命名规则,可自定义一个nameconverter实例,覆盖相应的名称转换方法: .nameconverter(new nameconverter() { /** * 自定义service类文件的名称规则 */ public string servicenameconvert(string tablename) { return this.entitynameconvert(tablename) + service; } /** * 自定义controller类文件的名称规则 */ public string controllernameconvert(string tablename) { return this.entitynameconvert(tablename) + action; } }).basepackage(com.github.davidfantasy.mybatisplustools.example).port(8068).build(); mybatisplustoolsapplication.run(config); } }
在上面的配置中,我们连接的示例数据库是postgersql,需要在maven中定义相应的驱动程序,并且在上述代码中正确配置相应的类。最后指定了程序的运行端口为8086,这种运行方式跟springboot非常相似。
3、实例运行
运行以上的main方法,在控制台可以看到以下输出即为成功部署。
在输出的日志中,可以看到程序的运行端口,以及默认的模板目录地址。
三、mybatis-plus-generator-ui代码生成
1、table的查询和浏览
可以直接浏览和查询配置的数据源的数据表信息,可选择一个或多个生成模板代码。
2、输出配置
内置entity、mapper、service、controller等6种类型代码的模板配置,可以上传模板进行替换,并修改各类参数,配置参数已经按照影响的文件类型重新进行了分类,并加入了部分文本说明;也可以自行添加其它类型的自定义输出文件。所有的配置项都会按照项目包名进行保存,只需一次性设置就可以了。
3、策略配置
将每次生成代码时可能变动的内容加入到代码生成选项中,方便调整每次的生成策略,比如:是否覆盖原文件,生成文件的种类等等:
4、sql配置生成
通过输入查询sql,可自动在mapper(xml及java)中生成对应的查询方法,dto对象和resultmap(结果集映射配置)
5、代码生成
四、自定义扩展
1、相关模板调整
在相关的页面中,可以进行相应的调整,在对应的btl模板中下载对应文件的具体模板,使用文本工具打开,直接修改源代码,文中取一种方式示例,其它方式一样。
2、代码层级的配置
在一些团队中,肯定对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目录下,进行相应的扩展开发。
修改完成后,需要另行编译srcfrontend中的静态资源(源码中不包含已编译的页面),在srcfrontend文件夹中执行:
yarn installyarn run build
五、总结
以上就是今天要讲的内容,本文简要介绍一款基于mybatis-plus的代码自助生成器。
FlexRay总线控制器和TC1796的MLI接口设计
车规电容:KEMET全新Y2安规电容的介绍
校园安防监控系统的功能特点及建设应用
为物联网应用而生的零功耗红外探测器
自动点餐电容触摸屏云上触摸屏为您设计
介绍一款基于Mybatis-Plus的代码自助生成器
又近又远”的人工智能未来,到底将如何发展?
海淘需谨慎!户外运动品牌Kathmandu网上商店遭黑客攻击
电磁调速电机老是烧电机怎么回事 如何防止电磁调速电机被烧毁
异质锂合金界面实现稳定的锂电锡箔负极
三相电为什么不用零线
iphone8什么时候上市?苹果最新消息:苹果新机或有三款,无线充电和防水成标配,OLED屏幕版售价或上6800!
LED轨道射灯生产步骤及选购方法介绍
智慧路灯杆灯随车动应用方案
三星Note8发布会时间确定:定档8月28号,配置/价格/真机谍照/高清壁纸大曝光,你可不能再炸了啊!
数据闭环,智能驾驶下半场的制胜法宝
中红外带间级联激光器的研究进展
大众T-Roc最新消息:大众推出全新入门级越野大众T-Roc,起售价12万!
欧洲国家在4G可用性体验方面占主导地位
巴彦高勒煤矿选煤厂项目电力监控系统的设计与应用