mybatis依賴 mybatis plus詳解

2021-10-11 15:47:00 字數 4141 閱讀 3240

mybatis在持久層框架中還是比較火的,一般專案都是基於ssm。雖然mybatis可以直接在xml中通過sql語句運算元據庫,很是靈活。但正其操作都要通過sql語句進行,就必須寫大量的xml檔案,很是麻煩。mybatis-plus就很好的解決了這個問題。

一、mybatis-plus簡介:

mybatis-plus(簡稱mp)是乙個 mybatis 的增強工具,在 mybatis 的基礎上只做增強不做改變,為簡化開發、提高效率而生。這是官方給的定義,關於mybatis-plus的更多介紹及特性,可以參考mybatis-plus官網。那麼它是怎麼增強的呢?其實就是它已經封裝好了一些crud方法,我們不需要再寫xml了,直接呼叫這些方法就行,就類似於jpa。

二、spring整合mybatis-plus:

正如官方所說,mybatis-plus在mybatis的基礎上只做增強不做改變,因此其與spring的整合亦非常簡單。只需把mybatis的依賴換成mybatis-plus的依賴,再把sqlsessionfactory換成mybatis-plus的即可。接下來看具體操作:1、pom.xml:

核心依賴如下:

org.springframework

spring-context

4.3.14.release

org.springframework

spring-orm

4.3.14.release

org.springframework

spring-test

4.3.14.release

test

com.baomidou

mybatis-plus

2.33、jdbc.properties:

jdbc.driver=com.mysql.jdbc.driver jdbc.url=jdbc:mysql:///資料庫名?useunicode=true&characterencoding=utf8 jdbc.username=# jdbc.password=#4、mybatis-config.xml:

<?xml version="1.0" encoding="utf-8"?>注:因為是與spring整合,所有mybatis-plus的大部分都寫在spring的配置檔案中,這裡定義乙個空的mybatis-config.xml即可。5、spring-dao.xml:

<?xml version="1.0" encoding="utf-8"?>

6、entity:

@runwith(springjunit4classrunner.class) @contextconfiguration() public class test }

執行該junit,可輸出獲取到的連線,說明整合沒問題:

本文所有**本人均親自測試過,本文涉及**又較多,為了不影響篇幅,故非必要處不再截圖。接下來的所有操作都是基於此整合好的專案。

三、mp的通用crud:需求:

存在一張 tb_employee 表,且已有對應的實體類 employee,實現tb_employee 表的 crud 操作我們需要做什麼呢?基於 mybatis:

@runwith(springjunit4classrunner.class) @contextconfiguration() public class test }

執行新增操作,直接呼叫insert方法傳入實體即可。2、update操作:

@test public void testupdate()注:注意這兩個update操作的區別,updatebyid方法,沒有傳值的字段不會進行更新,比如只傳入了lastname,那麼age、gender等屬性就會保留原來的值;updateallcolumnbyid方法,顧名思義,會更新所有的列,沒有傳值的列會更新為null。3、select操作:(1)、根據id查詢:

employee employee = emplopyeedao.selectbyid(1);(2)、根據條件查詢一條資料:

employee employeecondition = new employee(); employeecondition.setid(1); employeecondition.setlastname("更新測試"); //若是資料庫中符合傳入的條件的記錄有多條,那就不能用這個方法,會報錯 employee employee = emplopyeedao.selectone(employeecondition);注:這個方法的sql語句就是where id = 1 and last_name = 更新測試,若是符合這個條件的記錄不止一條,那麼就會報錯。(3)、根據查詢條件返回多條資料:

當符合指定條件的記錄數有多條時,上面那個方法就會報錯,就應該用這個方法。

mapcolumnmap = new hashmap<>(); columnmap.put("last_name","東方不敗");//寫表中的列名 columnmap.put("gender","1"); listemployees = emplopyeedao.selectbymap(columnmap); system.out.println(employees.size());注:查詢條件用map集合封裝,columnmap,寫的是資料表中的列名,而非實體類的屬性名。比如屬性名為lastname,資料表中字段為last_name,這裡應該寫的是last_name。selectbymap方法返回值用list集合接收。(4)、通過id批量查詢:

listidlist = new arraylist<>(); idlist.add(1); idlist.add(2); idlist.add(3); listemployees = emplopyeedao.selectbatchids(idlist); system.out.println(employees);注:把需要查詢的id都add到list集合中,然後呼叫selectbatchids方法,傳入該list集合即可,該方法返回的是對應id的所有記錄,所有返回值也是用list接收。(5)、分頁查詢:

listemployees = emplopyeedao.selectpage(new page<>(1,2),null); system.out.println(employees);注:selectpage方法就是分頁查詢,在page中傳入分頁資訊,後者為null的分頁條件,這裡先讓其為null,講了條件構造器再說其用法。這個分頁其實並不是物理分頁,而是記憶體分頁。也就是說,查詢的時候並沒有limit語句。等配置了分頁外掛程式後才可以實現真正的分頁。4、delete操作:(1)、根據id刪除:

emplopyeedao.deletebyid(1);(2)、根據條件刪除:

mapcolumnmap = new hashmap<>(); columnmap.put("gender",0); columnmap.put("age",18); emplopyeedao.deletebymap(columnmap);注:該方法與selectbymap類似,將條件封裝在columnmap中,然後呼叫deletebymap方法,傳入columnmap即可,返回值是integer型別,表示影響的行數。(3)、根據id批量刪除:

listidlist = new arraylist<>(); idlist.add(1); idlist.add(2); emplopyeedao.deletebatchids(idlist);注:該方法和selectbatchids類似,把需要刪除的記錄的id裝進idlist,然後呼叫deletebatchids,傳入idlist即可。

四、全域性策略配置:

通過上面的小案例我們可以發現,實體類需要加@tablename註解指定資料庫表名,通過@tableid註解指定id的增長策略。實體類少倒也無所謂,實體類一多的話也麻煩。所以可以在spring-dao.xml的檔案中進行全域性策略配置。

這裡配置了還沒用,還需要在sqlsessionfactory中注入配置才會生效。如下:

1、分頁查詢年齡在18 - 50且gender為0、姓名為tom的使用者:

MyBatis原始碼閱讀 解析MyBatis執行流程

前言 從demo分析上層流程 sqlsessionfactory sqlsessionfactory 一旦被建立就應該在應用的執行期間一直存在,沒有任何理由對它進行清除或重建。使用 sqlsessionfactory 的最佳實踐是在應用執行期間不要重複建立多次,多次重建 sqlsessionfact...

typeHandler設定和mybatis版本問題

使用hashicorp遇到幾個問題 1 用了生產模式,然後丟了token和解封金鑰,不能重新解封,刪除vault和配置路徑後,重新安裝也沒有解決問題,只能先用dev模式繼續研究了,後續看能不能找到其他辦法 2 springboot mybatis整合時,遇到問題,generatorconfig.xm...

玩轉springboot 整合mybatis例項

我們先看一下pom.xml org.mybatis.spring.boot mybatis spring boot starter 1.3.112 345因為mybatis已經整合到starter中了,所以我們只需要引入這個依賴就可以了。下面,我們以employee員工為例 public class...