通過Spring整合MyBatis實現持久層操作

文章目錄

    • 為什么要整合Spring和MyBatis?
    • 步驟一:添加依賴
    • 步驟二:配置數據源
    • 步驟三:配置MyBatis
    • 步驟四:創建Mapper接口和XML文件
    • 步驟五:使用Mapper接口
    • 拓展:事務管理

在這里插入圖片描述

🎉通過Spring整合MyBatis實現持久層操作


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒🍹
  • ?博客主頁:IT·陳寒的博客
  • 🎈該系列文章專欄:架構設計
  • 📜其他專欄:Java學習路線 Java面試技巧 Java實戰項目 AIGC人工智能 數據結構學習
  • 🍹文章作者技術和水平有限,如果文中出現錯誤,希望大家能指正🙏
  • 📜 歡迎大家關注! ??

Spring和MyBatis是Java開發中兩個非常重要的框架,它們分別負責實現輕量級的控制反轉(IoC)和面向切面(AOP)的Spring,以及數據持久化的MyBatis。通過整合Spring和MyBatis,我們可以充分發揮它們的優勢,實現更加靈活和高效的應用程序。本文將介紹如何通過Spring整合MyBatis,以及在整合過程中常見的配置和使用方法。

在這里插入圖片描述

為什么要整合Spring和MyBatis?

在傳統的Java EE開發中,數據訪問層和業務邏輯層往往需要通過獨立的框架進行處理。Spring框架提供了IoC容器和AOP機制,使得應用程序更加模塊化和可維護。而MyBatis是一個優秀的持久化框架,通過SQL映射文件將Java對象映射到數據庫表,提供了便捷的數據庫訪問方式。整合Spring和MyBatis可以充分利用兩者的優勢,提高開發效率,降低維護成本。

步驟一:添加依賴

首先,我們需要在項目中添加Spring和MyBatis的相關依賴。如果使用Maven進行項目管理,可以在pom.xml文件中添加如下依賴:

<!-- Spring -->
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.10.RELEASE</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.10.RELEASE</version>
</dependency><!-- MyBatis -->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version>
</dependency>

這里使用了Spring 5.3.10版本和MyBatis Spring Boot Starter 2.2.0版本,你可以根據需要選擇合適的版本。

步驟二:配置數據源

在Spring整合MyBatis時,我們需要配置數據源。可以使用Spring提供的DataSource接口,也可以使用第三方庫(如Druid)提供的數據源。以下是一個使用Spring Boot配置數據源的例子:

@Configuration
public class DataSourceConfig {@Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource() {return DataSourceBuilder.create().build();}
}

這里使用了@ConfigurationProperties注解,將spring.datasource前綴的配置屬性注入到DataSource中,實現了數據源的配置。

在這里插入圖片描述

步驟三:配置MyBatis

在整合過程中,我們還需要配置MyBatis的SqlSessionFactorySqlSessionTemplateSqlSessionFactory是MyBatis的核心接口,負責創建SqlSession對象;SqlSessionTemplate是MyBatis-Spring的核心類,提供了SqlSession的模板化方法。

@Configuration
@MapperScan(basePackages = "com.example.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
public class MyBatisConfig {@Autowiredprivate DataSource dataSource;@Beanpublic SqlSessionFactory sqlSessionFactory() throws Exception {SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();factoryBean.setDataSource(dataSource);return factoryBean.getObject();}@Beanpublic SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}

在這里,使用@MapperScan注解指定了MyBatis的Mapper接口掃描路徑,并注入了DataSource,配置了SqlSessionFactorySqlSessionTemplate

步驟四:創建Mapper接口和XML文件

在整合Spring和MyBatis后,我們可以創建Mapper接口和對應的XML文件,定義SQL語句和數據庫操作。以下是一個簡單的例子:

// Mapper接口
public interface UserMapper {User getUserById(int userId);
}
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><resultMap id="BaseResultMap" type="com.example.entity.User"><id column="id" property="id" jdbcType="INTEGER"/><result column="username" property="username" jdbcType="VARCHAR"/><result column="password" property="password" jdbcType="VARCHAR"/></resultMap><select id="getUserById" resultMap="BaseResultMap">SELECT * FROM user WHERE id = #{userId}</select>
</mapper>

步驟五:使用Mapper接口

最后,在Service或Controller中注入Mapper接口,并調用其中的方法:

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(int userId) {return userMapper.getUserById(userId);}
}

通過以上步驟,我們完成了Spring和MyBatis的整合。在實際開發中,可以根據項目的需求進行更靈活的配置和擴展。

拓展:事務管理

在實際項目中,為了保證數據的一致性和完整性,通常會涉及到事務管理。Spring提供了聲明式事務管理的方式,通過@Transactional注解可以實現方法級別的事務控制。在整合Spring和MyBatis時,我們可以借助Spring的事務管理,確保數據庫操作的原子性。

