【第16章】MyBatis-Spring之SqlSession

文章目錄

  • 前言
  • 一、SqlSessionTemplate
    • 1. 創建
    • 2. 使用
    • 3. 批量操作
      • 3.1 創建SqlSessionTemplate
      • 3.2 service
      • 3.3 controller
  • 二、SqlSessionDaoSupport
  • 總結


前言

在 MyBatis 中,你可以使用 SqlSessionFactory 來創建 SqlSession。 一旦你獲得一個 session 之后,你可以使用它來執行映射了的語句,提交或回滾連接,最后,當不再需要它的時候,你可以關閉 session。 使用 MyBatis-Spring 之后,你不再需要直接使用 SqlSessionFactory 了,因為你的 bean 可以被注入一個線程安全的 SqlSession,它能基于 Spring 的事務配置來自動提交、回滾、關閉 session。


一、SqlSessionTemplate

1. 創建

SqlSessionTemplate 是 MyBatis-Spring 的核心。作為 SqlSession 的一個實現,這意味著可以使用它無縫代替你代碼中已經在使用的 SqlSession。 SqlSessionTemplate 是線程安全的,可以被多個 DAO 或映射器所共享使用。
當調用 SQL 方法時(包括由 getMapper() 方法返回的映射器中的方法),SqlSessionTemplate 將會保證使用的 SqlSession 與當前 Spring 的事務相關。 此外,它管理 session 的生命周期,包含必要的關閉、提交或回滾操作。另外,它也負責將 MyBatis 的異常翻譯成 Spring 中的 DataAccessExceptions。
由于模板可以參與到 Spring 的事務管理中,并且由于其是線程安全的,可以供多個映射器類使用,你應該總是用 SqlSessionTemplate 來替換 MyBatis 默認的 DefaultSqlSession 實現。在同一應用程序中的不同類之間混雜使用可能會引起數據一致性的問題。
可以使用 SqlSessionFactory 作為構造方法的參數來創建 SqlSessionTemplate 對象。

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory" />
</bean>@Configuration
public class MyBatisConfig {@Beanpublic SqlSessionTemplate sqlSession() throws Exception {return new SqlSessionTemplate(sqlSessionFactory());}
}

2. 使用

Autowired
SqlSessionTemplate sqlSessionTemplate;

3. 批量操作

3.1 創建SqlSessionTemplate

@Bean
public SqlSessionTemplate sqlSession(SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory, ExecutorType.BATCH);
}

3.2 service

@Autowired
SqlSession sqlSession;public void insertUsers(List<User> users) {for (User user : users) {sqlSession.getMapper(UserMapper.class).insert(user);}
}

3.3 controller

@RequestMapping("003")
public void mybatis003() {List<User> users=new ArrayList<>();for(int i=10;i<20;i++){users.add(new User(i));}userService.insertUsers(users);
}

二、SqlSessionDaoSupport

SqlSessionDaoSupport 是一個抽象的支持類,用來為你提供 SqlSession。調用 getSqlSession() 方法你會得到一個 SqlSessionTemplate,之后可以用于執行 SQL 方法,就像下面這樣:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {public User getUser(String userId) {return getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);}
}

在這個類里面,通常更傾向于使用 MapperFactoryBean,因為它不需要額外的代碼。但是,如果你需要在 DAO 中做其它非 MyBatis 的工作或需要一個非抽象的實現類,那么這個類就很有用了。

SqlSessionDaoSupport 需要通過屬性設置一個 sqlSessionFactory 或 SqlSessionTemplate。如果兩個屬性都被設置了,那么 SqlSessionFactory 將被忽略。

假設類 UserMapperImpl 是 SqlSessionDaoSupport 的子類,可以編寫如下的 Spring 配置來執行設置:

<bean id="userDao" class="org.mybatis.spring.sample.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

總結

回到頂部

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

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

相關文章

源碼部署EFK

目錄 資源列表 基礎環境 關閉防護墻 關閉內核安全機制 修改主機名 添加hosts映射 一、部署elasticsearch 修改limit限制 部署elasticsearch 修改配置文件 單節點 集群(3臺節點集群為例) 啟動 二、部署filebeat 部署filebeat 添加配置文件 啟動 三、部署kiban…

單點登錄【demo】

