045-mybatis plus

MyBatis是目前最流行的JDBC持久層框架,著名的ssm框架中的m寝并。關(guān)于springboot集成mybatis可以參考本系列前面的文章(003和004)羊苟。關(guān)于MyBatis不再介紹箫踩。

MyBatis-Plus(簡稱 MP)是一個 MyBatis 的增強工具爱态,在 MyBatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)班套、提高效率而生肢藐。



MyBatis-Plus特性

無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響吱韭,如絲般順滑

損耗小:啟動即會自動注入基本 CURD,性能基本無損耗鱼的,直接面向?qū)ο蟛僮?/p>

強大的 CRUD 操作:內(nèi)置通用 Mapper理盆、通用 Service,僅僅通過少量配置即可實現(xiàn)單表大部分 CRUD 操作凑阶,更有強大的條件構(gòu)造器猿规,滿足各類使用需求

支持 Lambda 形式調(diào)用:通過 Lambda 表達式,方便的編寫各類查詢條件宙橱,無需再擔心字段寫錯

支持多種數(shù)據(jù)庫:支持 MySQL姨俩、MariaDB、Oracle师郑、DB2环葵、H2、HSQL宝冕、SQLite张遭、Postgre、SQLServer2005地梨、SQLServer 等多種數(shù)據(jù)庫

支持主鍵自動生成:支持多達 4 種主鍵策略(內(nèi)含分布式唯一 ID 生成器 - Sequence)菊卷,可自由配置,完美解決主鍵問題

支持 XML 熱加載:Mapper 對應(yīng)的 XML 支持熱加載宝剖,對于簡單的 CRUD 操作洁闰,甚至可以無 XML 啟動

支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作

支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )

支持關(guān)鍵詞自動轉(zhuǎn)義:支持數(shù)據(jù)庫關(guān)鍵詞(order万细、key......)自動轉(zhuǎn)義扑眉,還可自定義關(guān)鍵詞

內(nèi)置代碼生成器:采用代碼或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 襟雷、 Controller 層代碼刃滓,支持模板引擎,更有超多自定義配置等您來使用

內(nèi)置分頁插件:基于 MyBatis 物理分頁耸弄,開發(fā)者無需關(guān)心具體操作咧虎,配置好插件之后,寫分頁等同于普通 List 查詢

內(nèi)置性能分析插件:可輸出 Sql 語句以及其執(zhí)行時間计呈,建議開發(fā)測試時啟用該功能砰诵,能快速揪出慢查詢

內(nèi)置全局攔截插件:提供全表 delete 、 update 操作智能分析阻斷捌显,也可自定義攔截規(guī)則茁彭,預防誤操作

內(nèi)置 Sql 注入剝離器:支持 Sql 注入剝離,有效預防 Sql 注入攻擊



框架結(jié)構(gòu)

關(guān)于其它扶歪,可以參考官方文檔理肺。





項目依賴

接下來開始寫代碼例子,首先創(chuàng)建一個項目善镰,依賴如下:

可以看到除了正常的ssm依賴之外妹萨,只多了一個mybatis-plus-boot-starter依賴。

注意:針對目前的版本炫欺,有一點值得注意乎完,我們在使用MyBatis的時候,習慣使用的分頁組件是pagehelper品洛,但是在使用mybatis plus的時候树姨,如果引入pagehelper依賴,會讓mybatis plus的分頁發(fā)生錯誤桥状,所以帽揪,使用mybatis plus不要再引入pagehelper。



單表增刪改查

MyBatis Plus多表的復雜的SQL操作同mybatis沒有太大的區(qū)別岛宦,同樣是麻煩的SQL語句和方法調(diào)用台丛,但是單表簡化了很多。上面的特性中提到砾肺,MyBatis Plus(以下簡稱mp)僅需少量的配置挽霉,即可實現(xiàn)單表的大部分crud操作。首先我們在配置文件中只配置簡單的數(shù)據(jù)源变汪,其它不做任何配置:

在啟動類中侠坎,增加一個mapper掃描注解:

@MapperScan("mp.mapper")

mp.mapper為mapper的接口包路徑。這個注解是MyBatis原生的裙盾。

簡單的配置基本完成了实胸,下面開始寫業(yè)務(wù)代碼他嫡,首先看實體類:

簡單的用戶信息,上面的注解是基于lombok庐完,如果不習慣可以使用get/set钢属。

再來看mapper:

mapper只需要繼承BaseMapper即可,不需要寫任何代碼门躯。再來看service類:

可以看到service單表操作只需要繼承ServiceImpl即可淆党,也不需要寫任何代碼,接下來看一下controller中對應(yīng)的接口:

簡單的單表增刪改查就寫好了讶凉,與原生的MyBatis相比染乌,沒有SQL語句,mapper接口和service類幾乎是零代碼懂讯,所以說mp是MyBatis的增強工具荷憋。通過上面可以看到,直接調(diào)用userService里面有很多實現(xiàn)好的方法褐望,這些方法都在ServiceImpl中勒庄,下面簡單看一下都有哪些:

