0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

介紹一款基于Mybatis-Plus的代碼自助生成器

jf_ro2CN3Fa ? 來(lái)源:CSDN ? 2023-05-23 14:16 ? 次閱讀

前言

在基于Mybatis的開(kāi)發(fā)模式中,很多開(kāi)發(fā)者還會(huì)選擇Mybatis-Plus來(lái)輔助功能開(kāi)發(fā),以此提高開(kāi)發(fā)的效率。雖然Mybatis也有代碼生成的工具,但Mybatis-Plus由于在Mybatis基礎(chǔ)上做了一些調(diào)整,因此,常規(guī)的生成工具生成的代碼還有一些不太符合預(yù)期。而且對(duì)于多數(shù)據(jù)庫(kù)的支持不是很好。

因此,我們需要一款支持高度定制化,帶圖形UI頁(yè)面,能適配多數(shù)數(shù)據(jù)庫(kù)的基礎(chǔ)程序生成框架。

文章通過(guò)實(shí)例集成的方式來(lái)詳細(xì)講解mybatis-plus-generator-ui,感興趣的朋友可以自己clone下來(lái),也可以自己進(jìn)行擴(kuò)展自定義。

一、mybatis-plus-generator-ui是什么?

它是對(duì)mybatis-plus-generator進(jìn)行封裝,通過(guò)Web UI快速生成兼容Spring boot,mybatis-plus框架的各類(lèi)業(yè)務(wù)代碼。提供交互式的Web UI用于生成兼容mybatis-plus框架的相關(guān)功能代碼,包括Entity、Mapper、Mapper.xml、Service、Controller等,可以自定義模板以及各類(lèi)輸出參數(shù),也可通過(guò)SQL查詢(xún)語(yǔ)句直接生成代碼。

90fbcf0e-f920-11ed-90ce-dac502259ad0.png91087a60-f920-11ed-90ce-dac502259ad0.png

功能列表:

Table查詢(xún): 查詢(xún)配置的關(guān)系型數(shù)據(jù)庫(kù)表的列表查詢(xún)。

輸出配置: 對(duì)需要生成的相關(guān)代碼,比如Entity、Mapper、Servcie、Controller等代碼模板信息進(jìn)行配置,用于在轉(zhuǎn)換時(shí)調(diào)用。

項(xiàng)目導(dǎo)入: 可以導(dǎo)入其它項(xiàng)目配置好的信息給本項(xiàng)目使用。

下載模板: 支持本項(xiàng)目配置的模板信息下載后共享。

策略配置: 直接定義各種文件的生成策略。

模板上傳: 支持從別的項(xiàng)目中下載模板,同上傳供本項(xiàng)目使用。

SQL輸入上傳: 支持將查詢(xún)語(yǔ)句直接上傳或者復(fù)制到輸入框中。

SQL代碼生成: 基于SQL腳本生成相應(yīng)的代碼。

二、 mybatis-plus-generator-ui怎么用?

mybatis-plus-generator-ui提供以jar包的形式為外部項(xiàng)目提供服務(wù),通過(guò)配置的數(shù)據(jù)庫(kù)配置去讀取數(shù)據(jù)庫(kù)的配置信息,并通過(guò)Web UI的方式提供給開(kāi)發(fā)者使用。mybatis-plus-generator-ui支持POSTGRE_SQL、ORACLE、DB2、MySQL、SQLSERVER等常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù)。

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函數(shù)的方式運(yùn)行

mybatis-plus-generator-ui在1.4.0版本之后,可支持將GeberatorUIServer獨(dú)立部署為一個(gè)單獨(dú)的spring boot項(xiàng)目,通過(guò)頁(yè)面指定目標(biāo)項(xiàng)目根目錄的方式為多個(gè)項(xiàng)目提供源碼生成服務(wù)。這種方式適用于有多個(gè)項(xiàng)目庫(kù)需要獨(dú)立進(jìn)行開(kāi)發(fā)的模式。實(shí)例關(guān)鍵代碼如下:

packagecom.yelang;

