摘要:的作用可以看到,它給我們提供了一些核心的功能代碼生成器和現(xiàn)成的接口以及可以結(jié)合的條件構(gòu)造器使我們的代碼變得足夠優(yōu)雅,分頁(yè)的使用也是相當(dāng)?shù)姆奖悖约疤峁┝瞬煌闹麈I生成策略。
簡(jiǎn)介
Mybatis-Plus是在Mybatis的基礎(chǔ)上,國(guó)人開(kāi)發(fā)的一款持久層框架。
并且榮獲了2018年度開(kāi)源中國(guó)最受歡迎的中國(guó)軟件TOP5
同樣以簡(jiǎn)化開(kāi)發(fā)為宗旨的Spring Boot與Mybatis-Plus放在一起會(huì)產(chǎn)生什么樣的化學(xué)反應(yīng)呢?下面我們來(lái)領(lǐng)略一下兩者配合帶來(lái)的效率上的提升。
Mybatis-Plus的作用可以看到,它給我們提供了一些核心的功能:代碼生成器和現(xiàn)成的CRUD接口以及可以結(jié)合Lambda的條件構(gòu)造器使我們的代碼變得足夠優(yōu)雅,分頁(yè)的使用也是相當(dāng)?shù)姆奖?,以及提供了不同的主鍵生成策略。
如果這些功能不能滿(mǎn)足我們的需求,Mybatis-Plus還提供了豐富的插件供我們?nèi)ナ褂?,我們接下?lái)只講核心功能,插件的使用會(huì)在后面的文章中進(jìn)行部分的講解,感興趣的同學(xué)可以先去看一下官方的文檔。
首先我們需要引入POM,我在這里引用的是最新版本的:
接著,如果我們需要使用代碼生成器,需要引入模板引擎的依賴(lài):
到此,pom的引入就告一段落,下面我們來(lái)看一下配置文件的編寫(xiě):
使用第二步:編寫(xiě)配置文件這里我們使用的是application.yml作為配置文件,而非新建Spring Boot 項(xiàng)目默認(rèn)的application.properties,這里如果不會(huì)新建一個(gè)Spring Boot項(xiàng)目,可以去參考本系列教程的第一篇文章
在這里可以進(jìn)行打印SQL的配置,便于我們進(jìn)行排查問(wèn)題。
使用第三步:建表 使用第四步:使用代碼生成器直接貼出我的代碼生成器代碼:
public class MpGenerator { public static void main(String[] args) { GlobalConfig config = new GlobalConfig(); String dbUrl = "jdbc:mysql://localhost:3306/viboot?useSSL=false"; DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL) .setUrl(dbUrl) .setUsername("root") .setPassword("Passw0rd") .setDriverName("com.mysql.cj.jdbc.Driver"); StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig .setCapitalMode(true) //這里結(jié)合了Lombok,所以設(shè)置為true,如果沒(méi)有集成Lombok,可以設(shè)置為false .setEntityLombokModel(true) .setNaming(NamingStrategy.underline_to_camel); //這里因?yàn)槲沂嵌嗄K項(xiàng)目,所以需要加上子模塊的名稱(chēng),以便直接生成到該目錄下,如果是單模塊項(xiàng)目,可以將后面的去掉 String projectPath = System.getProperty("user.dir") + "/viboot-mybatis-plus"; // 自定義配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() { } }; // 如果模板引擎是 freemarker String templatePath = "/templates/mapper.xml.ftl"; // 如果模板引擎是 velocity // String templatePath = "/templates/mapper.xml.vm"; // 自定義輸出配置 ListfocList = new ArrayList<>(); // 自定義配置會(huì)被優(yōu)先輸出 focList.add(new FileOutConfig(templatePath) { @Override public String outputFile(TableInfo tableInfo) { // 自定義輸出文件名 return projectPath + "/src/main/resources/mapper/" + "user" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; } }); cfg.setFileOutConfigList(focList); //設(shè)置作者,輸出路徑,是否重寫(xiě)等屬性 config.setActiveRecord(false) .setEnableCache(false) .setAuthor("viyoung") .setOutputDir(projectPath + "/src/main/java") .setFileOverride(true) .setServiceName("%sService"); new AutoGenerator() .setGlobalConfig(config) .setDataSource(dataSourceConfig) .setStrategy(strategyConfig) .setTemplateEngine(new FreemarkerTemplateEngine()) .setCfg(cfg) //這里進(jìn)行包名的設(shè)置 .setPackageInfo( new PackageConfig() .setParent("indi.viyoung.viboot.mybatis") .setController("controller") .setEntity("entity") .setMapper("mapper") .setServiceImpl("service.impl") .setService("service") ).execute(); } }
下面我們來(lái)運(yùn)行main方法,就可以看到生成的包:
將mapper包下面xml包刪掉,因?yàn)槲覀円呀?jīng)在resources中生成了*mapper.xml文件。
這里需要注意,需要在SpringBoot的啟動(dòng)類(lèi)上配置MapperScan來(lái)幫助我們?nèi)フ业匠志脤咏涌诘奈恢谩?/p>
沒(méi)錯(cuò),我們只需要寫(xiě)一行代碼就可以獲取到我們想要的列表,下面我們來(lái)訪問(wèn)一下
IService與BaseMapper有些人可能會(huì)好奇,為什么我們只需要在controller層中直接去調(diào)用就可以獲得到列表,這是因?yàn)?b>Mybatis-Plus給我們封裝了一系列的CRUD的基礎(chǔ)接口,在通過(guò)代碼生成器生成的UserService接口實(shí)際上是繼承了IService接口的,而UserServiceImpl則是繼承ServiceImpl,所以就可以獲取到一些基礎(chǔ)的實(shí)現(xiàn)。
而IService則給我們提供了以下方法來(lái)實(shí)現(xiàn)基礎(chǔ)的CRUD:
同樣的,BaseMapper接口也提供了一些實(shí)現(xiàn):
通過(guò)這些基礎(chǔ)的實(shí)現(xiàn),我們可以完成日常中大部分的基礎(chǔ)查詢(xún),而省去了編寫(xiě)Service和ServiceImpl的時(shí)間,從編碼效率上來(lái)講比起JPA更勝一籌。
條件構(gòu)造器條件構(gòu)造器可以構(gòu)造一些查詢(xún)條件來(lái)獲取我們指定的值,同時(shí)可以結(jié)合Lambda表達(dá)式來(lái)使用,下面我們直接來(lái)編寫(xiě)兩個(gè)例子:
可以看到,被注釋掉的部分是不使用Lambda表達(dá)式的寫(xiě)法,這樣的寫(xiě)法存在魔法值,而且會(huì)由于粗心寫(xiě)錯(cuò)column的名稱(chēng)而導(dǎo)致錯(cuò)誤,但是使用Lambda表達(dá)式就足夠直觀的可以看出我們是想查詢(xún)出userName = ?的數(shù)據(jù),下面,我們來(lái)運(yùn)行一下,看看結(jié)果是否符合我們預(yù)期的那樣
當(dāng)然,條件構(gòu)造器的用法還有許許多多,這里就不在一一羅列,有需要的同學(xué)可以去官網(wǎng)查看文檔
分頁(yè)查詢(xún)如果我們需要分頁(yè)查詢(xún)數(shù)據(jù)去渲染表格,可以使用Mybatis-Plus自帶的分頁(yè)插件:
在啟動(dòng)類(lèi)中加入上面的代碼,然后我們就可以去使用分頁(yè)了:
我們只需要構(gòu)建一個(gè)Page對(duì)象,并初始化我們所需的頁(yè)數(shù)(page)和每頁(yè)數(shù)據(jù)量(pageSize),然后將其作為page()方法的參數(shù)傳入即可
下面,我們來(lái)訪問(wèn)一下:
至此,我們的Mybatis-Plus就告一段落了,謝謝您的耐心閱讀,希望您有所收獲~
原創(chuàng)文章,文筆有限,才疏學(xué)淺,文中若有不正之處,萬(wàn)望告知。
源碼可以去github(https://github.com/viyog/vibo... 或者碼云(https://gitee.com/yw185300699... )上進(jìn)行下載,后續(xù)的例子都會(huì)同步更新。
公眾號(hào)文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75630.html
摘要:一直想搞一套后臺(tái)基本開(kāi)發(fā)框架出來(lái),無(wú)奈太忙其實(shí)太懶,最近受到兩位大佬的啟發(fā),就改動(dòng)了一下大佬做好的東西。更新簡(jiǎn)單整合使用項(xiàng)目目錄修復(fù)修改模板文件的包名問(wèn)題,之后只在包里文件中的與即可地址 一直想搞一套后臺(tái)基本開(kāi)發(fā)框架出來(lái),無(wú)奈太忙(其實(shí)太懶),最近受到兩位大佬的啟發(fā),就改動(dòng)了一下大佬做好的東西。初始版本:https://github.com/lihengming... showImg(...
摘要:申請(qǐng)連接時(shí)執(zhí)行檢測(cè)連接是否有效,做了這個(gè)配置會(huì)降低性能。作者在版本中使用,通過(guò)監(jiān)控界面發(fā)現(xiàn)有緩存命中率記錄,該應(yīng)該是支持。允許和不允許單條語(yǔ)句返回多個(gè)數(shù)據(jù)集取決于驅(qū)動(dòng)需求使用列標(biāo)簽代替列名稱(chēng)。需要驅(qū)動(dòng)器支持。將自動(dòng)映射所有復(fù)雜的結(jié)果。 項(xiàng)目github地址:https://github.com/5-Ason/aso... 具體可看 ./db/db-mysql 模塊 本文主要實(shí)現(xiàn)的是對(duì)...
摘要:最近在研究,順便就會(huì)看看數(shù)據(jù)庫(kù)連接這一塊的知識(shí),所以當(dāng)我發(fā)現(xiàn)有通用和這兩款網(wǎng)絡(luò)上比較火的簡(jiǎn)化開(kāi)發(fā)的優(yōu)秀軟件之后。先創(chuàng)建一個(gè)的項(xiàng)目,可以參考我之前的文章的簡(jiǎn)單教程一項(xiàng)目的創(chuàng)建。打開(kāi)文件,將最新的相關(guān)的包都引用進(jìn)來(lái)。 最近在研究springboot,順便就會(huì)看看數(shù)據(jù)庫(kù)連接這一塊的知識(shí) ,所以當(dāng)我發(fā)現(xiàn)有通用Mapper和MybatisPlus這兩款網(wǎng)絡(luò)上比較火的簡(jiǎn)化mybatis開(kāi)發(fā)的優(yōu)秀軟...
閱讀 1367·2021-11-15 11:45
閱讀 3134·2021-09-27 13:36
閱讀 2878·2019-08-30 15:54
閱讀 995·2019-08-29 12:38
閱讀 2915·2019-08-29 11:22
閱讀 2996·2019-08-26 13:52
閱讀 2042·2019-08-26 13:30
閱讀 595·2019-08-26 10:37