前言 2023-07-29 15:44:56 公開發布于 2024-5-22 00:04:56 單點登錄【demo】 以下是 Java 實現單點登錄的示例代碼&#xff1a; 單點登錄&#xff08;Single Sign-On&#xff0c;SSO&#xff09;是一種身份認證和授權機制&#xff0c;可以使用戶在多個應用程序或系統之間使…

SQL常用基礎語句(一)-- FGHIJ開頭

GROUP BY GROUP BY語法可以根據給定數據列的每個成員對查詢結果進行分組統計&#xff0c;最終得到一個分組匯總表。在GROUP BY子句后面包含了一個HAVING子句&#xff0c;HAVING類似于WHERE&#xff0c;&#xff08;唯一的差別是WHERE過濾行&#xff0c;HAVING過濾組&#xff0…

【C/C++筆試練習】TCP、IP廣播、ARP協議、IP路由器、MAC協議、三次握手、TCP/IP、子網劃分年、會抽獎、抄送列表

文章目錄 C/C筆試練習選擇部分&#xff08;1&#xff09;TCP&#xff08;2&#xff09;IP廣播&#xff08;3&#xff09;ARP協議&#xff08;4&#xff09;IP路由器&#xff08;5&#xff09;MAC協議&#xff08;6&#xff09;三次握手&#xff08;7&#xff09;TCP/IP&#xf…

PHP在線制作表白網源碼

PHP在線制作表白網源碼&#xff0c;送女友個驚喜吧&#xff0c;無數據庫&#xff0c;上傳就能用&#xff0c;后臺/admin&#xff0c;賬號密碼都是admin 百度網盤&#xff1a;https://pan.baidu.com/s/1rbD2_8IsP9UPLK-cdgEXfA?pwdre59

AWS安全性身份和合規性之Secrets Manager

AWS Secrets Manager是一項AWS托管的服務&#xff0c;用于安全地存儲、管理和輪轉敏感信息&#xff0c;如數據庫密碼、API密鑰、OAuth令牌等。AWS Secrets Manager助您在整個生命周期內輕松管理、檢索和輪換數據庫憑證、API密鑰和其他密鑰。 關鍵詞&#xff1a;集中管理、加密…

sql使用加和進行合并去重并提升速率

背景 有三張表ltd1 、ltd0051和、ltd0011ltd1作為主表&#xff0c;左關聯 ltd0051和ltd0011如果ltd0051有兩條重復數據、td0011有兩條重復數據&#xff0c;左關聯之后就會得到4條&#xff0c;同時ltd0051和ltd0011這兩條數據都是正確&#xff0c;基于主鍵我們需要將兩個相同主鍵…

【全開源】AJAX家政上門服務系統小程序自營+多商家(高級授權)+獨立端

基于FastAdmin和原生微信小程序開發的一款同城預約、上門服務、到店核銷家政系統&#xff0c;用戶端、服務端(高級授權)、門店端(高級授權)各端相互依賴又相互獨立&#xff0c;支持選擇項目、選擇服務人員、選擇門店多種下單方式&#xff0c;支持上門服務和到店核銷兩種服務方式…

深入理解數倉開發(一)數據技術篇之日志采集

前言 今天開始重新回顧電商數倉項目&#xff0c;結合《阿里巴巴大數據之路》和尚硅谷的《劍指大數據——企業級電商數據倉庫項目實戰 精華版》來進行第二次深入理解學習。之前第一次學習數倉&#xff0c;雖然盡量放慢速度力求深入理解&#xff0c;但是不可能一遍掌握&#xff0…

我在去哪兒薅到了5塊錢火車票代金券,速薅

哈哈&#xff0c;親愛的薅羊毛小伙伴們&#xff01; 剛剛在去哪兒大佬那兒發現了一個超級薅羊毛福利&#xff01;我只花了短短兩分鐘&#xff0c;就搞到了一張5塊錢火車票代金券&#xff0c;簡直是天上掉餡餅的節奏啊&#xff01; 話不多說&#xff0c;薅羊毛的姿勢給你們擺好…

代碼隨想錄算法訓練營第十六天(py)| 二叉樹 | 104.二叉樹的最大深度、111.二叉樹的最小深度、222.完全二叉樹的節點個數

