SpringBoot中使用MyBatis-Plus詳細介紹

目錄

一、MyBatis-Plus的使用步驟

1.引入MybatisPlus的起步依賴

2.定義Mapper(也叫dao)層的接口

3.MyBatis-Plus中常用注解

4. 使用MyBatis-Plus時要做如下配置

5.條件構造器 Wrapper


一、MyBatis-Plus的使用步驟

1.引入MybatisPlus的起步依賴

MyBatisPlus官方提供了starter依賴包,其中集成了Mybatis和MybatisPlus的所有功能,并且實現了自動裝配效果。
因此我們可以用_MybatisPlusstarter_直接代替Mybatisstarter:

<!--Mybatisplus-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency>
2.定義Mapper(也叫dao)層的接口

用我們自定義的dao接口繼承MybatisPlus提供的BaseMapper接口:

public interface UserMapper extends BaseMapper<User>?{
}

在該接口中,提供了許多基本的sql增刪改查方法,我們無需寫sql語句,直接調用這些方法即可完成對數據的增刪改查;

3.MyBatis-Plus中常用注解

MyBatisPlus會通過掃描實體類,并基于反射獲取實體類的屬性名稱,然后匹配到數據庫表中相應字段。具體關系如下圖:

因此,我們在定義實體類和數據庫表時,應該遵循MP中一些默認的約定(規范)來確保字段名和屬性名正確的匹配到。約定如下:

  • 類名:蛇峰轉下劉線作為表名
  • 名為id的屬性:作為表中的主鍵
  • 變量名:陀峰轉下劉線作為表的字段名

如果在寫Java代碼時,我們某些代碼不想符合上述三條約定的寫法;也可以使用MP中的常見注解來自定義約定,如下:

4. 使用MyBatis-Plus時要做如下配置

(1)如果是在Spring Boot 工程中,要配置Mapper接口所在的包:在Spring Boot的啟動類上添加**@MapperScan**注解,并指定Mapper接口所在的包路徑。

@SpringBootApplication
@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper")
public class Application {
?? ?public static void main(String[] args) {? ? ? ?SpringApplication.run(Application.class, args);?  }
?
}

注意:在該例子中:**“com.baomidou.mybatisplus.samples.quickstart.mapper”**是 MyBatis-Plus 官方示例項目中的一個包路徑,用于存放示例的 Mapper 接口。在實際應用中,你應該將@MapperScan注解中的字符串參數替換為你自己的項目中 Mapper 接口所在的包路徑。

(2)在Spring MVC工程中使用MyBatis-Plus要做如下配置

①首先,在.xml配置文件中配置 MapperScan 注解:

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">? ?<property name="basePackage" value="com.baomidou.mybatisplus.samples.quickstart.mapper"/>
</bean>

②然后,調整 SqlSessionFactory 為 MyBatis-Plus 的 SqlSessionFactory

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">? ?<property name="dataSource" ref="dataSource"/>
</bean>

③通常來說,一般的簡單工程,通過以上配置即可正常使用 MyBatis-Plus,具體可參考以下鏈接:? Spring Boot 快速啟動示例 ? Spring Boot 快速啟動示例,

? ?Spring MVC 快速啟動示例 ? ?Spring MVC 快速啟動示例。

同時 MyBatis-Plus 提供了大量的個性化配置來滿足不同復雜度的工程,大家可根據自己的項目按需取用,詳細配置請參考鏈接:

使用配置[這里是圖片004]https://baomidou.com/reference/

Spring Boot 配置

在 Spring Boot 項目中,可以通過 application.ymlapplication.properties 文件來配置 MyBatis-Plus。

yml配置文件中MyBatisPlus的配置項繼承了MyBatis.原生配置和一些自己特有的配置。例如:

