Mybatis批處理、Mysql深分頁(yè)操作
一、Mybatis批量操作

1、Foreach方式
會(huì)拼接成:insert into table (ID, PHONE,MESSAGE) values (?,?,?), (?,?,?), (?,?,?)當(dāng)數(shù)據(jù)過(guò)多時(shí),可能生成的動(dòng)態(tài)sql過(guò)大,mysql默認(rèn)僅1M的sql字符串,過(guò)長(zhǎng)可能會(huì)執(zhí)行失敗。在sql循環(huán)時(shí)設(shè)置batch與否其實(shí)執(zhí)行時(shí)間差別不是很大,所以其實(shí)如果不是特別要求性能,可直接在sql中使用for循環(huán)即可。實(shí)踐發(fā)現(xiàn),當(dāng)表的列數(shù)較多(超過(guò)20),以及一次性插入的行數(shù)較多(上萬(wàn)條)時(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,該模式下它為每個(gè)語(yǔ)句的執(zhí)行創(chuàng)建一個(gè)新的預(yù)處理語(yǔ)句,單條提交sql;batch模式重復(fù)使用已經(jīng)預(yù)處理的語(yǔ)句,且批量執(zhí)行所有更新語(yǔ)句,但batch模式也有自己的問(wèn)題,在Insert操作時(shí),沒(méi)提交事務(wù)前,無(wú)法獲取到自增的id。
public enum ExecutorType {
SIMPLE, //mybatis的默認(rèn)執(zhí)行器,它為每個(gè)語(yǔ)句的執(zhí)行創(chuàng)建一個(gè)新的預(yù)處理語(yǔ)句
REUSE, //會(huì)復(fù)用預(yù)處理語(yǔ)句
BATCH //會(huì)批量執(zhí)行所有更新語(yǔ)句,不需要對(duì)同樣的SQL進(jìn)行多次預(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深分頁(yè)
1、普通分頁(yè)
select * from table order by id limit m,n;
2、先查出主鍵,通過(guò)主鍵關(guān)聯(lián),支持跨頁(yè),減少回表。
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、取上一頁(yè)最大主鍵做判斷,不支持跨頁(yè)插敘。
select * from table where id > #max_id# order by id limit 10, 10;
4、先查出主鍵,通過(guò)主鍵做范圍判斷,支持跨頁(yè),減少回表。
select * from table where id > (select id from table order by id limit m, 1) limit n;
到此這篇關(guān)于Mybatis批處理、Mysql深分頁(yè)操作的文章就介紹到這了,更多相關(guān)Mybatis批處理、Mysql深分頁(yè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL深分頁(yè)問(wèn)題及三種解決方案
- 快速解決mysql深分頁(yè)問(wèn)題
- MySQL深分頁(yè)問(wèn)題四種方案小結(jié)
- Mysql中深分頁(yè)的五種常用方法整理
- MySQL深分頁(yè)問(wèn)題解決的實(shí)戰(zhàn)記錄
- MySQL深分頁(yè)問(wèn)題的原因及解決方案
- MySQL深分頁(yè)問(wèn)題解決思路
- 解讀MySql深分頁(yè)的問(wèn)題及優(yōu)化方案
- MySQL深分頁(yè)優(yōu)化方式
- MySql深分頁(yè)問(wèn)題解決
- MySQL深分頁(yè)進(jìn)行性能優(yōu)化的常見(jiàn)方法
- 一站式解決mysql深分頁(yè)問(wèn)題
相關(guān)文章
springBoot集成shiro實(shí)現(xiàn)權(quán)限刷新
在SpringBoot項(xiàng)目中集成Shiro進(jìn)行權(quán)限管理,包括基礎(chǔ)配置引入依賴(lài)、創(chuàng)建Shiro配置類(lèi)以及用戶(hù)認(rèn)證與授權(quán)實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-11-11
Java令牌Token登錄與退出的實(shí)現(xiàn)
這篇文章主要介紹了Java令牌Token登錄與退出的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
SpringBoot集成MinIO實(shí)現(xiàn)分布式文件存儲(chǔ)與管理方式
這篇文章主要介紹了SpringBoot集成MinIO實(shí)現(xiàn)分布式文件存儲(chǔ)與管理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-09-09
Java客戶(hù)端通過(guò)HTTPS連接到Easysearch實(shí)現(xiàn)過(guò)程
這篇文章主要為大家介紹了Java客戶(hù)端通過(guò)HTTPS連接到Easysearch實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
JDK8中新增的原子性操作類(lèi)LongAdder詳解
這篇文章主要給大家介紹了關(guān)于JDK8中新增的原子性操作類(lèi)LongAdder的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
SpringSecurity自動(dòng)登錄流程與實(shí)現(xiàn)詳解
這篇文章主要介紹了SpringSecurity自動(dòng)登錄流程與實(shí)現(xiàn)詳解,所謂的自動(dòng)登錄是在訪(fǎng)問(wèn)鏈接時(shí)瀏覽器自動(dòng)攜帶上了Cookie中的Token交給后端校驗(yàn),如果刪掉了Cookie或者過(guò)期了同樣是需要再次驗(yàn)證的,需要的朋友可以參考下2024-01-01
Java中l(wèi)ist集合的clear方法及空字符串的區(qū)別
這篇文章主要介紹了Java中l(wèi)ist集合的clear方法及空字符串的區(qū)別,在使用list?結(jié)合的時(shí)候習(xí)慣了?list=null?;在創(chuàng)建這樣的方式,但是發(fā)現(xiàn)使用list的clear?方法很不錯(cuò),尤其是有大量循環(huán)的時(shí)候<BR>list.clear()與list?=?null?區(qū)別,需要的朋友可以參考下2023-08-08
SpringBoot整合XxlJob分布式任務(wù)調(diào)度平臺(tái)
xxl-job是一個(gè)開(kāi)源的分布式定時(shí)任務(wù)框架,它可以與其他微服務(wù)組件一起構(gòu)成微服務(wù)集群。它的調(diào)度中心(xxl-job)和執(zhí)行器(自己的springboot項(xiàng)目中有@XxlJob("定時(shí)任務(wù)名稱(chēng)")的方法)是相互分離,分開(kāi)部署的,兩者通過(guò)HTTP協(xié)議進(jìn)行通信2023-02-02

