Mybatis操作數據庫(注解+xml兩個方式)

文章目錄

  • 1.個人回顧
  • 2.關于mybatis注解的說明
  • 3.字段和屬性不匹配的解決方案
    • 3.1第一個方案
    • 3.2第二個方案
    • 3.3第三個方案
  • 4.xml路徑配置
  • 5.xml里面的字段映射

1.個人回顧

剛剛翻看了一下自己的這個之前寫的博客,上一次和這個javaee相關的博客還是去年寫的,也就是2024年的12.23號,這個還是一個非常久遠的日子,我上個學期還是學習的java,是從10月底開始學習的,之后學習的這個日程就拉的比較滿,所以這個進度很快,但是后來做了這個網頁端的五子棋對戰的這個項目(廢棄中),因為這個做到設計棋盤的時候這個技術看不懂,而且這個效果沒做出來,所以后來也沒做了(其實這個項目里面很多功能還沒實現,包括這個網絡版本的對戰);

然后就繼續去學習了這個Mybatis的日志相關的這個內容,包括這個注解是如何去使用的等等吧,但是后來好像有沒學了,當時是想著跨專業考驗的,去學習了這個自動控制原理的內容,java就沒咋學習了;

即使是后面的這個寒假,我也是在作這個魚皮的項目:一個是用戶管理中心(我覺得這個項目適合入手,讓我了解了一下這個整體的邏輯,但是我覺得魚皮的這個課程不是很好,我無法接受的就是最后的一點,他的這個系統做出來之后,非要去添加這個星球的編號這個屬性相當于就是去修改這個實體類,這個后果就是所有的東西都需要變,這個就比較惡心,因為我覺得這個需求分析結束之后,這個開發的過程中是不應該去修改我們的這個需求的,所以當他最后去添加這個星球編號的屬性的時候,我就真的無法接受,而且我覺得當時最開始在前端的那個umi和vue的時候,也耽誤了很長的時間,現在回想起來,那些都是沒有必要的,我覺得);

寒假的時候,包括開學之后,都是在學習這個算法(藍橋杯準備的——,大部分時間在學習是這個數學建模的相關內容,自己創建了一個知識星球,一直在搞這個內容,運營自己的星球,反正就是嘗試了很多的這個內容,對于這個鳶尾花書也比較感興趣,也寫了不少的關于這個部分內容的文章;

前段時間準備實習簡歷,花了三天的時間水了一個SSM項目–論壇系統,雖然好多東西都不會,但是也用自己的云服務器把那個項目上限了,補了好多關于項目里面的技術點,但是畢竟是突擊嗎嘛,掌握的也不咋地,但是面試的時候老師也沒有問相關的內容,我也覺得這個就是一個破網站,都可以用微信交流,誰會去用這個論壇,一點實際意義也沒有,可能,只有教學的意義吧~~

但是我昨天和數學建模的線下聊天,我確實真切的體會到,興趣畢竟是興趣,我在這個數學建模上面投入再大的時間,他終究無法幫助我找到好工作,工作,吃飯的這個事情還是要看這個java的技術水平,我之前的這個路線上面確實出現了問題;

但是我不后悔,我認為沒有什么對與不對,自己喜歡就好,后面還是老老實實的學習java吧,畢竟這個學期是自己學習這個java的最后的一段時間了;

2.關于mybatis注解的說明

注解的話,是我們的springboot項目里面的很重要的一個部分,因為我們在進行這個項目的開發的這個過程里面,經常會使用到很多的這個注解,但是這個畢竟是為了解決我們的Mybatis框架里面的這個查詢的問題;

其實解決的這個查詢的問題,或者說想要實現這個功能,我們既可以使用這個注解的方式,也是可以使用這個文章后半部分的這個xml的方式;

下面我們使用這個@select這個注解作為我們的案例,進行注解的使用的相關的這個說明,我們的下面的這個方法想要實現的這個功能就是查詢我們的這個數據庫里面的這個表的用戶的相關信息,queryUserList就是我們定義的這個方法,注解后面的這個括號里面的內容實際上就是我們的navicate里面的這個想啊哈尋得語句,我們可以在這個navicate這樣的工具里面進行測試之后,沒問題的話放到這個注解的內容里面去即可;

這個事進行的數據庫表里面的字段內容的查詢,其他的幾個方法也是類似的;

image-20250323112558024

3.字段和屬性不匹配的解決方案

這個是什么情況下會遇到呢?我們為什么會遇到這樣的這個問題:

1)java里面主要的這個命名的規范就是駝峰命名;