可以看到,ServiceImpl里面包含了很多有用的單表crud方法(具體內(nèi)容查看源碼)瘫里,這種做法類似于JPA锅铅,以前很多人抱怨說MyBatis在單表的時候也要寫大量的SQL語句,現(xiàn)在有了mp减宣,這些都不再是問題。

現(xiàn)在啟動項目玩荠,簡單運行一下上面四個接口漆腌,先看新增方法:

修改方法:

查詢方法:

刪除方法:

四個接口都沒有問題。其它自帶的方法可以自行學習測試阶冈。


分頁查詢

分頁需要加入分頁插件闷尿,在springboot的啟動類中加入如下方法:

如果不加返回的分頁數(shù)據(jù)的總頁數(shù)和總記錄數(shù)會有問題,接下來先看單表的簡單的分頁查詢女坑。

返回的數(shù)據(jù)如下:

這是service中調(diào)用的selectPage方法填具,返回Page對象,需要傳入兩個參數(shù)匆骗,第一個主要是當前頁碼和每頁記錄數(shù)劳景,第二個Wrapper主要用來組合條件,也是實體包裝器碉就,用于處理 sql 拼接盟广,排序,實體參數(shù)查詢等瓮钥!實體包裝器 EntityWrapper 繼承 Wrapper筋量。簡單的實例如下:

或者:

具體的使用方法如下:

不僅在分頁查詢中烹吵,在單表的列表查詢selectList方法中,也可以傳參數(shù)wrapper桨武,這樣我們對單表的操作基本上就不用寫service代碼和SQL語句了肋拔。其它詳細內(nèi)容可以參考官方文檔



單表的分頁十分好實現(xiàn)呀酸,雖然mp封裝了單表的大部分操作凉蜂,但是就像JPA一樣,復雜的情況還是需要手寫SQL七咧,下面看一下自定義SQL的分頁跃惫。首先配置SQL語句的xml文件的位置:

mybatis-plus.mapper-locations=classpath:/mapper/*Mapper.xml

然后在對應(yīng)的的目錄下創(chuàng)建userMapper.xml文件,并寫一個SQL:

可以看到SQL語句的定義和以前并沒有什么區(qū)別艾栋。接下來在mapper接口中定義方法:

方法的定義幾乎和以前一樣爆存,唯一的區(qū)別是參數(shù)列表的第一個參數(shù)增加了一個Pagination類型的page,這是翻頁對象蝗砾,可以作為 xml 參數(shù)直接使用先较,傳遞參數(shù) Page 即自動分頁。

然后看一下service的調(diào)用方式:

service調(diào)用mapper雖然和以前有區(qū)別悼粮,但也很簡單闲勺。

最后是controller調(diào)動service,這里就沒有什么特別的了:

最后重啟項目扣猫,測試接口:

可以看到自定義SQL的分頁也很容易實現(xiàn)菜循,復雜的SQL同樣如此。


執(zhí)行效率插件

接下來介紹一個實用的執(zhí)行效率插件申尤,即性能分析攔截器癌幕,用于輸出每條 SQL 語句及其執(zhí)行時間。在springboot中只需要在啟動類中加入如下方法:

這個時候昧穿,執(zhí)行任何數(shù)據(jù)庫操作都會在控制臺打印SQL語句和執(zhí)行的時間:

是一個非常實用的插件勺远!

注意!該插件只用于開發(fā)環(huán)境时鸵,不建議生產(chǎn)環(huán)境使用胶逢。。饰潜。



官方還提供了很多很多的插件:

包括讀寫分離初坠,idea快速開發(fā)等等都非常實用,有興趣可以自行學習囊拜,此處不再一一列舉某筐。


代碼地址:?https://gitee.com/blueses/spring-boot-demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冠跷,隨后出現(xiàn)的幾起案子南誊,更是在濱河造成了極大的恐慌身诺,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抄囚,死亡現(xiàn)場離奇詭異霉赡,居然都是意外死亡,警方通過查閱死者的電腦和手機幔托,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門穴亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人重挑,你說我怎么就攤上這事嗓化。” “怎么了谬哀?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵刺覆,是天一觀的道長。 經(jīng)常有香客問我史煎,道長谦屑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任篇梭,我火速辦了婚禮氢橙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘恬偷。我一直安慰自己悍手,他們只是感情好,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布袍患。 她就那樣靜靜地躺著谓苟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪协怒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天卑笨,我揣著相機與錄音孕暇,去河邊找鬼。 笑死赤兴,一個胖子當著我的面吹牛妖滔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播桶良,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼座舍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了陨帆?” 一聲冷哼從身側(cè)響起曲秉,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤采蚀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后承二,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榆鼠,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年亥鸠,在試婚紗的時候發(fā)現(xiàn)自己被綠了妆够。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡负蚊,死狀恐怖神妹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情家妆,我是刑警寧澤鸵荠,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站揩徊,受9級特大地震影響腰鬼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塑荒,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一熄赡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧齿税,春花似錦彼硫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牵舱,卻和暖如春串绩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芜壁。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工礁凡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人慧妄。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓顷牌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親塞淹。 傳聞我的和親對象是個殘疾皇子窟蓝,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355

推薦閱讀更多精彩內(nèi)容