Mybatis批處理、Mysql深分頁操作
一、Mybatis批量操作

1、Foreach方式
會拼接成:insert into table (ID, PHONE,MESSAGE) values (?,?,?), (?,?,?), (?,?,?)當(dāng)數(shù)據(jù)過多時,可能生成的動態(tài)sql過大,mysql默認(rèn)僅1M的sql字符串,過長可能會執(zhí)行失敗。在sql循環(huán)時設(shè)置batch與否其實執(zhí)行時間差別不是很大,所以其實如果不是特別要求性能,可直接在sql中使用for循環(huán)即可。實踐發(fā)現(xiàn),當(dāng)表的列數(shù)較多(超過20),以及一次性插入的行數(shù)較多(上萬條)時,插入性能非常差,通常需要20分鐘以上
<insert id="saveBatch" parameterType="java.util.List">
insert into mytable (id, name, sex, age) values
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.name}, #{item.sex}, #{item.age})
</foreach>
</insert>2、ExecutorType.BATCH插入
Mybatis內(nèi)置的ExecutorType有3種,SIMPLE、REUSE、BATCH;默認(rèn)的是simple,該模式下它為每個語句的執(zhí)行創(chuàng)建一個新的預(yù)處理語句,單條提交sql;batch模式重復(fù)使用已經(jīng)預(yù)處理的語句,且批量執(zhí)行所有更新語句,但batch模式也有自己的問題,在Insert操作時,沒提交事務(wù)前,無法獲取到自增的id。
public enum ExecutorType {
SIMPLE, //mybatis的默認(rèn)執(zhí)行器,它為每個語句的執(zhí)行創(chuàng)建一個新的預(yù)處理語句
REUSE, //會復(fù)用預(yù)處理語句
BATCH //會批量執(zhí)行所有更新語句,不需要對同樣的SQL進行多次預(yù)編譯 ArticleCategory
}
public void saveBatch(List list) {
SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
try {
MyMapper mapper = sqlSession.getMapper(MyMapper.class);
mapper.saveBatch(list);
sqlSession.commit();
sqlSession.clearCache();
} catch (Exception e) {
sqlSession.rollback();
e.printStackTrace();
} finally {
sqlSession.close();
}
}二、Mysql深分頁
1、普通分頁
select * from table order by id limit m,n;
2、先查出主鍵,通過主鍵關(guān)聯(lián),支持跨頁,減少回表。
select * from table as a inner join (select id from table order by id limit m, n) as b on a.id = b.id order by a.id;
3、取上一頁最大主鍵做判斷,不支持跨頁插敘。
select * from table where id > #max_id# order by id limit 10, 10;
4、先查出主鍵,通過主鍵做范圍判斷,支持跨頁,減少回表。
select * from table where id > (select id from table order by id limit m, 1) limit n;
到此這篇關(guān)于Mybatis批處理、Mysql深分頁操作的文章就介紹到這了,更多相關(guān)Mybatis批處理、Mysql深分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springBoot集成shiro實現(xiàn)權(quán)限刷新
在SpringBoot項目中集成Shiro進行權(quán)限管理,包括基礎(chǔ)配置引入依賴、創(chuàng)建Shiro配置類以及用戶認(rèn)證與授權(quán)實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-11-11
SpringBoot集成MinIO實現(xiàn)分布式文件存儲與管理方式
這篇文章主要介紹了SpringBoot集成MinIO實現(xiàn)分布式文件存儲與管理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-09-09
Java客戶端通過HTTPS連接到Easysearch實現(xiàn)過程
這篇文章主要為大家介紹了Java客戶端通過HTTPS連接到Easysearch實現(xiàn)過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-11-11
SpringSecurity自動登錄流程與實現(xiàn)詳解
這篇文章主要介紹了SpringSecurity自動登錄流程與實現(xiàn)詳解,所謂的自動登錄是在訪問鏈接時瀏覽器自動攜帶上了Cookie中的Token交給后端校驗,如果刪掉了Cookie或者過期了同樣是需要再次驗證的,需要的朋友可以參考下2024-01-01
Java中l(wèi)ist集合的clear方法及空字符串的區(qū)別
這篇文章主要介紹了Java中l(wèi)ist集合的clear方法及空字符串的區(qū)別,在使用list?結(jié)合的時候習(xí)慣了?list=null?;在創(chuàng)建這樣的方式,但是發(fā)現(xiàn)使用list的clear?方法很不錯,尤其是有大量循環(huán)的時候<BR>list.clear()與list?=?null?區(qū)別,需要的朋友可以參考下2023-08-08
SpringBoot整合XxlJob分布式任務(wù)調(diào)度平臺
xxl-job是一個開源的分布式定時任務(wù)框架,它可以與其他微服務(wù)組件一起構(gòu)成微服務(wù)集群。它的調(diào)度中心(xxl-job)和執(zhí)行器(自己的springboot項目中有@XxlJob("定時任務(wù)名稱")的方法)是相互分離,分開部署的,兩者通過HTTP協(xié)議進行通信2023-02-02

