日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Spring和Mybatis集成,如何批量insert update?以及一些通用Dao的设想

發布時間:2025/7/14 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring和Mybatis集成,如何批量insert update?以及一些通用Dao的设想 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

之所以寫這篇文章,主要是給新手提供一些mybatis使用的技巧和思路

現在國內很多項目都使用了mybatis作為ORM框架

我們在實際的使用過程中基本上都會遇到批量insert update等操作

在網上搜索一些文章,大多數都是在說使用mybatis forEach標簽迭代等。。。

實際上這種做法是存在很多問題的,比如SQL過長..等限制

于是乎我們自己使用原生的JDBC batch批量執行insert或update等操作

但是很多人并不知道mybatis實際上是提供了這種批量操作實現的

同時還有關于mybatis分頁的問題...我們設想,select語句我們只寫原生的,是否能自動完成分頁等功能?

抽象Service實現單表操作問題,這里我的設計其實也很簡單,具體參看項目源碼,相信大家都看得懂。

并沒有做到完全的自動化,底層的SQL還是需要自己寫XML文件的,只是代碼層通過統一的命名規范做了命名標準,簡化了代碼的編寫

-------------------------------------------分割線-------------------------------------------

廢話說多了,下面進入正題

如何整合?

具體參看:http://git.oschina.net/lis1314/mybatis-spring-demo

這里只說重點

1、關于批量insert或update問題

applicationContext.xml 中配置的

<!--單獨配置一個執行JDBC批量操作的session,底層等于sqlSessionFactory.openSession(ExecutorType.BATCH); 底層使用org.apache.ibatis.executor.BatchExecutor作為執行引擎 --> <bean id="batchSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory"/><constructor-arg index="1" value="BATCH"/> </bean>

這個是配置一個mybatis對JdbcBatch操作的執行模板,mybatis在執行SQL的時候,底層會創建一個執行引擎,org.apache.ibatis.executor.Executor它是一個接口,默認使用的實現類有如下

實際上我們關心的只有SimpleExecutor,BatchExecutor這兩個,默認的使用是SimpleExecutor

我們在上面配置的模板就是改變它的執行引擎,讓它使用BatchExecutor作為執行引擎,如果想了解更詳細可以閱讀源碼,具體的Executor創建在org.apache.ibatis.session.Configuration

2、關于mybatis分頁問題

思路是自己寫一個mybatis的插件,攔截mybatis的執行引擎,重置原生的SQL語句

具體的實現參看上面的工程,這里使用的是https://github.com/pagehelper/Mybatis-PageHelper

3、關于例子運行工程中com.mybatis.demo.test.StudentServiceTest

按照順序執行,并查看控制臺的SQL語句,可以得出結論

?

4、補充簡述Mybatis batch原理--選讀

首先我們看一張圖簡單了解下Mybatis數據處理架構

?

這里我們重點關注Executor,Executor對象是在Mybatis執行的具體過程創建的,默認使用的是SimpleExecutor對象

而SimpleExecuor,每次執行SQL都會直接把SQL語句發送給數據庫

這也是我們Mybatis默認的執行引擎,但是實際在開發過程中,很多情況我們需要批量執行insert或update等SQL,這時我們通常想到的是通過Mysql的foreach標簽或原生的JdbcBatch方式進行實現。

假設是foreach拼接SQL局限性很大,SQL過長會產生多問題,如果是自己實現JdbcBatch當然可以實現,只是需要寫很多的代碼,且代碼的重用性也不好。

而BatchExecutor就是Mybatis對原生的JdbcBatch的封裝,在具體與Spring整合的過程中,我們只需要獨立的配置一個mybatis的jdbctemplate,把它的executor配置為batch即可通過for循環的方式實現批量insert或update。

當第一條for循環的語句mybatis只會執行預編譯操作,而不會直接發送給數據庫執行,只會會判斷,statement對象是否是同一個,并且SQL語句是否一樣(這也是需要放在一個事物中的原因),如果都相同,則執行jdbc的addBatch。下面是一個測試的代碼片段,用來說明這段結論:

結合運行日志查看結果,這里我insert了含有2條數據的list,下圖呈現Mybatis源碼片段

發現了我們熟悉的代碼Jdbc batch。

?

轉載于:https://my.oschina.net/lis1314/blog/912787

總結

以上是生活随笔為你收集整理的Spring和Mybatis集成,如何批量insert update?以及一些通用Dao的设想的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。