104.二叉樹的最大深度 給定一個二叉樹 root &#xff0c;返回其最大深度。 二叉樹的 最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。 思路1 迭代法 層序遍歷 層序遍歷的思路很簡單&#xff0c;其結果本來就是按層數記錄的&#xff0c;只需返回結果的長度皆可。…

【C語言回顧】聯合和枚舉

前言1. 聯合體1.1 聯合體的聲明1.2 聯合體的特點1.3 聯合體的使用 2. 枚舉2.1 枚舉的聲明2.2 枚舉的特點2.3 枚舉的使用 結語 #include<GUIQU.h> int main { 上期回顧: 【C語言回顧】結構體 個人主頁&#xff1a;C_GUIQU 專欄&#xff1a;【C語言學習】 return 一鍵三連;…

解決法律條文的錄入前判斷發條沖突的需求;怎么選擇NLPModel?怎么使用模型?

要在NLPModel類中實現法律條文的沖突檢測功能&#xff0c;可以使用BERT模型來計算句子相似度。以下是詳細的步驟&#xff0c;包括如何選擇模型、訓練模型以及使用模型。 選擇NLP模型 根據你的需求&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Tra…

Linux多線程系列三: 生產者消費者模型,信號量使用,基于阻塞隊列和環形隊列的這兩種生產者消費者代碼的實現

Linux多線程系列三: 生產者消費者模型,信號量,基于阻塞隊列和環形隊列的這兩種生產者消費者代碼的實現 一.生產者消費者模型的理論1.現實生活中的生產者消費者模型2.多線程當中的生產者消費者模型3.理論 二.基于阻塞隊列的生產者消費者模型的基礎代碼1.阻塞隊列的介紹2.大致框架…

別說廢話!說話說到點上,項目高效溝通的底層邏輯揭秘

假設你下周要在領導和同事面前匯報項目進度&#xff0c;你會怎么做&#xff1f;很多人可能會去網上搜一個項目介紹模板&#xff0c;然后按照模板來填充內容。最后&#xff0c;匯報幻燈片做了 80 頁&#xff0c;自己覺得非常充實&#xff0c;但是卻被領導痛批了一頓。 這樣的境…

樹的非遞歸遍歷(層序)

層序是采用隊列的方式來遍歷的 就比如說上面這顆樹 他層序的就是&#xff1a;1 24 356 void LevelOrder(BTNode* root) {Que q;QueueInit(&q);if (root){QueuePush(&q, root);}while (!QueueEmpty(&q)){BTNode* front QueueFront(&q);QueuePop(&q);print…

簡析網絡風險量化的價值與應用實踐,如何構建網絡風險預防架構

網絡風險量化能夠讓公司董事會和高管層看清當前的網絡安全風險格局&#xff1b;它還將使安全團隊能夠在業務需求的背景下做出網絡安全決策&#xff0c;幫助組織確定哪些風險對業務構成最大的威脅&#xff0c;以及預期的經濟損失將是什么。 隨著網絡攻擊手段的日益多樣化和復雜…

多模態大模型新進展——GPT-4o、Project Astra關鍵技術丨青源Workshop第27期

青源Workshop丨No.27 多模態大模型新進展—GPT-4o、Project Astra關鍵技術主題閉門研討會 剛剛過去的兩天&#xff0c;OpenAI、Google紛紛發布了多模態大模型的最新成果&#xff0c;GPT-4o、Project Astra先后亮相。 本周五&#xff08;北京時間5月17日&#xff09;18點&#x…

O2OA(翱途)開發平臺數據統計如何配置?

O2OA提供的數據管理中心&#xff0c;可以讓用戶通過配置的形式完成對數據的匯總&#xff0c;統計和數據分組展現&#xff0c;查詢和搜索數據形成列表數據展現。也支持用戶配置獨立的數據表來適應特殊的業務的數據存儲需求。本文主要介紹如何在O2OA中開發和配置統計。 一、先決…

eNSP學習——OSPF多區域配置

目錄 主要命令 前期準備 實驗內容 分析 實驗目的 實驗步驟 實驗拓撲 實驗編址 實驗步驟 1、基本配置 配置與測試結果(部分) 2、配置骨干區域路由器 配置與測試結果(示例) 3、配置非骨干區域路由器 查看OSPF鄰居狀態 查看路由表中的OSPF路由條目 查看OSPF鏈…