@Service
@Transactional
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(int userId) {return userMapper.getUserById(userId);}@Transactional(rollbackFor = Exception.class)public void updateUser(User user) {// 更新用戶信息userMapper.updateUser(user);// 模擬異常,觸發事務回滾if (user.getUsername().equals("rollback")) {throw new RuntimeException("Rollback!");}}
}

在上面的例子中,通過@Transactional注解修飾Service類,表示該類的所有方法都將啟用事務管理。在updateUser方法中,通過@Transactional(rollbackFor = Exception.class)注解指定了異常回滾的條件,當用戶名為"rollback"時,會觸發事務回滾。

在這里插入圖片描述

通過整合Spring和MyBatis,我們不僅可以充分發揮兩者的優勢,提高開發效率,還能通過Spring的事務管理確保數據的一致性。希望本文能夠對你理解和應用Spring整合MyBatis有所幫助。


🧸結尾 ?? 感謝您的支持和鼓勵! 😊🙏
📜您可能感興趣的內容:

  • 【Java面試技巧】Java面試八股文 - 掌握面試必備知識(目錄篇)
  • 【Java學習路線】2023年完整版Java學習路線圖
  • 【AIGC人工智能】Chat GPT是什么,初學者怎么使用Chat GPT,需要注意些什么
  • 【Java實戰項目】SpringBoot+SSM實戰:打造高效便捷的企業級Java外賣訂購系統
  • 【數據結構學習】從零起步:學習數據結構的完整路徑

在這里插入圖片描述

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

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

相關文章

Leetcode173. 二叉搜索樹迭代器

Every day a Leetcode 題目來源&#xff1a;173. 二叉搜索樹迭代器 解法1&#xff1a;中序遍歷 我們可以直接對二叉搜索樹做一次完全的遞歸遍歷&#xff0c;獲取中序遍歷的全部結果并保存在數組中。隨后&#xff0c;我們利用得到的數組本身來實現迭代器。 代碼&#xff1a…

競賽 : 題目:基于深度學習的水果識別 設計 開題 技術

1 前言 Hi&#xff0c;大家好&#xff0c;這里是丹成學長&#xff0c;今天做一個 基于深度學習的水果識別demo 這是一個較為新穎的競賽課題方向&#xff0c;學長非常推薦&#xff01; &#x1f9ff; 更多資料, 項目分享&#xff1a; https://gitee.com/dancheng-senior/pos…

Spark-06:共享變量

目錄 1.廣播變量&#xff08;broadcast variables&#xff09; 2.累加器&#xff08;accumulators&#xff09; 在分布式計算中&#xff0c;當在集群的多個節點上并行運行函數時&#xff0c;默認情況下&#xff0c;每個任務都會獲得函數中使用到的變量的一個副本。如果變量很…

開啟數據庫審計(db,extended級別或os級別),并將審計文件存放到/home/oracle/audit下

文章目錄 開啟數據庫審計&#xff08;db,extended級別或os級別&#xff09;&#xff0c;并將審計文件存放到/home/oracle/audit下一. 簡介二. 配置2.1. 審計是否安裝2.2. 審計表空間遷移2.3. 審計參數2.4. 審計級別2.5. 其他審計選項2.6. 審計相關視圖 三. 使用3.1. 開啟/關閉審…

成為獨立開發者有多難

首先自我介紹&#xff1a;我是一名前端開發工程師&#xff0c;7年的前端開發經驗。CSDN 九段刀客_js,vue,ReactNative-CSDN博客,80多萬的訪問量&#xff0c;1萬多的粉絲。 相信80%的程序員的終極夢想都是成為一名獨立開發者&#xff0c;不用找工作有自己的產品可以有睡后收入。…

深度學習模型訓練計算量的估算

深度學習模型訓練計算量的估算 方法1&#xff1a;基于網絡架構和批處理數量計算算術運算次數前向傳遞計算和常見層的參數數量全連接層&#xff08;Fully connected layer&#xff09;參數浮點數計算量 CNN參數浮點數計算量 轉置CNN參數浮點數計算量 RNN參數浮點數計算量 GRU參數…

刷題學習記錄(含2023ISCTFweb題的部分知識點)

[SWPUCTF 2021 新生賽]sql 進入環境 查看源碼&#xff0c;發現是get傳參且參數為wllm fuzz測試&#xff0c;發現空格&#xff0c;&#xff0c;and被過濾了 同樣的也可以用python腳本進行fuzz測試 import requests fuzz{length ,,handler,like,select,sleep,database,delete,h…

java學習part09類的構造器

1. 2.默認構造器 如果沒有顯式定義任何構造器&#xff0c;系統會默認加一個默認構造器。 如果定義了&#xff0c;則不會有默認構造器。 默認構造器的權限和類的權限一樣&#xff0c;類是public構造器就是public&#xff0c;類是缺省默認構造器就是缺省 反編譯之后添加的構造…

