Spring5學習隨筆-整合MyBatis(持久層)、連接池、Mapper文件

来源:https://www.cnblogs.com/eyewink/archive/2023/11/20/17845189.html
-Advertisement-
Play Games

主要涵蓋了Spring與持久層技術的整合,以及Spring與MyBatis的整合。第一章介紹了為什麼需要將Spring與持久層技術整合,以及Spring可以與哪些持久層技術進行整合。第二章詳細介紹了Spring與MyBatis的整合思路、開發步驟和編碼實例,並解決了MyBatis開發過程中存在的問題... ...


學習視頻:【孫哥說Spring5:從設計模式到基本應用到應用級底層分析,一次深入淺出的Spring全探索。學不會Spring?只因你未遇見孫哥】

Spring持久層整合 第一章、持久層整合

1.Spring框架為什麼要與持久層技術進行整合

  1. JavaEE開發需要持久層進行資料庫的訪問操作。
  2. JDBC MyBatis、Hibernate進行持久開發過程存在大量的代碼冗餘
  3. Spring基於模板設計模式對與上述的持久層技術進行了封裝

2.Spring可以與那些持久層技術進行整合?

  1. JDBC

    工具:JDBCTemplate

  2. Hibernate(JPA)

    工具:HibernateTemplate

  3. MyBatis

    工具:SqlSessionFactoryBean MapperScannerConfigure

第二章、Spring與MyBatis整合

本質:就是對MyBatis目前不滿意的地方進行整合,從而讓MyBatis開發變得更整潔

1.MyBatis開發步驟的回顧

  1. 實體
  2. 實體別名
  3. 建立表
  4. 創建DAO介面
  5. 實現Mapper文件
  6. 註冊Mapper文件
  7. MybatisAPI調用