2)數據庫里面的這個字段經常使用我們的這下劃線分割(例如這個字段的刪除時間,deletetime在java里面就是deleteTime,在我們的數據庫里面就是deleteTime,因此代碼里面就會出現無法識別;

類似于這個username,password之類的,這個就是很容易對應上的,這樣的這個字段一般情況下也不會遇到很大的對應問題,因此這個問題主要是出現在組合的屬性字段上面;

3.1第一個方案

第一個解決方式:

查詢SQL語句的重新命名,就是我們進行這個select delete_time as deleteTime from userinfo,這樣進行重命名,通過這個as把我們的數據庫里面的字段和我們的java里面的這個實體類的這個不同之處解決掉這樣就可以解決這個不匹配的問題;

其實如果無法識別的結果就是測試的時候打印出來的就是null這樣的數據罷了,但是其實在我們的數據庫里面是存在這個具體的數據的;

3.2第二個方案

第二個解決方式:定義results這個注解,里面是我們需要進行說明備注的這個注解,column表示的就是這個字段在數據庫里面的名字,后面的property就是在我們的實體類里面的名字這樣對應上就可以了;

image-20250323115030391

3.3第三個方案

第三個解決的方式:配置文件里面添加上下面的這個自動駝峰轉換的配置,就可以自動解決這個兩者之間不匹配的問題;

image-20250323115005283

4.xml路徑配置

就是在我們的yml配置文件里面去寫這個xml路徑的地址,也就是這個location

classpath就是對于哦們的這個xml文件的路徑進行指定,mapper就是我們的文件夾的名字,*就是通配符,表示使用mapper.xml文件名結尾的文件,我們的這個UserInfoXmlMapper就是符合這個要求的;

如果你的這個mapper里面涉及復雜結構,可以使用**也就是兩個星號作為通配符,這個表示的就是兩層或者是多層目錄的這個情況;

image-20250323123811309

5.xml里面的字段映射

定義相關的方法:在我們的這個mapper里面直接定義即可,下面使用刪除和查詢作為示例,其實寫完方法之后,沒有在xml里面去說明,就會報紅線,我們點擊這個statement就可以默認添加方法;

image-20250323123905115

下面是我們的這個resource下面的這個xml具體的寫法和一些相關的這個注意事項;

namespace就是指定這哦xml文件的位置,這個是用的類似于Html雙標簽的方法,delete和select不同的地方就是多了這個resulttype就是實體類的問題,因為我們返回的是對象,需要說明一下是什么對象,所以自動生成的這個代碼里面出現了這個resultType進行指定;

image-20250323123931066

下面的這個就是xml里面的這個字段映射的另外一個實現的方法途徑:這個事和我們的注解不同的地方,他這個里面的resultMap就是我們自己定義的,然后我們再這個最上面的需要進行說明,也就是下面的這個代碼里面的5-10行,這個第五行里面的id就是我們的這個低21行里面的resultMap的名字,這個type就是我們的實體類里面的位置;

6-9行里面的內容是我們的這個逐漸和屬性說明,其中這個主鍵不是一定要有的,但是其他的幾個都是一定需要的;

Map的名字,這個type就是我們的實體類里面的位置;

6-9行里面的內容是我們的這個逐漸和屬性說明,其中這個主鍵不是一定要有的,但是其他的幾個都是一定需要的;

image-20250323143504471

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

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

相關文章

SysVinit和Systemd的系統運行級別

Linux運行級別 SysVinit系統(init守護進程)Linux系統運行級別SysVinit系統(init守護進程)查看Linux運行級別SysVinit系統(init守護進程)修改運行級別: Systemd守護進程Linux系統運行級別systemd查看運行級別Systemd查看系統當前運行級別 systemd修改運行級別multi-u…

Mysql-經典實戰案例(11):深度解析Sysbench壓測(從入門到MySQL服務器性能驗證)

引言 如何用Sysbench壓測滿足mysql生產運行的服務器? Sysbench返回的壓測結果如何解讀? 別急,本文會教大家如何使用并且如何解讀壓測的結果信息,如何對mysql服務器進行壓測! 一、Sysbench核心功能全景解析 1.1 工…

vscode終端不識別npm 無法解析npm

vscode 用以管理員打開識別npm vscode 用普通用戶打開不識別npm 剛換了一臺新電腦,尋思安裝各種環境,一頓操作猛如虎,當最后一個打開vscode后,運行項目發現,新建終端>npm run dev 無法識別。 在cmd 中 打node -…

springboot body 轉對象強驗證屬性多余屬性拋錯誤

在Spring Boot中,當使用RequestBody注解來接收HTTP請求中的JSON數據并將其轉換為Java對象時,Spring默認會忽略額外的屬性。這意味著如果發送的JSON包含一些目標對象中沒有定義的屬性,Spring不會報錯,這些額外的屬性會被簡單地忽略…

01. Linux嵌入式系統學習筆記(一)(linux基礎指令)

一. linux基礎操作指令 1. 新建文件和目錄 (1) 新建文件 touch 命令:用于創建空文件。 touch filename.txt 如果文件已存在,touch 會更新文件的訪問時間和修改時間。 (2) 新建目錄 mkdir 命令:用于創建目錄。 mkdir directoryname 使…

Java 列表復制與對象引用

Java 列表復制與對象引用 一、知識點 1. 對象引用的基本概念 在 Java 中&#xff0c;List<School> 這樣的集合存儲的并不是真正的對象&#xff0c;而是對象的“地址”&#xff08;引用&#xff09;。就好比你有一個文件柜&#xff0c;文件柜里放的不是文件本身&#x…

如何理解 Apache Iceberg 與湖倉一體(Lakehouse)?

一、什么是湖倉一體&#xff08;Lakehouse&#xff09;&#xff1f; 湖倉一體是一種融合了數據湖的靈活存儲能力與數據倉庫的高效分析功能的現代數據架構。它通過整合兩者的優勢&#xff0c;解決了傳統架構的局限性&#xff0c;為企業數據處理提供了更全面的解決方案。 數據湖…

Android面試總結之Android RecyclerView:從基礎機制到緩存優化

引言 在 Android 開發中&#xff0c;RecyclerView是高效展示列表數據的核心組件。其強大的性能源于獨特的視圖復用機制和四級緩存體系。本文將結合源碼與示例&#xff0c;帶你深入理解RecyclerView的工作原理與優化策略。 核心組件 RecyclerView&#xff1a;作為容器視圖&am…

【鴻蒙開發】Hi3861學習筆記- TCP客戶端

00. 目錄 文章目錄 00. 目錄01. TCP概述02. TCP應用場景03. TCP和UDP比較04. TCP相關API05. TCP編程流程06. 硬件設計07. 軟件設計08. 實驗現象09. 附錄 01. TCP概述 TCP&#xff08;Transmission Control Protocol&#xff09;是一種面向連接、可靠的傳輸層協議&#xff0c;旨…

【負載均衡系列】Keepalive

一、Keepalived 的核心功能 Keepalived 是一款用于實現 ?高可用(HA)? 和 ?負載均衡 的開源工具,核心基于 ?VRRP(Virtual Router Redundancy Protocol)? 協議,工作在網絡四層(傳輸層)和七層(應用層)。 主要用途: 通過虛擬IP(VIP)實現服務高可用(主備切換)。…

2025-03-25 學習記錄--C/C++-PTA 習題9-3 平面向量加法

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、題目描述 ?? 習題9-3 平面向量加法 本題要求編寫程序&#xff0c;計算兩個二維平面向量的和向量。 輸入格式: ? 輸入在…

23種設計模式-橋接(Bridge)設計模式

橋接設計模式 &#x1f6a9;什么是橋接設計模式&#xff1f;&#x1f6a9;橋接設計模式的特點&#x1f6a9;橋接設計模式的結構&#x1f6a9;橋接設計模式的優缺點&#x1f6a9;橋接設計模式的Java實現&#x1f6a9;代碼總結&#x1f6a9;總結 &#x1f6a9;什么是橋接設計模式…

python:music21 構建 LSTM+GAN 模型生成爵士風格音樂

keras_lstm_gan_midi.py 這是一個結合 LSTM 和 GAN 生成爵士風格音樂的完整Python腳本。這個實現包含音樂特征提取、對抗訓練機制和MIDI生成功能&#xff1a; import numpy as np from music21 import converter, instrument, note, chord, stream from tensorflow.keras.mode…

go:前后端分離

1.前端代碼 新建一個前端文件夾&#xff0c;在該文件夾下新建一個.html文件&#xff0c;寫入自己的html代碼。 前端搞定。 2.后端代碼 其核心是掛載路由接受前端傳來的數據核心代碼如下&#xff1a; func main() { // 服務運行提示 fmt.Println("go web server is runn…

大數據學習(86)-Zookeeper去中心化調度

&#x1f34b;&#x1f34b;大數據學習&#x1f34b;&#x1f34b; &#x1f525;系列專欄&#xff1a; &#x1f451;哲學語錄: 用力所能及&#xff0c;改變世界。 &#x1f496;如果覺得博主的文章還不錯的話&#xff0c;請點贊&#x1f44d;收藏??留言&#x1f4dd;支持一…

JetsonNano —— 4、Windows下對JetsonNano板卡燒錄刷機Ubuntu20.04版本(官方教程)

介紹 NVIDIA Jetson Nano? 開發者套件是一款面向創客、學習者和開發人員的小型 AI 計算機。按照這個簡短的指南&#xff0c;你就可以開始構建實用的 AI 應用程序、酷炫的 AI 機器人等了。 燒錄刷機 1、下載 Jetson Nano開發者套件SD卡映像 解壓出.img文件并記下它在計算機上的…

HTML5 拖放(Drag and Drop)學習筆記

一、HTML5 拖放簡介 HTML5 拖放&#xff08;Drag and Drop&#xff09;是HTML5標準的一部分&#xff0c;允許用戶抓取一個對象并將其拖動到另一個位置。拖放功能在現代網頁中非常常見&#xff0c;例如文件上傳、任務管理、布局調整等場景。 HTML5 拖放功能支持以下瀏覽器&…

文件I/O--C++的文件操作

一、打開文件&#xff0c;從文件中讀取、寫入文件 從文件中讀取數據&#xff1a; #include<fstream> //fstream File stream:文件流 #include<iostream> //fstream包含了 iostream&#xff0c;所以這句可以省略&#xff0c;現在不能了 using namespace std;i…

Redis GEO 命令詳解:輕松實現“附近的人“功能

目錄 引言 Redis GEO命令概述 什么是GEO命令&#xff1f; 主要命令詳解 命令應用示例 添加地點信息 查詢兩地距離 查詢附近的城市 實現"查找附近的人"功能 功能需求與實現思路 基本需求 實現思路 命令實現方案 存儲用戶位置 查詢附近的用戶 Java代碼實…

C語言貪吃蛇實現

When the night gets dark,remember that the Sun is also a star. 當夜幕降臨時&#xff0c;請記住太陽也是一顆星星。 ————《去月球海灘篇》 目錄 文章目錄 一、《貪吃蛇》游戲介紹 二、WIN32部分接口簡單介紹 2.1 控制臺窗口大小設置 2.2 命令行窗口的名稱的變更 2…