【JavaEE進階】MyBatis通過注解實現增刪改查

目錄

🍃前言

🍀打印日志

🌴傳遞參數

🎋增(Insert)

🚩返回主鍵

🎄刪(Delete)

🌲改(Update)

🌳查(Select)

🚩起別名

🚩結果映射

🚩開啟駝峰命名(推薦使用)


🍃前言

首先我們準備相應的表如下:

application.yml配置文件內容如下:

UserInfo類代碼如下:

以下所有操作都是在該接口進行操作:所有測試單元代碼都是在如下代碼里面完成的:

🍀打印日志

在學習這些操作之前,我們先來學習MyBatis?志打印

在Mybatis當中我們可以借助?志,查看到sql語句的執?、執?傳遞的參數以及執?結果

在配置?件中進?配置即可

yml配置:

重新運?上述單元測試中的程序,可以看到SQL執?內容,以及傳遞參數和執?結果

未配置日志:

配置日志:

🌴傳遞參數

需求:查找id=1的??,對應的SQL就是:select * from userinfo where id=1

代碼:

但是這樣的話, 只能查找id=1的數據,所以SQL語句中的id值不能寫成固定數值,需要變為動態的數值 解決?案:在queryUserInfo?法中添加?個參數(id),將?法中的參數,傳給SQL語句

使? #{} 的?式獲取?法中的參數

代碼:

生成測試代碼:

運行結果:

注意:如果mapper接??法形參只有?個普通類型的參數,#{…}??的屬性名可以隨便寫,如:#{id}、#{value}。建議和參數名保持?致
如果有多個參數,屬性名一定要與參數名保持一致,當然也可以進行修改,具體方法后面會詳細講解

也可以通過 @Param ,設置參數的別名,如果使? @Param設置別名,#{...}??的屬性名必須和@Param 設置的?樣

代碼:

運行結果:

🎋增(Insert)

我們采用@Inset注解實現,具體實現如下:

返回Integer是為了知道對該數據庫更改了多少行。

這里由于傳遞參數過多,我們使用對象進行傳遞,對對象相應參數進行賦值即可。

我們使用測試單元進行測試,測試代碼如下:???????

啟動測試代碼,我們可以看到相應的日志:

再查詢相應的數據庫時我們就可以看到,添加成功的數據

如果設置了 @Param 屬性,#{...}需要使?參數.屬性來獲取

代碼:???????

運行結果:???????

🚩返回主鍵

Insert 語句默認返回的是受影響的?數

但有些情況下,數據插?之后,還需要有后續的關聯操作,需要獲取到新插?數據的id

?如訂單系統

當我們下完訂單之后,需要通知物流系統,庫存系統,結算系統等,這時候就需要拿到訂單ID

如果想要拿到?增id,需要在Mapper接?的?法上添加?個Options的注解

代碼:

useGeneratedKeys:這會令MyBatis使?JDBC的getGeneratedKeys?法來取出由數據庫內部?成的主鍵(?如:像MySQL和SQL Server這樣的關系型數據庫管理系統的?動遞增字段),默認值:false.
keyProperty:指定能夠唯?識別對象的屬性,MyBatis會使?getGeneratedKeys的返回值或insert語句的selectKey?元素設置它的值,默認值:未設置(unset)

也就是說把自增id放到了"id"屬性當做,現在可以通過獲取id屬性來打印自增id

測試:???????

運行結果:

🎄刪(Delete)

刪除代碼如下:

測試單元代碼如下:

運行結果如下:

查詢數據庫如下:

🌲改(Update)

將id為5的密碼改為000000,接口代碼如下:

更新代碼如下:

測試單元代碼如下:

啟動測試后,觀察日志如下:

查詢數據庫如下:

🌳查(Select)

我們查詢所有數據,并用日志打印出來,代碼如下:

測試單元代碼如下:

單元測試執行如下:

注意事項:

MyBatis會根據?法的返回結果進?賦值.
?法?對象UserInfo接收返回結果,MySQL查詢出來數據為?條,就會?動賦值給對象.
?法?List接收返回結果,MySQL查詢出來數據為?條或多條時,也會?動賦值給List.
但如果MySQL查詢返回多條,但是?法使?UserInfo接收,MyBatis執?就會報錯.

從運?結果上可以看到,我們SQL語句中,查詢了delete_flag,create_time,update_time,但是這?個屬性卻沒有賦值.

這是什么原因呢“

當?動映射查詢結果時,MyBatis會獲取結果中返回的列名并在Java類中查找相同名字的屬性(忽略??寫)。這意味著如果發現了ID列和id屬性,MyBatis會將列ID的值賦給id屬性

