mybatis批处理数据
批处理数据主要有三种方式:
1.传统jdbc处理 2.mybatis批处理插入 3.使用executortype处理
jdbc 处理
1.通过 for循环插入 main方法如下所示: Connection comm=null; PreparedStatement preparedStatement=null; conn=JdbcUtil.getConnection(); JdbcUtil.begin(conn); String sql="insert into t_user(username,password) values(?,?)"; preparedStatement=conn.preparedStatement(sql); for (int i=0;i<1000;i++)
{
preparedStatement.setString(1, "hello"+(i+1));
preparedStatement.setString(2, "world"+(i+1));
preparedStatement.executeUpdate();
}
JdbcUtil.commit(conn);
}
这样就可以进行批量插入
第二种是使用addbatch方法
main方法如下所示: Connection comm=null; PreparedStatement preparedStatement=null; conn=JdbcUtil.getConnection(); JdbcUtil.begin(conn); String sql="insert into t_user(username,password) values(?,?)"; preparedStatement=conn.preparedStatement(sql); for (int i=0;i<1000;i++)
{
preparedStatement.setString(1, "hello"+(i+1));
preparedStatement.setString(2, "world"+(i+1));
if((i+1)%1000==0){
preparedStatement.addBatch();
preparedStatement.executeBatch();
preparedStatement.clearBatch();
}
}
JdbcUtil.commit(conn);
}
两者差距在效果上后者更好一些。
传统的jdbc对数据的批处理有一些缺点 :比如一直使用的是for循环,会浪费大量的时间在session的连接上,而且java代码和sql语句耦合度很大。
mybatis 在处理数据的时候有两种方式,第一种是使用foreach标签,另一种是使用allowMultiQueries=true来完成。
第一种使用foreach
xml文件内容如下: insert into person(username,email,gender) VALUES
<foreach collection="persons" item="person" separator=",">
(#{person.username},#{person.email},#{person.gender})
</foreach> java文件如下
SqlSession sqlSession=this.getSqlSessionFactory.opensession();
PerSonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
List<Person> persons=new ArrayList<Person>();
for(int i=0;i<5;i++){
Person person=new Person("tom"+i,"email@"+i,"F");
persons.add(person);
}
personMapper.addPersons(persons)
sqlSession.commit();
}
另外一种需要配置文件声明allowMultiQueries=true 然后更改 xml文件中, 为;就可以了
最后一种批量操作的方法是 executortype的方式
1. xml语句
insert into person(username,email,gender) values (#{username},#{email},#{gender}) java语句
SqlSession sqlSession=this.getSqlSessionFactory.opensession(ExecutorType.BATCH);
PerSonMapper personMapper=sqlSession.getMapper(PersonMapper.class);
for(int i=0;i<5;i++){
personMapper.addPerson(new Person("wang","email@123.com","F")); }
mybatis批处理数据的更多相关文章
- java中使用JDBC的preparedStatement批处理数据的添加
在项目中我们偶尔可能会遇到批量向数据库中导入数据,如果批处理的情况较多的情况下可以使用spring batch,如果只是一个导入功能的话可以考虑使用jdbc的preparedStatement处理. ...
- mysql 存储过程在批处理数据中的应用
最近批处理数据的时候,突然想到:为什么不使用存储过程进行数据批处理? 为什么要进行批处理? 自答:减少数据库连接次数,提高效率. 存储过程批处理数据的优点:一次编译,永久执行. 这次的批处理逻辑较简单 ...
- MyBatis框架——mybatis插入数据返回主键(mysql、oracle)
向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键.主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A.B中插入数据(A的主键是 ...
- mybatis ---- 实现数据的增删改查
前面介绍了接口方式的编程,需要注意的是:在book.xml文件中,<mapper namespace="com.mybatis.dao.IBookDao"> ,命名空间 ...
- mybatis框架(6)---mybatis插入数据后获取自增主键
mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...
- Mybatis插入数据后返回主键id
有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...
- MyBatis插入数据之后返回插入记录的id
MyBatis插入数据的时候,返回该记录的id<insert id="insert" keyProperty="id" useGeneratedKeys= ...
- Mybatis实现数据的增删改查
Mybatis实现数据的增删改查 1.项目结构(使用maven创建项目) 2.App.java package com.GetcharZp.MyBatisStudy; import java.io.I ...
- mybatis 插入数据返回 -1
通常使用mybatis对数据进行增删改会进行返回值的判断, 返回值不为1时说明该条语句执行失败,不过今天遇到程序报错返回值不为1,去数据库查看却发现插入成功了,后来知道原来是因为mybatis一次对多 ...
随机推荐
- C#上手练习4(Break、CONITINUE语句)
C# 中的 continue 语句有点像 break 语句.但它不是强制终止,continue 会跳过当前循环中的代码,强制开始下一次循环. 对于 for 循环,continue 语句会导致执行条件测 ...
- 机器学习常见的几种评价指标:精确率(Precision)、召回率(Recall)、F值(F-measure)、ROC曲线、AUC、准确率(Accuracy)
原文链接:https://blog.csdn.net/weixin_42518879/article/details/83959319 主要内容:机器学习中常见的几种评价指标,它们各自的含义和计算(注 ...
- java基础第十七篇之网络编程和装饰者模式
1:网络概述 1.1 网络的发展Net 1964年,美国人---> 阿帕网--->以太网Internet 1.2 网络的通信协议 windows电脑,android手机,Mac平板---& ...
- Java性能之优化RPC网络通信
服务框架的核心 大型服务框架的核心:RPC通信 微服务的核心是远程通信和服务治理 远程通信提供了服务之间通信的桥梁,服务治理提供了服务的后勤保障 服务的拆分增加了通信的成本,因此远程通信很容易成为系统 ...
- centos7下通过yum方式安装docker环境
1.移除旧版本: yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ ...
- layui常用的验证
var LayVerifyExtend = { notnullNonnegativeInteger: function (value, item) { //value:表单的值.item:表单的DOM ...
- HTTP中的2XX状态码
HTTP状态码分类 1XX --信息,服务器收到请求,需要请求者继续执行操作 2XX--成功,操作被成功接收并处理 3XX--重定向,需要进一步的操作以完成请求 4XX--客户端错误,请求包含语法错误 ...
- c# 打印的问题总结
近期 做了一个打印的类,有一下功能: /// <summary> /// 打印数据表格的类 /// 2016/05/19 @佳序 /// 功能: /// 01.自动 ...
- ios获取摄像头
NSError *error = nil; session = [[AVCaptureSession alloc] init] ; session.sessionPreset = AVCaptureS ...
- Node.js实现热加载
不管是node.js原生开发,还是借助express,kora等框架开发node.js的情况下,在对代码做出更新后,都是需要重启已生效我们的文件的. 本文记录一次在原生node.js开发的时候,为项目 ...