importcom.github.davidfantasy.mybatisplus.generatorui.GeneratorConfig;
importcom.github.davidfantasy.mybatisplus.generatorui.MybatisPlusToolsApplication;
importcom.github.davidfantasy.mybatisplus.generatorui.mbp.NameConverter;

publicclassGeneratorMain{

publicstaticvoidmain(String[]args){
GeneratorConfigconfig=GeneratorConfig.builder().jdbcUrl("jdbc//127.0.0.1:5432/ghyapp")
.userName("ghy01").password("ghy01").driverClassName("org.postgresql.Driver")
//數(shù)據(jù)庫(kù)schema,POSTGRE_SQL,ORACLE,DB2類(lèi)型的數(shù)據(jù)庫(kù)需要指定
//.schemaName("myBusiness")
//如果需要修改各類(lèi)生成文件的默認(rèn)命名規(guī)則,可自定義一個(gè)NameConverter實(shí)例,覆蓋相應(yīng)的名稱(chēng)轉(zhuǎn)換方法:
.nameConverter(newNameConverter(){
/**
*自定義Service類(lèi)文件的名稱(chēng)規(guī)則
*/
publicStringserviceNameConvert(StringtableName){
returnthis.entityNameConvert(tableName)+"Service";
}

/**
*自定義Controller類(lèi)文件的名稱(chēng)規(guī)則
*/
publicStringcontrollerNameConvert(StringtableName){
returnthis.entityNameConvert(tableName)+"Action";
}
}).basePackage("com.github.davidfantasy.mybatisplustools.example").port(8068).build();

MybatisPlusToolsApplication.run(config);

}

}

在上面的配置中,我們連接的示例數(shù)據(jù)庫(kù)是PostgerSQL,需要在Maven中定義相應(yīng)的驅(qū)動(dòng)程序,并且在上述代碼中正確配置相應(yīng)的類(lèi)。最后指定了程序的運(yùn)行端口為8086,這種運(yùn)行方式跟SpringBoot非常相似。

3、實(shí)例運(yùn)行

運(yùn)行以上的main方法,在控制臺(tái)可以看到以下輸出即為成功部署。

9111ed5c-f920-11ed-90ce-dac502259ad0.png

在輸出的日志中,可以看到程序的運(yùn)行端口,以及默認(rèn)的模板目錄地址。

三、mybatis-plus-generator-ui代碼生成

1、Table的查詢(xún)和瀏覽

可以直接瀏覽和查詢(xún)配置的數(shù)據(jù)源的數(shù)據(jù)表信息,可選擇一個(gè)或多個(gè)生成模板代碼。

911aea60-f920-11ed-90ce-dac502259ad0.png

2、輸出配置

內(nèi)置Entity、Mapper、Service、Controller等6種類(lèi)型代碼的模板配置,可以上傳模板進(jìn)行替換,并修改各類(lèi)參數(shù),配置參數(shù)已經(jīng)按照影響的文件類(lèi)型重新進(jìn)行了分類(lèi),并加入了部分文本說(shuō)明;也可以自行添加其它類(lèi)型的自定義輸出文件。所有的配置項(xiàng)都會(huì)按照項(xiàng)目包名進(jìn)行保存,只需一次性設(shè)置就可以了。

9122238e-f920-11ed-90ce-dac502259ad0.png

3、策略配置

將每次生成代碼時(shí)可能變動(dòng)的內(nèi)容加入到代碼生成選項(xiàng)中,方便調(diào)整每次的生成策略,比如:是否覆蓋原文件,生成文件的種類(lèi)等等:

912962b6-f920-11ed-90ce-dac502259ad0.png

4、SQL配置生成

通過(guò)輸入查詢(xún)SQL,可自動(dòng)在Mapper(Xml及Java)中生成對(duì)應(yīng)的查詢(xún)方法,DTO對(duì)象和ResultMap(結(jié)果集映射配置)

9132b488-f920-11ed-90ce-dac502259ad0.png

5、代碼生成

