MyBatis之數據操作增刪改查基礎全解

目錄

1.??MyBatis添加數據

1.1.?持久層接口添加方法

1.2.?映射文件添加標簽

1.3.?編寫測試方法

2.???MyBatis修改數據

2.1. 代碼的優化

2.2.?持久層接口添加方法

2.3.?映射文件添加標簽

2.4. 編寫測試方法

3.?🗑?MyBatis刪除數據與根據Id查詢

3.1. 刪除用戶

3.2.?根據ID查詢用戶?

4.?🌫?MyBatis模糊查詢

4.1.?使用 # 定義參數

?4.2.?使用$定義參數

?4.3.?使用 定義參數

?

5. 總結


💡【開發哲學共勉】

在 MyBatis 的世界里,事務提交是對數據變更的鄭重承諾,參數綁定藏著對安全的敬畏,資源閉環是對系統的溫柔守護,而接口與映射的一 一對應,恰是規范賦予效率的禮物

🎉 前言

本節來講解一下如何使用MyBatis來對數據庫做一個基本的增刪改查操作,希望能夠幫助到你(??????)??

個人主頁:藝杯羹🌿

系列專欄:MyBatis🚀

1.??MyBatis添加數據

現在來演示一下如何添加用戶

1.1.?持久層接口添加方法

// 寫在UserMapper接口里
void add(User user);

1.2.?映射文件添加標簽