解決DaemonSet沒法調度到master節點的問題

最近在kubernetes部署一個springcloud微服務項目&#xff0c;到了最后一步部署邊緣路由&#xff1a;使用nginx-ingress和traefik都可以&#xff0c;必須使用DaemonSet部署&#xff0c;但是發現三個節點&#xff0c;卻總共只有兩個pod。 換句話說&#xff0c; DaemonSet沒法調度…

UML建模圖文詳解教程05——包圖

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文參考資料&#xff1a;《UML面向對象分析、建模與設計&#xff08;第2版&#xff09;》呂云翔&#xff0c;趙天宇 著 包圖概述 包圖(package diagram)是用來描述模型中的…

一個最簡單的工業通訊數據分析例子

1.背景 對工業設備的通訊協議進行分析可以幫助我們更好地理解其工作原理和相關技術&#xff0c;并且有助于以下幾個方面&#xff1a; 1. 優化工業設備的通訊效率&#xff1a;了解通訊協議的細節可以幫助我們找到通訊效率低下的原因并進行優化&#xff0c;提高設備的通訊效率和…

Axioss筆記

一、Get請求 // 請求頭攜帶參數&#xff0c;案例&#xff1a;?uid1001 axios.get(http://localhost:8080/user/api/v1/user/query, {params: {uid: 1001}}).then(res > {console.log(res.data) }).catch(err > {console.log("請求錯誤" err) }).finally(() …

MySQL 8 配置文件詳解與最佳實踐

MySQL 8 是一款強大的關系型數據庫管理系統&#xff0c;通過適當的配置文件設置&#xff0c;可以充分發揮其性能潛力。在這篇博客中&#xff0c;我們將深入探究 MySQL 8 常用的配置文件&#xff0c;并提供一些建議&#xff0c;幫助您優化數據庫性能。 配置文件概覽 在 MySQL …

【華為OD題庫-030】阿里巴巴找黃金寶箱(V)-java

題目 一貧如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;無意中發現了強盜集團的藏寶地&#xff0c;藏寶地有編號從0-N的箱子&#xff0c;每個箱子上面貼有一個數字.阿里巴巴念出一個咒語數字k(k<N),找出連續k個寶箱數字和的最大值&#xff0c;并輸出該最大值。 輸入描述 第…

攔截器的使用

攔截器&#xff08;Interceptor&#xff09;是一種在應用程序中用于干預、修改或攔截請求和響應的組件&#xff0c;是AOP 編程的一種實踐&#xff0c;和過濾器一樣都是一種具體的AOP實現。它可以在請求被發送到目標處理程序之前或之后&#xff0c;對請求進行預處理或對響應進行…

【數據結構】二叉樹概念 | 滿二叉樹 | 完全二叉樹

二叉樹的概念 二叉樹在實踐中用的很多。 一棵二叉樹是結點的一個有限集合&#xff0c;該集合&#xff1a; 或者為空&#xff1b;由一個根結點加上兩棵別稱為左子樹和右子樹的二叉樹組成。二叉樹最多兩個孩子。 這里注意&#xff1a;二叉樹并不是度為2的樹。 二叉樹的度最大值是…

Go lumberjack 日志輪換和管理

在開發應用程序時&#xff0c;記錄日志是一項關鍵的任務&#xff0c;以便在應用程序運行時追蹤問題、監視性能和保留審計記錄。Go 語言提供了靈活且強大的日志記錄功能&#xff0c;可以通過多種方式配置和使用。其中一個常用的日志記錄庫是 github.com/natefinch/lumberjack&am…

python selenium 模擬瀏覽器自動操作搶購腳本

每逢秒殺&#xff0c;都在遺憾網速和手速慢沒能搶購到商品吧。 手寫一個腳本&#xff0c;讓程序幫你搶&#xff0c;搶到的概率會大大提升。 廢話不多說&#xff0c;直接上代碼。 本實例以華為官網搶購手機為例 """ 模擬瀏覽器操作華為官網(1) 【只需要安裝一…

【JAVA】我們該如何規避代碼中可能出現的錯誤?(二)

個人主頁&#xff1a;【&#x1f60a;個人主頁】 系列專欄&#xff1a;【??初識JAVA】 文章目錄 前言異常方法&#xff08;Throwable類&#xff09;Throwable類的方法 捕獲異常多重捕獲塊 前言 異常是程序中的一些錯誤&#xff0c;但并不是所有的錯誤都是異常&#xff0c;并…

git-3

1.如何讓工作區的文件恢復為和暫存區一樣&#xff1f; 工作區所作的變更還不及暫存區的變更好&#xff0c;想從暫存區拷貝到工作區&#xff0c;變更工作區(恢復成和暫存區一樣的狀態)&#xff0c;想到用git checkout -- 文件名 2.怎樣取消暫存區部分文件的更改&#xff1f; 如…