91379962-f920-11ed-90ce-dac502259ad0.png913dc148-f920-11ed-90ce-dac502259ad0.png

四、自定義擴(kuò)展

1、相關(guān)模板調(diào)整

在相關(guān)的頁(yè)面中,可以進(jìn)行相應(yīng)的調(diào)整,在對(duì)應(yīng)的btl模板中下載對(duì)應(yīng)文件的具體模板,使用文本工具打開(kāi),直接修改源代碼,文中取一種方式示例,其它方式一樣。

9148749e-f920-11ed-90ce-dac502259ad0.png914e860e-f920-11ed-90ce-dac502259ad0.png

2、代碼層級(jí)的配置

在一些團(tuán)隊(duì)中,肯定對(duì)Mapper的定義為Dao,Controller層需要定義為Action,通過(guò)修改代碼模板btl的方式是可以的,還有一種方式是通過(guò)調(diào)整內(nèi)部映射的方式來(lái)進(jìn)行修改。主要使用的類(lèi)是NameConverter。

/**
*自定義Service類(lèi)文件的名稱(chēng)規(guī)則
*/
publicStringserviceNameConvert(StringtableName){
returnthis.entityNameConvert(tableName)+"Service";
}

/**
*自定義Controller類(lèi)文件的名稱(chēng)規(guī)則
*/
publicStringcontrollerNameConvert(StringtableName){
returnthis.entityNameConvert(tableName)+"Action";
}

除了Service、Controller、Entity、FieldName都可以實(shí)現(xiàn)自定義的擴(kuò)展。下面是NameConverter類(lèi)的核心代碼,這里有詳細(xì)的定義。

packagecom.github.davidfantasy.mybatisplus.generatorui.mbp;

importcn.hutool.core.util.StrUtil;
importcom.github.davidfantasy.mybatisplus.generatorui.dto.Constant;
importcom.google.common.base.Strings;

importstaticcom.github.davidfantasy.mybatisplus.generatorui.dto.Constant.DOT_JAVA;
importstaticcom.github.davidfantasy.mybatisplus.generatorui.dto.Constant.DOT_XML;

/**
*自定義各類(lèi)名稱(chēng)轉(zhuǎn)換的規(guī)則
*/
publicinterfaceNameConverter{

/**
*自定義Entity.java的類(lèi)名稱(chēng)
*
*@paramtableName表名稱(chēng)
*@return
*/
defaultStringentityNameConvert(StringtableName){
if(Strings.isNullOrEmpty(tableName)){
return"";
}
tableName=tableName.substring(tableName.indexOf(StrUtil.UNDERLINE)+1,tableName.length());
returnStrUtil.upperFirst(StrUtil.toCamelCase(tableName.toLowerCase()));
}

/**
*自定義表字段名到實(shí)體類(lèi)屬性名的轉(zhuǎn)換規(guī)則
*
*@paramfieldName表字段名稱(chēng)
*@return
*/
defaultStringpropertyNameConvert(StringfieldName){
if(Strings.isNullOrEmpty(fieldName)){
return"";
}
if(fieldName.contains("_")){
returnStrUtil.toCamelCase(fieldName.toLowerCase());
}
returnfieldName;
}

/**
*自定義Mapper.java的類(lèi)名稱(chēng)
*/
defaultStringmapperNameConvert(StringtableName){
returnentityNameConvert(tableName)+"Mapper";
}

/**
*自定義Mapper.xml的文件名稱(chēng)
*/
defaultStringmapperXmlNameConvert(StringtableName){
returnentityNameConvert(tableName)+"Mapper";
}

/**
*自定義Service.java的類(lèi)名稱(chēng)
*/
defaultStringserviceNameConvert(StringtableName){
return"I"+entityNameConvert(tableName)+"Service";
}

/**
*自定義ServiceImpl.java的類(lèi)名稱(chēng)
*/
defaultStringserviceImplNameConvert(StringtableName){
returnentityNameConvert(tableName)+"ServiceImpl";
}

/**
*自定義Controller.java的類(lèi)名稱(chēng)
*/
defaultStringcontrollerNameConvert(StringtableName){
returnentityNameConvert(tableName)+"Controller";
}

/**
*自定義其它生成文件的文件名(不包括entity,mapper.java,mapper.xml,service,serviceImpl,controller這6種)
*
*@paramfileType在頁(yè)面上輸入的輸出文件標(biāo)識(shí)
*@paramtableName關(guān)聯(lián)的數(shù)據(jù)表名稱(chēng)名稱(chēng)
*@return生成文件的名稱(chēng),帶后綴
*/
defaultStringoutputFileNameConvert(StringfileType,StringtableName){
if(fileType.equals(Constant.FILE_TYPE_ENTITY)){
returnthis.entityNameConvert(tableName)+DOT_JAVA;
}elseif(fileType.equals(Constant.FILE_TYPE_MAPPER)){
returnthis.mapperNameConvert(tableName)+DOT_JAVA;
}elseif(fileType.equals(Constant.FILE_TYPE_MAPPER_XML)){
returnthis.mapperXmlNameConvert(tableName)+DOT_XML;
}elseif(fileType.equals(Constant.FILE_TYPE_SERVICE)){
returnthis.serviceNameConvert(tableName)+DOT_JAVA;
}elseif(fileType.equals(Constant.FILE_TYPE_SERVICEIMPL)){
returnthis.serviceImplNameConvert(tableName)+DOT_JAVA;
}elseif(fileType.equals(Constant.FILE_TYPE_CONTROLLER)){
returnthis.controllerNameConvert(tableName)+DOT_JAVA;
}
returnthis.entityNameConvert(tableName)+fileType;
}

}

