搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
编程革命者
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Xcode9解决exportArchive: requires a provisioning profile
2
【开发工具】从eclipse到idea的过度
3
flutter极光推送配置厂商通道(华为)笔记--进行中
4
Python使用re库处理正则详解_re_extract_question
5
Vue~~_[eslint] d:\web\vue-houtai\src\app.vue 22:8 error
6
Unity入门小游戏 变色跑酷_unity+kinect跑酷游戏
7
Docker仓库
8
golang 转换时指定多个别名_go json 别名
9
pip安装软件包报错: error subprocess-exited-with-error问题记录_error: subprocess-exited-with-error 脳 pip subproce
10
小程序 获取微信、手机设备、账号等信息api_微信小程序api获取设备号
当前位置:
article
> 正文
Mybatis 批处理_mybatis开启批处理无效
作者:编程革命者 | 2024-02-04 00:46:16
赞
踩
mybatis开启批处理无效
有的时候,我们需要一次性插入很多的数据或者一次性更新、删除很多的数据,那么为了提高效率,我们需要使用批处理来完成。以下将讨论Mybatis+Spring如何使用批处理。
首先应该知道Mybatis是
Ibatis的升级版,比Ibatis性能更好,这是我采用Mybatis的原因。
Ibatis是支持批处理的
:
public
void
batchAddExamlog(List examlogList)
throws
SQLException{
SqlMapClient smc=
this
.getSqlMapClient();
try
{
smc.startTransaction();
smc.startBatch();
for
(Iterator iter = examlogList.iterator(); iter.hasNext();) {
Examlog log = (Examlog) iter.next();
smc.update(
"insertExamlog"
, log);
}
smc.executeBatch();
}
finally
{
smc.commitTransaction();
smc.endTransaction();
}
}
Mybatis接口实现批处理:
sessionFactory.openSession(ExecutorType.BATCH,
true
);
//得到session,
用于批量update
以上两种,他们都可以实现批处理。
但是当
Mybatis + Spring集成,且由
Spring
控制事务时,Mybatis这种批处理是不能使用的。
因为
sessionFactory.openSession(
ExecutorType
type
);
方法会创建一个新的数据库连接,该连接不受Spring控制,将导致Spring的事务控制失效,它无法利用与当前线程绑定的session。
再看其他方式:
1、Mybatis主配置文件中,加入下面代码:
<configuration>
<settings>
<setting name="defaultExecutorType" value="BATCH"/>
</settings>
</configuration>
-- 这是个总配置,所有操作都会生效,在任何一个事务中做的更改,在事务结束时提交,该事务内无法读取自己的操作结果。
-- 它
会导致所有方法 insert 无法返回id,update/delete 无法得到影响行数,所以、这个全局设置并不好。
2、配合(1)使用SqlSessionUtils.getSqlSession(sessionFactory).commit();
-- 虽然数据在事务内提交了,但是依然无法获得自增id
3、mapper文件中使用foreach标签拼装语句
-- 但是sql语句有长度限制,小数据量可以(当然也可以从数据库设置sql最长限制)。
4、获得当前连接,使用jdbc进行批处理操作。
-- 这也不好,sql需要写在其他地方,不能写在Mapper文件中。
5、从Spring上下文中,实例化两个SqlSessionTemplate,一个使用批处理方式,一个不使用批处理,程序中适时而用。
-- 无法获得自增id,且一个事务中不能同时使用两个
SqlSessionTemplate。
6、从源代码,扩展自己的批处理实现。
1、BatchExecutor类的public List<BatchResult> doFlushStatements() throws SQLException方法最终执行批量操作,它将返回影响信息。
2、
BatchExecutor.
doFlushStatements()
方法在 Executor.commit() 方法中被调用。
3、
Executor.commit() 在
SqlSession 中调用。
4、SqlSessionFactory 负责创建
SqlSession。
扩展
SqlSessionFactory 创建我们定义的 My
SqlSession,
My
SqlSession 最终可以调用到
BatchExecutor.
doFlushStatements() 获得影响结果
-- 这种方式需要扩展源码。
总结了几种方式,大家在项目中看情况使用吧。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/article/detail/58543
推荐阅读
article
SpringBoot
(三)之与
mybatis
整合
_
springboot
mybatis
pom
...
喜欢有帮助记得点赞哦我们之前使用
springboot
已经可以访问controller和渲染视图,接下来我们来说说连接数据...
赞
踩
article
三阶段--
day03
SpringBoot
整合
Mybatis
说明、
mybatis
plus
及其用法_详...
Mybatis
介绍_
详细描述
一下项目中,
mybatis
-
plus
、
springboot
、
activiti
工作流等技术框架...
赞
踩
article
三阶段
Day02
之
SpringBoot
高级
用法
及
Mybatis
整合_
springboot
mybat...
1.
SpringBoot
高级
用法
1.1
SpringBoot
热部署 1.1.1 热部署说明 每次修改代码修改之后,需...
赞
踩
article
企业
电子招标
采购
系统源码
Spring
Boot
+
Mybatis
+
Redis
+
Layui
...
通供应商门户具备内外协同的能力,为外部供应商集中推送展示与其相关的所有
采购
业务信息(历史合作、考察整改,绩效评价等),支...
赞
踩
article
毕设
项目
:
电影
票务
系统
(JSP+
java
+
springmvc
+
mysql
+
MyBatis
)...
因此,开发一款高效、便捷、实用的
电影
票务
系统
成为了
电影
院和观众们迫切需要解决的问题。
系统
可以实现影片信息的录入、查询、修...
赞
踩
article
毕设项目:
电影院
订票
系统
(JSP+
java
+springmvc+
mysql
+
MyBatis
)_【ja...
因此,开发一款高效、便捷、实用的
电影院
订票
系统
成为了
电影院
和观众们迫切需要解决的问题。
系统
可以实现影片信息的录入、查询、...
赞
踩
article
毕设
项目
:
电影院
购票
系统
(JSP+
java
+
springmvc
+
mysql
+
MyBatis
)...
因此,开发一款高效、便捷、实用的
电影院
购票
系统
成为了
电影院
和观众们迫切需要解决的问题。
系统
可以实现影片信息的录入、查询、...
赞
踩
article
毕设项目:
电影
购票
系统
的设计与实现(JSP+
java
+springmvc+
mysql
+
MyBatis
...
因此,开发一款高效、便捷、实用的
电影
购票
系统
成为了人们迫切需要解决的问题。
系统
可以实现影院信息的录入、查询、修改和删除等...
赞
踩
article
基于
JavaWeb
的
演唱会
票务(JSP+
j
ava
+
springmvc
+
mysql
+
MyBatis
)_...
系统可以实现在线选座、支付购票等功能,同时还可以进行座位图展示、票价查询等工作,为消费者提供便捷
的
购票体验
。
通过本课题
的
...
赞
踩
article
mybatis
----
小细节...
这种声明方式,会使
mybatis
查找duhong/dao下对应的xml文件,不过这种方式要求xml资源目录与dao层目录...
赞
踩
article
MyBatis
--- 常用
注解
...
MyBatis
是一款强大的持久层框架,通过
注解
的方式,可以更便捷地进行数据库操作。本文将介绍
MyBatis
中常用的
注解
以...
赞
踩
article
MyBatis
-
plus
...
QueryWrapper 和 UpdateWrapper
MyBatis
-
plus
...
赞
踩
article
Mybatis
拦截器
注册方式...
如果你的应用使用了Spring Boot和
Mybatis
-Spring-boot-starter,可以在Spring B...
赞
踩
article
调优
mybatis
saveBatch
25
倍性能...
稍微总结下我粗略的对比(虽然粗略,但实验结果符合原理层面的理解),如果你想更准确地实验,可以使用JMH,并且测试更多组数...
赞
踩
article
mybatis
plus
的
lambdaQueryWrapper
的
or
()方法正确
用法
_lambdaq...
利用and拼接,尽量与其他公共条件分开写。_
lambdaquerywrapper
or
用法
lambdaquerywrap...
赞
踩
article
mybatis
-
plus
QueryWrapper
中
or
,
and
的使用问题_
querywrapper
...
这就导致只要where后面的条件存在
or
的话只要满足条件了,都会查询出结果集,后来经过查询文档,在QueryWrappe...
赞
踩
article
mybatis
-
plus
中
queryWrapper
and
与
or
嵌套_
querywrapper
...
queryWrapper
.
and
(wrapper -> wrapper.like("project_name", key...
赞
踩
article
MyBatis
-
Plus02
条件构造器
QueryWrapper
、
UpdateWrapper
、Con...
MyBatis
-Plus中的条件构造器
QueryWrapper
、
UpdateWrapper
、Condition、Lamb...
赞
踩
article
Mybatis
框架 ( 四 )
QueryWrapper
_
mybatis
querywrapper
...
func(i->{ if(条件) { i.条件();.lambda() : 将
QueryWrapper
() 转换成 L...
赞
踩
article
MyBatis
-
Plus
QueryWapper
满足
多个
条件
Or另一个
条件
_querywrappe...
在按照风险等级查询时需要判断 (D值>=160且_
querywrapper
多个
条件
or
匹配
querywrapper
多...
赞
踩
相关标签
springboot
springboot整合mybatis
mybatis
spring boot
java
企业招投标系统源码
课程设计
mysql
数据库
spring
MyBatis-plus
tomcat