但是由于數據庫與java命名規則不同,數據庫的蛇形將轉換成駝峰,所以無法識別。

解決方法有以下三種:

  1. 起別名
  2. 結果映射
  3. 開啟駝峰命名

🚩起別名

在SQL語句中,給列名起別名,保持別名和實體類屬性名?樣

再次運行查看???????

就可以看到對應屬性已經有值了

但是這種方式一般不推薦,因為相當于將這個工作交給數據庫來做了。會降低效率,且不可控

🚩結果映射

使用注解,以及相關操作如下:

測試結果:

如果其他SQL,也希望可以復?這個映射關系,可以給這個Results定義?個名稱

@Results注解里面還有一個id屬性,也就是給它起個名

此時就可以通過@ResultMap注解進行映射,也就是映射@Results中的id對應的value

🚩開啟駝峰命名(推薦使用)

通常數據庫列使?蛇形命名法進?命名(下劃線分割各個單詞),?Java屬性?般遵循駝峰命名法約定.為了在這兩種命名?式之間啟??動映射,需要將mapUnderscoreToCamelCase 設置為true。

application.yml配置如下:

僅限遵守兩種命名規則的轉換。

這時候我們直接使用查詢即可

代碼:

單元測試代碼:

運行結果:

已經進行了自動映射,字段全部進?正確賦值

注意:在表結構的設計中,必須要有三個字段,這是企業規范,這幾個字段哪怕業務不需要也要有,當前可能不用,防止后續要使用。數據庫的修改是一個非常麻煩的過程!

  • 1. 自增Id
  • 2. 創建日期(create_time,created_time叫什么名字不重要)
  • 3. 更新日期(update_time叫什么名字不重要)

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

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

相關文章

【分布式理論14】分布式數據庫存儲:分表分庫、主從復制與數據擴容策略

文章目錄 一、分表分庫1. 數據分表的必要性與方式2. 數據分庫原則與優勢 二、主從復制1. 讀寫分離架構設計2. 數據復制方式3. MySQL實現主從復制4. MySQL主從復制實踐與高可用方案 三、數據擴容 隨著業務的不斷發展和數據量的增長,傳統的單機關系型數據庫已經逐漸不…

vxe-grid 通過配置式給單元格字段格式化樹結構數據,轉換樹結構節點

vxe-grid 通過配置式給單元格字段格式化樹結構數據,轉換樹結構節點 比如用戶自定義配置好的數據源,通過在列中配置好數據,全 json 方式直接返回給前端渲染,不需要寫任何格式化方法。 官網:https://vxetable.cn npm i…

延遲任務的11種實現方式(下)!!

接上文: Redisson的RDelayedQueue Redisson他是Redis的兒子(Redis son),基于Redis實現了非常多的功能,其中最常使用的就是Redis分布式鎖的實現,但是除了實現Redis分布式鎖之外,它還實現了延遲…

BS5852英國家具防火安全條款主要包括哪幾個方面呢?

什么是BS5852檢測? BS5852是英國針對家用家具的強制性安全要求,主要測試家具在受到燃燒香煙和火柴等火源時的可燃性。這個標準通常分為四個部分進行測試,但實際應用中主要測試第一部分和第二部分,包括煙頭測試和利用乙炔火焰模擬…

如何使用Spark SQL進行復雜的數據查詢和分析

使用Spark SQL進行復雜的數據查詢和分析是一個涉及多個步驟和技術的過程。以下是如何使用Spark SQL進行復雜數據查詢和分析的詳細指南: 一、準備階段 環境搭建: 確保已經安裝并配置好了Apache Spark環境。準備好數據源,可以是CSV文件、JSON…

iOS事件傳遞和響應

背景 對于身處中小公司且業務不怎么復雜的程序員來說,很多技術不常用,你可能看過很多遍也都大致了解,但是實際讓你講,不一定講的清楚。你可能說,我以獨當一面,應對自如了,但是技術的知識甚多&a…

FFmpeg 源碼編譯安裝

參考: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu Linux (Ubuntu) 下載 FFmpeg 源碼,并將其解壓,這里我將它放在 ~/ffmpeg_source 目錄下; cd ~/ffmpeg_sources wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org…

【pytest】編寫自動化測試用例命名規范README

API_autoTest 項目介紹 1. pytest命名規范 測試文件: 文件名需要以 test_ 開頭或者以 _test.py 結尾。例如,test_login.py、user_management_test.py 這樣的命名方式,pytest 能夠自動識別并將其作為測試文件來執行其中的測試用例。 測試類…

Windows桌面系統管理5:Windows 10操作系統注冊表