mybatis-plus-generator-ui的功能非常豐富,甚至針對(duì)ui都是可以自定義修改的。如果需要定制UI的話,將代碼clone下來(lái)后,進(jìn)入到frontend目錄下,進(jìn)行相應(yīng)的擴(kuò)展開(kāi)發(fā)。

9156104a-f920-11ed-90ce-dac502259ad0.png

修改完成后,需要另行編譯srcfrontend中的靜態(tài)資源(源碼中不包含已編譯的頁(yè)面),在srcfrontend文件夾中執(zhí)行:

yarninstall
yarnrunbuild

五、總結(jié)

以上就是今天要講的內(nèi)容,本文簡(jiǎn)要介紹一款基于Mybatis-Plus的代碼自助生成器。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 生成器
    +關(guān)注

    關(guān)注

    7

    文章

    317

    瀏覽量

    21062
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    823

    瀏覽量

    26653
  • mybatis
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    6727

原文標(biāo)題:MyBatis-Plus 可視化代碼生成器來(lái)啦,讓你的開(kāi)發(fā)效率大大提速!!

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何生成mybatisplus

    我在詳細(xì)的講解下官方的文檔。 2、添加依賴(lài) MyBatis-Plus 從 3.0.3 之后移除了代碼生成器與模板引擎的默認(rèn)依賴(lài),需要手動(dòng)添加相關(guān)依賴(lài)。 ①、添加
    的頭像 發(fā)表于 09-25 14:23 ?787次閱讀
    如何<b class='flag-5'>一</b>鍵<b class='flag-5'>生成</b>mybatisplus

    懶人C51代碼生成器

    懶人C51代碼生成器一款小軟件
    發(fā)表于 11-30 00:18

    AllJoyn C++代碼生成器

    AllJoyn 團(tuán)隊(duì)非常激動(dòng)地向廣大開(kāi)發(fā)商宣布,一款新工具已經(jīng)問(wèn)世——代碼生成器。如果您擁有定義的 AllJoyn 服務(wù)接口規(guī)范,即可通過(guò)運(yùn)行此代碼
    發(fā)表于 09-19 18:11

    推薦一款:【靈生】單片機(jī)代碼自動(dòng)生成器(自動(dòng)編程工具)

    推薦一款:【靈生】單片機(jī)代碼自動(dòng)生成器(自動(dòng)編程工具)以往編寫(xiě)單片機(jī)程序全靠程序員敲代碼,門(mén)檻高,學(xué)習(xí)困難,不容易入門(mén),而且編程繁瑣,本軟件只需要鼠標(biāo)
    發(fā)表于 12-21 16:53

    介紹下ABOV提供的代碼生成器

    的開(kāi)發(fā),下面介紹下ABOV提供的代碼生成器,絲毫不輸CUBEMX,且ABOV單片機(jī)基本都支持keil開(kāi)發(fā)環(huán)境。。2. ABOV的代碼
    發(fā)表于 11-19 08:06

    安利一款專(zhuān)門(mén)用于stm芯片的代碼生成器

    大家安利一款特別實(shí)用的軟件,這是ST公司專(zhuān)門(mén)用于stm芯片的代碼生成器,它能為我們省去許多步驟,以可視化的方式為我們呈現(xiàn)出來(lái),特別的方便。STM32CubeMX 是 ST 意法半導(dǎo)體近幾年來(lái)大力推薦的STM32 芯片圖形化配置工
    發(fā)表于 02-21 07:33

    代碼生成器的應(yīng)用

    jeesite框架代碼生成器,可以很方便的生成代碼,挺不錯(cuò)的。
    發(fā)表于 01-14 15:19 ?0次下載

    數(shù)碼管代碼生成器

    數(shù)碼管代碼生成器,迅速生成數(shù)碼管的相應(yīng)代碼
    發(fā)表于 04-25 10:54 ?41次下載

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版

    STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版 STM32庫(kù)函數(shù)代碼自動(dòng)生成器正式版
    發(fā)表于 07-25 18:52 ?0次下載

    篇讓你熟練掌握 MyBatis-Plus

    MyBatis-plus一款 Mybatis 增強(qiáng)工具,用于簡(jiǎn)化開(kāi)發(fā),提高效率。下文使用縮寫(xiě) mp來(lái)簡(jiǎn)化表示 MyBatis-plus,本文主要
    的頭像 發(fā)表于 06-01 09:30 ?2637次閱讀
    <b class='flag-5'>一</b>篇讓你熟練掌握 <b class='flag-5'>MyBatis-Plus</b>!

    python生成器是什么

    python生成器 1. 什么是生成器? 生成器(英文名 Generator ),是個(gè)可以像迭代器那樣使用for循環(huán)來(lái)獲取元素的函數(shù)。 生成器
    的頭像 發(fā)表于 02-24 15:53 ?3686次閱讀

    MyBatis-Plus的使用與測(cè)試

    本文主要介紹mybatis-plus這款插件,針對(duì)springboot用戶(hù)。包括引入,配置,使用,以及擴(kuò)展等常用的方面做個(gè)匯總整理,盡量包含大家常用的場(chǎng)景內(nèi)容。
    的頭像 發(fā)表于 08-22 11:56 ?1344次閱讀

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器起使用的項(xiàng)目

    將使用代碼生成器生成的項(xiàng)目移植到與智能配置器起使用的項(xiàng)目
    發(fā)表于 01-11 19:00 ?0次下載
    將使用<b class='flag-5'>代碼</b><b class='flag-5'>生成器</b><b class='flag-5'>生成</b>的項(xiàng)目移植到與智能配置器<b class='flag-5'>一</b>起使用的項(xiàng)目

    MyBatis-Plus為什么不支持聯(lián)表

    MyBatis Plus Join`一款專(zhuān)門(mén)解決MyBatis Plus 關(guān)聯(lián)查詢(xún)問(wèn)題的擴(kuò)展框架,他并不
    的頭像 發(fā)表于 02-28 15:19 ?2512次閱讀
    <b class='flag-5'>MyBatis-Plus</b>為什么不支持聯(lián)表

    Mybatis-plus批量插入太慢?

    「內(nèi)置代碼生成器:」 采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼
    的頭像 發(fā)表于 08-25 15:24 ?793次閱讀
    <b class='flag-5'>Mybatis-plus</b>批量插入太慢?