mybatis-plus:type-aliases-package: com.yzx.xxx.po #別名掃描包mapper-locations: "classpath*:/mapper/**/*,Xml" #Mapper.Xml文件地址configuration:map-underscore-to-camel-case: true #是否開啟下劃線和駝峰的映射cache-enabled: false #是否開啟二級緩存global-config:db-config:id-type: assign_id #id為雪花算法生成update-strategy: not_null #設置更新策略:只更新非空字段
?

代碼中globa-config下的配置表示全局其優先級小于實體類中注解的優先級。

如下圖:

Spring MVC 配置

在傳統的 Spring MVC 項目中,可以通過 XML 配置文件來配置 MyBatis-Plus。

<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">? ?<property name="dataSource" ref="dataSource"/>? ?<property name="mapperLocations" value="classpath*:mapper/**/*.xml"/>? ?<property name="typeAliasesPackage" value="com.your.domain"/>? ?<!-- 其他配置 -->
</bean>
5.條件構造器 Wrapper

前提:BaseMapper接口中自帶的增刪改查方法都是通過數據的Id作為條件進行的;如果想要自定義查詢條件則需要用到條件構造器:Wrapper

Wrapper類與其字類的繼承關系如下:

Wrapper類中提供的,用于自定義構建查詢條件的一些方法:

下面,我們以最常用的QueryWrapper(查詢條件構造器)為例,來演示如何使用條件構造器來構造我們的sql查詢

**QueryWrapper(查詢語句的條件構造器):**它拓展了select的功能,可以指定查找哪些字段:

使用方法:

  1. 首先,構造一個Wrapper對像,并通過該對象來編寫查詢條件
  2. 然后,將剛剛創建的Wrapper對象作為參數傳入查詢方法中

例如我們要進行一個如下的sql查詢:

查詢出名字中帶o的,存款大于等于1000元的人的id、用戶名(username)、信息(info)和收入(balance)

SQL語句如下:

SELECT id,username,info,balance
FROM user
WHERE username LIKE '%o%'
AND balance >= 1000;

QueryWrapper(條件構造器)來實現上述SQL語句的代碼如下:

@Test
public void testQuerywrapper(){//1.構建查詢條件QueryWrapper<user> wrapper = new QueryWrapper<user>().select("id","username","info","balance").like("username","o").ge("balance",1000);//2.查詢List<user> users = userMapper.selectList(wrapper);
}

條件構造器Wrapper中的函數所對應的sql語法,具體對應表如下:

**另外:**在 MyBatis-Plus 中的IService接口是對service層的一個加強,繼承了IService接口的service會自帶一些方法:(感興趣的小伙伴可以自行探索)

其中:save()方法是一個非常重要的功能,它用于將實體對象保存到數據庫中。具體地說,save 方法會根據實體對象的 ID(主鍵)來決定是執行插入(insert)操作還是更新(update)操作。

  • **插入操作:**如果傳入的實體對象的 ID 為空(即該對象在數據庫中尚不存在),save 方法會執行插入操作,將該對象插入到數據庫中,并自動生成一個 ID(如果使用了自動增長的主鍵策略)。

  • **更新操作:**如果傳入的實體對象的 ID 不為空(即該對象在數據庫中已經存在),save 方法會執行更新操作,將該對象的屬性更新到數據庫中對應的記錄上。這里需要注意的是,MyBatis-Plus 默認只會更新非空屬性,即如果實體對象的某個屬性為 null,則不會將該屬性更新到數據庫中(除非你進行了特殊的配置)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70066.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue3讀取webrtc-stream 視頻流

一.首先下載webrtc-stream&#xff0c;方便自己本地搭建視頻流服務 https://download.csdn.net/download/cyw8998/90373521 解壓后&#xff0c;啟動命令 webrtc-streamer.exe -H 127.0.0.1:8020 二.vue3代碼如下 <template><h1>video</h1><video id&…

vue3搭建實戰項目筆記二