Windows桌面系統管理0:總目錄-CSDN博客 Windows桌面系統管理1:計算機硬件組成及組裝-CSDN博客 Windows桌面系統管理2:VMware Workstation使用和管理-CSDN博客 Windows桌面系統管理3:Windows 10操作系統部署與使用-CSDN博客 Wi…

llama.cpp將sensor格式的大模型轉化為gguf格式

前言 ollama本地只能導入gguf格式的大模型文件,將safetensors 文件轉化為gguf格式。需要使用 llama.cpp 這個開源工具。以下是使用 llama.cpp 轉換 .safetensors 格式模型到 .gguf 格式的詳細步驟: 1. 首先克隆并編譯 llama.cpp: 克隆項目 git clone https://gi…

【運維】源碼編譯安裝cmake

背景: 已經在本地源碼編譯安裝gcc/g,現在源碼安裝cmake 下載源碼 下載地址:CMake - Upgrade Your Software Build System 安裝步驟: ./bootstrap --prefix/usr/local/cmake make make install 錯誤處理 1、提示找不到libmpc.…

如何通過AI優化敏捷開發中的任務管理與分配?

用ChatGPT做軟件測試 在現代軟件開發中,敏捷開發(Agile)已成為一種廣泛采用的開發方法論,其核心思想是強調快速響應變化、與客戶的持續溝通以及團隊協作的高效性。然而,隨著項目規模的不斷擴大,敏捷開發面臨…

petalinux高版本設置自動登錄和開機自啟動配置

petalinux-config -c rootfs 依次選擇 Image Features -> serial-autologin-root 這是配置 進來就是root權限 創建并安裝名為 myapp-init 的新建應用程序 petalinux-create -t apps --template install -n myapp-init --enable 編輯 project-spec/meta-user/recipes-…

STM32 USB 設備的描述信息作用

在使用 STM32 USB 功能時 usbd_desc.c 文件中定義了一段宏,以下解每段宏的用途。 #define USBD_VID 1155 #define USBD_LANGID_STRING 1033 #define USBD_MANUFACTURER_STRING "STMicroelectronics" #define US…

React通用登錄/注銷功能實現方案(基于shadcn/ui)

React通用登錄/注銷功能實現方案(基于shadcn/ui) 一、功能需求分析二、通用功能封裝1. 通用登錄表單組件2. 認證Hook封裝 三、功能使用示例1. 登錄頁面實現2. 用戶菜單實現 四、路由保護實現五、方案優勢 一、功能需求分析 需要實現以下核心功能&#x…

jEasyUI 創建學校課程表

jEasyUI 創建學校課程表 引言 隨著信息技術的飛速發展,教育行業也迎來了數字化轉型的浪潮。學校課程表的創建和管理作為教育信息化的重要組成部分,其效率和準確性直接影響到學校的教學秩序。jEasyUI,作為一款優秀的開源UI框架,憑借其易用性、靈活性和豐富的組件,成為了許…

Linux 內核中的 container_of 宏:以 ipoib_rx_poll_rss 函數為例

在 Linux 內核編程中,container_of 是一個非常實用的宏,主要用于通過結構體的成員指針來獲取包含該成員的整個結構體的指針。rx_ring = container_of(napi, struct ipoib_recv_ring, napi); 在代碼中就是利用了這個宏,下面我們詳細分析它的作用和工作原理。 背景知識 在內…

【論文學習】RVS-FDSC:一種基于四方向條帶卷積的視網膜血管分割方法以增強特征提取

寫在前面:本博客僅作記錄學習之用,部分圖片來自網絡,如需引用請注明出處,同時如有侵犯您的權益,請聯系刪除! 文章目錄 前言論文論文內容RSC模塊MSPF2 模塊RPDA模塊 實驗效果 總結互動致謝參考往期回顧 前言…

藍橋杯篇---IAP15F2K61S2矩陣鍵盤

文章目錄 前言簡介矩陣鍵盤的工作原理1.行掃描2.檢測列狀態3.按鍵識別 硬件連接1.行線2.列線 矩陣鍵盤使用步驟1.初始化IO口2.掃描鍵盤3.消抖處理4.按鍵識別 示例代碼:4x4矩陣鍵盤掃描示例代碼:優化后的矩陣鍵盤掃描注意事項1.消抖處理2.掃描頻率3.IO口配…

【ISO 14229-1:2023 UDS診斷(ECU復位0x11服務)測試用例CAPL代碼全解析?】

ISO 14229-1:2023 UDS診斷【ECU復位0x11服務】_TestCase19 作者:車端域控測試工程師 更新日期:2025年02月19日 關鍵詞:UDS診斷協議、ECU復位服務、0x11服務、ISO 14229-1:2023 TC11-019測試用例 用例ID測試場景驗證要點參考條款預期結果TC…