// 寫在UserMapper.xml配置文件中
<insert id="add" parameterType="com.itbaizhan.pojo.User">insert into user(username,sex,address) values(#{username},#{sex},#{address})
</insert>

1.3.?編寫測試方法

// 在測試包下的測試類里進行測試
@Test
public void testAdd() throws Exception{InputStream is = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();SqlSessionFactory factory = builder.build(is);SqlSession session = factory.openSession();UserMapper mapper = session.getMapper(UserMapper.class);User user = new User("羅陽", "男", "北京");mapper.add(user);// 提交事務,默認手動提交事務// 所以要先提交事務,然后再關閉資源// 如果沒有提交事務,雖然不會報錯,但是數據不會寫到表當中session.commit();session.close();is.close();}    

接口如圖:

注意:

  1. 接口方法的參數類型為POJO類型時,SQL語句中綁定參數時使用 #{POJO的屬性名} ?即可
  2. MyBatis事務默認手動提交,所以在執行完增刪改方法后,需要手動調用SqlSession對象的事務提交方法,否則數據庫將不發生改變
    查詢不改變數據庫,所以不用提交事務

2.???MyBatis修改數據

因為在操作數據庫的時候,像前面的配置獲取SqlSession的代碼,是可以復用的,所以這里先將這個配置獲取SqlSession的代碼提取出來

2.1. 代碼的優化

MyBatis的測試方法在操作數據庫前都需要獲取代理對象,操作數據庫后都需要釋放資源,可以利用Junit的前置后置方法,優化測試類代碼

InputStream is = null;
SqlSession session = null;
UserMapper userMapper = null;@Before
public void before() throws IOException {// (1)讀取核心配置文件is = Resources.getResourceAsStream("SqlMapConfig.xml");// (2)創建SqlSessionFactoryBuilder對象SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// (3)SqlSessionFactoryBuilder對象獲取SqlSessionFactory對象SqlSessionFactory factory = builder.build(is);// (4)SqlSessionFactory對象獲取SqlSession對象session = factory.openSession();// (5)獲取代理對象userMapper = session.getMapper(UserMapper.class);
}@After
public void after() throws IOException {// 釋放資源session.close();is.close();
}

現在來修改一下用戶

2.2.?持久層接口添加方法

void update(User user);

2.3.?映射文件添加標簽

<update id="update" parameterType="com.yibeigen.pojo.User">update Userset username = #{username}, sex = #{sex}, address=#{address}where id = #{id}
</update>

2.4. 編寫測試方法

// 這里直接使用Mapper動態代理就可以了(??????)??
@Test
public void testUpdate(){User user = new User(6, "老王", "男", "溆浦");userMapper.update(user);sqlSession.commit();
}

3.?🗑?MyBatis刪除數據與根據Id查詢

因為刪除和查詢都和上面操作差不多,所以這里就兩個一起講了

3.1. 刪除用戶

1. 持久層接口添加方法
void delete(int userId);

2. 映射文件添加標簽

<delete id="delete" parameterType="int">delete from user where id = #{id}
</delete>

:當方法的參數類型是簡單數據類型時,#{}中可以寫任意名稱
簡單數據類型:基本數據類型字符串

3. 編寫測試方法

@Test
public void testDelete(){userMapper.delete(8);session.commit();
}

3.2.?根據ID查詢用戶?

1. 持久層接口添加方法
User findById( int userId );

2. 映射文件添加標簽

<select id="findById" parameterType="int" resultType="com.yibeigen.pojo.User">select * from user where id = #{userId}
</select>

3.?編寫測試方法

@Test
public void testFindById(){User user = userMapper.findById(1);System.out.println(user);
}

4.?🌫?MyBatis模糊查詢

模糊查詢一共有三個寫法:#, $, <bind>

4.1.?使用 # 定義參數

1.?持久層接口添加方法
List<User> findByNameLike(String username);

2.?映射文件添加標簽

<select id="findByUsernameLike" parameterType="String" resultType="com.yibeigen.pojo.User">select * from user where username like #{name}</select>

3.?編寫測試方法

@Test
public void testFindByNameLike(){List<User> users = userMapper.findByNameLike("%王%");for (User user:users){System.out.println(user);}
}

這里使用 # 和上面寫的#是一個意思,像這里的第2步映射文件中的 #{name} 就相當于是這個類中的name值
然后我們在測試類中傳值的時候,要注意加上 %?
我們看到在映射文件中,parameterType 的值為 string? 而沒有寫 java.lang.String?
這是因為,系統已經給 java.lang.String?取了別名 string,所以直接用就可以了
那么現在看看都給普通數據類型取了什么別名

數據類型別名數據類型別名
byte_byteBytebyte
long_longLonglong
short_shortShortshort
int_intIntegerint/integer
int_integerDoubledouble
double_doubleFloatfloat
float_floatBooleanboolean
boolean_booleanDatedate
StringstringBigDecimaldecimal/bigdecimal
ObjectobjectMapmap
HashMaphashmapListlist
ArrayListarraylistCollectioncollection
Iteratoriterator

?4.2.?使用$定義參數

模糊查詢如果不想在調用方法時參數加%,可以使用拼接參數的方式設置
Sql:

<select id="findByUsernameLike" parameterType="string" resultType="com.yibeigen.pojo.User">select * from user where username like '%${value}%'
</select>%${value}%:必須這么寫

測試方法寫法如下:

@Test
public void testFindByNameLike(){List<User> users = userMapper.findByUsernameLike("金");users.forEach(System.out::println);
}

#和$的區別:

  1. #表示sql模板的占位符,$表示將字符串拼接到sql模板中。
  2. #可以防止sql注入,一般能用就不用$。
  3. ${}內部的參數名必須寫value。?

?4.3.?使用 <bind> 定義參數

如果使用 #? 還不想在調用方法的參數中添加 %?
可以使用 <bind>?,<bind>? 允許我們在 Sql語句以外創建一個變量
并可以將其綁定到當前的Sql語句中。用法如下:

<select id="findByUsernameLike" parameterType="string" resultType="com.yibeigen.pojo.User"><bind name="likeName" value="'%'+username+'%'"/>select * from user where username like #{likeName}
</select>

測試方法寫法如下:

@Test
public void testFindByNameLike(){List<User> users = userMapper.findByUsernameLike("金");users.forEach(System.out::println);
}

5. 總結

到此,文章就告一段落,希望能夠幫助到你🙂?

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

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

相關文章

kbmMemTable Pro 7.82 Delphi 11 源代碼

kbmMemTable Pro 7.82 Delphi 11 源代碼KbmMemTable 是一個用于在 Win 32/64、Mac OS、Android 和 iOS 32/64 應用程序中存儲臨時數據的組件&#xff0c;這些應用程序可以使用 RAD Studio、Delphi、C Builder 或 FPC 等編程語言創建&#xff0c;同時您還可以高速訪問存儲在數據…

LeetCode Hot 100 除自身以外數組的乘積

給你一個整數數組 nums&#xff0c;返回 數組 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積 。題目數據 保證 數組 nums之中任意元素的全部前綴元素和后綴的乘積都在 32 位 整數范圍內。請 不要使用除法&#xff0c;且在 O(n) 時間復雜度內…

VC Code--常用的配置

原文網址&#xff1a;VC Code--常用的配置-CSDN博客 簡介 本文介紹VC Cod常用的配置。 1.字體大小 整體字體大小 左下角齒輪> Settings> Windows> Window: Zoom Level> 改為&#xff1a;2 編輯器字體大小&#xff08;如果調整了整體字體大小&#xff0c;此處…

大模型驅動的智能體:從GPT-4到o1的能力躍升

大模型驅動的智能體&#xff1a;從GPT-4到o1的能力躍升 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇的探索者。 ? 用代碼丈量世界&#xf…

200nl2sql

‘train_runtime’: 1375.1089, ‘train_samples_per_second’: 0.025, ‘train_steps_per_second’: 0.007, ‘train_loss’: 0.0, ‘num_tokens’: 115914.0, ‘completions/mean_length’: 76.4125, ‘completions/min_length’: 27.8, ‘completions/max_length’: 151.2, …

Transformer、BERT、GPT以及Embedding之間的關系

1. Transformer架構的兩大方向 Transformer分為兩大類應用&#xff0c;但劃分標準不是"分類vs生成"&#xff0c;而是編碼方式&#xff1a; Encoder架構&#xff08;代表&#xff1a;BERT&#xff09;&#xff1a; 使用Transformer的??編碼器??&#xff08;Encode…

ARM匯編編程(AArch64架構)課程 - 第7章:SIMD與浮點運算

目錄1. NEON寄存器關鍵特性數據排列示例2. 浮點指令2.1 FMUL指令2.2 FADD指令2.3 FCMP指令1. NEON寄存器 AArch64架構提供32個128位NEON向量寄存器&#xff08;V0-V31&#xff09;&#xff0c;支持SIMD并行計算 關鍵特性 寄存器類型數量位寬數據視圖Q寄存器32128bQ0-Q31D寄存…

Word2Vec模型詳解:CBOW與Skip-gram

Word2Vec模型詳解&#xff1a;CBOW與Skip-gram 目錄 模型概述理論基礎CBOW模型詳解Skip-gram模型詳解模型對比代碼實現詳解訓練過程分析應用場景實驗結果總結 模型概述 Word2Vec是一種用于生成詞向量的神經網絡模型&#xff0c;由Google在2013年提出。它包含兩種主要架構&am…

跨服務sqlplus連接oracle數據庫

背景&#xff1a;ogg程序同步數據。 目標庫&#xff1a;客戶oracle數據庫11.0.2.4.0&#xff0c;也就是11g的數據庫。源庫&#xff1a;業務組搭建的19c數據庫&#xff0c;剛安裝的oracle數據庫。ogg在源庫和目標庫系統都部署好了并且也可以通信。在目標庫系統使用sqlplus測試連…

虛擬機安裝與使用vim編輯器簡單使用

文章目錄1.VMware17許可證2.ubuntu虛擬機的顯示屏幕太小3.vmware 17 無法安裝 vmware tools4.buntu常用快捷鍵與命令5.vim文本編輯器參考資料&#xff1a;1.VMware17許可證 JU090-6039P-08409-8J0QH-2YR7F&#xff08;親測2025/7/8有效&#xff09; 2.ubuntu虛擬機的顯示屏幕…

Tomcat:啟用https(Windows)

1、在D盤cmd&#xff0c;使用keytool生成簽名&#xff08;365天&#xff09;&#xff08;密碼111111&#xff09;&#xff1a; keytool -genkey -alias tomcat -keyalg RSA -keysize 2048 -keystore keystore.jks -validity 365 2、在conf/server.xml中添加如下配置&#xff0…

A模塊 系統與網絡安全 第四門課 彈性交換網絡-2

今日目標 STP協議概述STP工作原理選舉根端口和指定端口BPDUMSTP工作原理及配置MSTP負載均衡1 STP協議概述 1.1 環路的危害 單點故障 PC之間的互通鏈路僅僅存在1個 任何一條鏈路出現問題&#xff0c;PC之間都會無法通信解決方案 提高網絡可靠性 增加冗余/備份鏈路產生新的問題 增…

人工智能-基礎篇-20-如何搭建一個人工智能知識庫?

1、前期準備階段 1、明確目標與范圍 目標&#xff1a;確定知識庫的核心用途&#xff08;如內部文檔共享、客戶服務支持、培訓材料存儲等&#xff09;。明確預期用戶群體及其需求。范圍&#xff1a;明確覆蓋部門&#xff08;如技術部、銷售部&#xff09;、知識類型&#xff08;…

存儲延時數據,幫你選數據庫和緩存架構

1. 理解存儲媒介量化延時類別描述延時緩存/內存L1 cache reference1 ns緩存/內存L2 cache reference4 ns緩存/內存Main memory reference&#xff08;DDR4&#xff0c;5 - 10 ns 為補充說明 &#xff09;100 ns網絡傳輸Send packet CA->Netherlands->CA150,000,000 ns&am…

人工智能領域的頂會

人工智能領域的頂會&#xff08;頂級學術會議&#xff09;通常按研究方向劃分&#xff0c;涵蓋機器學習、計算機視覺、自然語言處理、機器人學等多個子領域。這些會議以錄用標準嚴格、學術影響力高著稱&#xff0c;是全球AI研究者交流前沿成果的核心平臺。這些頂會的錄用論文通…

kotlin+MongoTemplate的時間類型為is_date類型 pymongo如何處理

來自AI回答 在 Kotlin 中使用 MongoTemplate&#xff08;來自 Spring Data MongoDB&#xff09;時&#xff0c;配置方式和 Java 是一致的&#xff0c;主要通過 MongoClientSettings、MongoTemplate Bean、以及 application.yml 配置完成。 ? 一、MongoTemplate 的配置方式 你可…

Python 機器學習核心入門與實戰進階 Day 7 - 復盤 + 綜合實戰挑戰

? 今日目標綜合應用本周所學的&#xff1a; 分類算法&#xff08;SVM、決策樹、隨機森林等&#xff09;模型調參&#xff08;GridSearchCV&#xff09;模型持久化&#xff08;joblib&#xff09;特征工程與數據構造構建一套完整的二分類建模流程&#x1f4d8; 項目任務說明構建…

C#版本的訓練AI模型軟件

程序介紹文檔 項目概述 HL.AI.train 是由深圳海藍智能開發的AI模型訓練與轉換工具&#xff0c;版本號1.2.1.0。該程序基于Windows Forms構建&#xff0c;提供圖形化界面支持YOLOv5和YOLOv8模型的訓練配置、數據集管理以及PyTorch模型到ONNX格式的轉換功能。程序支持CUDA GPU加速…

新手向:從零理解LTP中文文本處理

如果你想了解計算機如何處理中文文本&#xff0c;這篇博客就是為你準備的。我們將通過一個真實的代碼案例&#xff0c;深入淺出地解析中文分詞技術&#xff0c;保證每一步都講得明明白白&#xff01; 什么是中文分詞&#xff1f; 想象你讀英文句子時&#xff0c;單詞之間有空…

圖像采集卡選型詳細指南

選擇圖像采集卡是構建機器視覺或圖像處理系統的關鍵一步&#xff0c;需要綜合考慮硬件接口、性能需求、軟件兼容性、應用場景等多個維度。以下是詳細的選型指南&#xff0c;幫助你做出明智決策&#xff1a;一、核心選型因素1. 相機接口匹配常見工業相機接口&#xff1a;GigE Vi…