vue3搭建實戰項目筆記二 2.1.git管理項目2.2.隱藏tabBar欄2.2.1 方案一&#xff1a;在路由元信息中設置一個參數是否顯示tabBar2.2.2 方案二&#xff1a;通過全局設置相對定位樣式 2.3.項目里封裝axios2.3.1 發送網絡請求的兩種做法2.3.2 封裝axios并發送網絡請求2.3.2.1 對axi…

USC 安防平臺之移動偵測

隨著第四次科技革命的開啟&#xff0c;AI技術獲取了突飛猛進的發展&#xff0c;視頻監控對應的視頻分析技術也獲取了巨大的發展。 還記得15年前采用人工提取特征做前景背景分離和提取&#xff0c;大部分依賴CPU&#xff0c;最多使用一下TI的DM642 DSP加速&#xff0c;開發難度…

Unity CommandBuffer繪制粒子系統網格顯示

CommandBuffer是 Unity 提供的一種在渲染流程中插入自定義渲染命令的機制。在渲染粒子系統時&#xff0c;常規的渲染流程可能無法滿足特定的渲染需求&#xff0c;而CommandBuffer允許開發者靈活地設置渲染參數、控制渲染順序以及執行自定義的繪制操作。通過它&#xff0c;可以精…

【天地圖】繪制、刪除點線面

使用天地圖繪制、刪除點線面 實現效果圖地圖組件完整代碼使用地圖組件完整代碼 實現效果圖 地圖組件完整代碼 // 天地圖組件 <template><div class"map-container"><div id"mapCon"></div></div> </template><scri…

Java八股文詳細文檔.2(基于黑馬、ChatGPT、DeepSeek)

通過B站黑馬程序員的八股文教學&#xff0c;自己也二刷了&#xff0c;結合ChatGpt、deepSeek總結了一下,Java八股文詳細文檔.2&#xff08;Redis篇和消息中間件篇&#xff0c;還沒有寫完&#xff0c;這只是一部分&#xff09; Java八股文詳細文檔.1&#xff08;包含JVM篇、數據…

簡述 tsconfig.json 中 rootDir 和 include 之間的關系

tsconfig.json 中的 rootDir 和 include 之間有一定的關系&#xff0c;但它們的作用是不同的。理解它們的關系可以幫助你更好地配置 TypeScript 項目。 1. rootDir 的作用 rootDir 用于指定 TypeScript 編譯器&#xff08;tsc&#xff09;的“根目錄”。它的主要作用是&#x…

如何在Spring Boot中使用Profiles實現環境隔離

文章目錄 如何在Spring Boot中使用Profiles實現環境隔離什么是Spring Profiles1.基本概念2.配置管理3.使用場景4.條件化配置5.優點Spring Profiles的基礎知識1.Profile的定義2.配置文件3.激活Profiles4.條件化配置5.Profile的優先級與合并6.Profiles的最佳實踐配置文件的組織1.…

SpringBoot使用TraceId日志鏈路追蹤

項目場景&#xff1a; ??有時候一個業務調用鏈場景&#xff0c;很長&#xff0c;調了各種各樣的方法&#xff0c;看日志的時候&#xff0c;各個接口的日志穿插&#xff0c;確實讓人頭大。為了解決這個痛點&#xff0c;就使用了TraceId&#xff0c;根據TraceId關鍵字進入服務…

微信小程序網絡請求封裝

微信小程序的網絡請求為什么要封裝&#xff1f;封裝使用有什么好處&#xff1f; 封裝的目的是為了偷懶&#xff0c;試想一下每次都要wx.request&#xff0c;巴拉巴拉傳一堆參數&#xff0c;是不是很麻煩&#xff0c;有些公共的參數例如header&#xff0c;baseUrl是不是可以封裝…

Element Plus table 去除行hover效果

需求&#xff1a; 給table的指定行設置高亮背景色且去除掉這些行的hover效果 思路&#xff1a; 給指定行設置css類名選擇需要設置高亮的行的單元格&#xff0c;設置鼠標禁用屬性讓高亮行繼承父元素的背景色 考慮到表格的第一列是勾選框&#xff0c;因此僅選擇 tr 下除了第一…