2.Mybatis在開發過程中存在的問題

  1. 配置繁瑣(2.實體別名,6.註冊Mapper文件) 代碼冗餘(7.API調用

3.Spring與Mybatis整合思路分析

4.Spring與Mybatis整合的開發步驟

  1. 配置文件(ApplicationContext.xml)進行相關配置

    **#配置 是只需要配置一次
    <!-- 連接池 四個參數 driverClassName、url、username、password、-->**
    <bean id="dataSource" class=""/>
    <!--創建SqlSessionFactory-->
    <bean id="ssfb" class="SqlSessionFactoryBean">
    		<property name="dataSource" ref=""/>
    		<property name="typeAliasesPackage">
    				**指定實體類所在的包 com.baizhi.entity**
    		</property>
    		<property name="mapperLocations">
    				**指定 配置文件的路徑以及通用配置**
    				com.baizhi.mapper/*Mapper.xml
    		</property>
    </bena>
    
    <!--DAO介面的實現類
    		session--->session.getMapper() ---xxxDAO實現類對象
    		XXXDAO ---> xXXDAO
    -->
    <bean id="scanner" class="MapperScannerConfigure">
    		<property name="sqlSessionFactoryBeanName" value="ssfb"/>
    		<property name="basePackage">
    				**指定DAO介面放置的包 com.baizhi.dao**
    		</property>
    </bean>
    
  2. 編碼

    實戰經常根據需求 寫的代碼

    1. 實體
    2. 創建DAO介面
    3. 實現Mapper文件

5.Spring與Mybatis整合編碼

  • 搭建開發環境(jar)

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.1.14.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.2</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.18</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.48</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    
  • Spring配置文件的配置

    <!--連接池-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/myschool?useSSL=false&amp;allowPublicKeyRetrieval=true"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>
    <!-- 創建SqlSessionFactory SqlSessionFactoryBean-->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="typeAliasesPackage" value="com.baizhi.entity"/>
        <property name="mapperLocations">
            <list>
                <value>classpath:com.baizhi.mapper/*Mapper.xml</value>
            </list>
        </property>
    </bean>
    <!--創建DAO對象 MapperScannerConfigure-->
    <bean id="scanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
        <property name="basePackage" value="com.baizhi.dao"/>
    </bean>
    
  • 編碼

    1. 編碼
    2. DAO介面
    3. Mapper文件配置

6.Spring與Mybatis整合細節

  • 問題:Spring與Mybatis整合後,為什麼DAO不提交事務,但是數據能夠插入資料庫中?

    Connection -—> tx

    Mybatis(Connection)

    本質上控制連接對象(Connection) —→連接池(DataSource)

    1. Mybatis提供的連接池對象 --→創建Connection

      Connection.setAutoCommit(false) 手工的控制了事務、操作完成後,手工提交

    2. Druid(C3P0) DBCP)作為連接池 —→創建Connection

      Druid保持自動控制事務,Connection.setAutoCommit的參數為true,一條sql 自動提交

    答案:因為Spring與Mybatis整合時,引入了外部連接池對象,保持自動的事務提交機制,不需要手工進行事務的操作也能自動提交。

    註意:未來實戰中,還會手工控制事務(多條sql一起成功,一起失敗),後續Spring通過事務控制解決這個問題。

作者:揚眉劍出鞘
出處: https://www.cnblogs.com/eyewink/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 古詩文起名 大家好,我是 Java陳序員,我們常常會為了給孩子取名而煩惱,取名不僅要好聽而且要規避大眾化。其實,我們中華文化博大精深,可以借鑒先輩文人們留下的經典詩詞中的文字來起名。今天,給大家介紹一個古詩文起名的工具。 這個工具支持從《詩經》、《楚辭》、《唐詩》、《宋詞》、《樂府詩集》、《古詩三百 ...
  • SubScribe即發佈訂閱模式,在工作中有著廣泛的應用,比如跨組件通信,微前端系統中跨子應用通信等等。 以下是一個簡易的實現: 訂閱 初始化時可限制類型 發佈 限制類型是為了讓訂閱者和發佈者知道預製了哪些類型,避免使用了一些對方不知道的類型。 type Subscriber<T> = (param ...
  • 使用集團的統一埋點採集能力和埋點平臺,完成達達7條業務線共43個站點應用的埋點遷移,降低自研採集工具和平臺的研發投入和機器成本,打通數據鏈路,創造更多的數據分析價值 ...
  • 大家好,我是Java陳序員。 我們在日常開發中,會有很多的應用環境,開發環境、測試環境、回歸環境、生產環境等等。 這些環境,需要部署在一臺台的伺服器上,有的可能是物理機,有的可能是雲伺服器。 那麼,這麼多主機我們要怎麼運維整理呢? 今天,給大家介紹一個輕量級的自動化運維平臺。 項目介紹 Spug—— ...
  • Vue3中響應數據核心是 reactive , reactive 中的實現是由 proxy 加 effect 組合,我們先來看一下 reactive 方法的定義 ...
  • 背景 近期查看公司項目的請求日誌,發現有一段來自俄羅斯首都莫斯科(根據IP是這樣,沒精力溯源)的異常請求,看傳參就能猜到是EXP攻擊,不是瞎掃描瞎傳參的那種。日誌如下(已做部分修改): [2023-11-17 23:54:34] local.INFO: url : http://xxx/_ignit ...
  • Callable介面和Future介面 創建線程的方式 1.繼承Thread類2.實現Runnable介面3.Callable介面4.線程池方式 Callable介面 在繼承Thread類和實現Runnable介面的方式創建線程時,線程執行的run方法中,返回值是void,即無法返回線程的執行結果, ...
  • 十二、指針和引用(二) 1、指針和數組的關係 1)思考 ​ 假設你要設計一種編程語言,你要如何實現數組呢?思考之前請先牢記:數組在記憶體中是連續的,維度由低到高(大部分操作系統下)。 2)彙編分析數組如何實現 //C++代碼 #include <iostream> int main() { int a ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...