認識vue-admin

認識vue-admin **核心交付:** 為什么要基于現成架子二次開發 什么是二次開發&#xff1a;基于已有的代碼&#xff08;項目工程&#xff0c;腳手架&#xff09;開進行新功能的開發 所以看懂已有的框架中的既有代碼&#xff0c;變得很重要了 1. 背景知識 后臺管理系統是一種最…

無人機航跡規劃:孟加拉虎優化( Savannah Bengal Tiger Optimization ,SBTO)算法求解無人機路徑規劃MATLAB

一、孟加拉虎優化算法 孟加拉虎優化&#xff08; Savannah Bengal Tiger Optimization &#xff0c;SBTO&#xff09;算法模擬了孟加拉虎的群體狩獵行為&#xff0c;采用了獵物搜索、隱身接近和攻擊狩獵三種策略。 參考文獻&#xff1a; [1]Yujing Sun, Xingguo Xu. Savann…

sib報錯:com.*.xctrunner is not in your device!

1、問題描述 在使用sonic集成IOS設備的時候,我們需要通過sonic-agent服務去識別IOS設備。但是在識別的時候提示如下問題: 本質就是在你這個設備中找不到這個設備也就是找不到WebDriverAgentRunner,但是確實安裝了,甚至appium可以正常的調用。 或執行如下命令的時候報錯:…

c++中什么時候應該使用final關鍵字?

在C中&#xff0c;final關鍵字是自C11標準引入的重要特性&#xff0c;主要用于類繼承和虛函數重寫機制的約束。下面從技術原理、使用場景和最佳實踐三個維度進行系統分析&#xff0c;并給出工業級代碼示例。 目錄 一、技術原理深度解析 二、關鍵使用場景分析 1. 類級別的fi…

【AI】Docker中快速部署Ollama并安裝DeepSeek-R1模型: 一步步指南

【AI】Docker中快速部署Ollama并安裝DeepSeek-R1模型: 一步步指南 一、前言 為了確保在 Docker 環境中順利安裝并高效運行 Ollama 以及 DeepSeek 離線模型&#xff0c;本文將詳細介紹整個過程&#xff0c;涵蓋從基礎安裝到優化配置等各個方面。通過對關鍵參數和配置的深入理解…

文件夾上傳到github分支最后github上面還是沒有文件和文件夾

環境&#xff1a; github 問題描述&#xff1a; 文件夾上傳到github分支最后github上面還是沒有文件和文件夾, 和這樣一樣 解決方案&#xff1a; 從 git ls-tree -r HEAD 的輸出中可以看到&#xff0c;metahuman-stream 文件夾顯示為如下內容&#xff1a; 160000 commi…

【JavaEE進階】驗證碼案例

目 &#x1f332;實現說明 &#x1f384;Hutool介紹 &#x1f333;準備工作 &#x1f334;約定前后端交互接口 &#x1f6a9;接口定義 &#x1f6a9;實現服務器后端代碼 &#x1f6a9;前端代碼 &#x1f6a9;整體測試 &#x1f332;實現說明 隨著安全性的要求越來越?…

4G模塊非必要,不關機!關機建議先進飛行模式

給4G模組VBAT斷電關機&#xff0c;模組關機前未能及時退出當前基站&#xff0c;會有什么影響呢&#xff1f; 基站會誤以為設備還在線&#xff0c;下次開機仍會拿著上次駐網信息去連基站。基站一看&#xff0c;上次鏈接還在——認為你是非法設備&#xff0c;拒絕鏈接&#xff…

Flutter中 List列表中移除特定元素

在 Dart 語言里&#xff0c;若要從子列表中移除特定元素&#xff0c;可以使用以下幾種方法&#xff0c;下面為你詳細介紹&#xff1a; 方法一&#xff1a;使用 where 方法創建新列表 where 方法會根據指定的條件篩選元素&#xff0c;然后通過 toList 方法將篩選結果轉換為新列…