批处理数据主要有三种方式:

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批处理数据的更多相关文章

  1. java中使用JDBC的preparedStatement批处理数据的添加

    在项目中我们偶尔可能会遇到批量向数据库中导入数据,如果批处理的情况较多的情况下可以使用spring batch,如果只是一个导入功能的话可以考虑使用jdbc的preparedStatement处理. ...

  2. mysql 存储过程在批处理数据中的应用

    最近批处理数据的时候,突然想到:为什么不使用存储过程进行数据批处理? 为什么要进行批处理? 自答:减少数据库连接次数,提高效率. 存储过程批处理数据的优点:一次编译,永久执行. 这次的批处理逻辑较简单 ...

  3. MyBatis框架——mybatis插入数据返回主键(mysql、oracle)

    向数据库中插入数据时,大多数情况都会使用自增列或者UUID做为主键.主键的值都是插入之前无法知道的,但很多情况下我们在插入数据后需要使用刚刚插入数据的主键,比如向两张关联表A.B中插入数据(A的主键是 ...

  4. mybatis ---- 实现数据的增删改查

    前面介绍了接口方式的编程,需要注意的是:在book.xml文件中,<mapper namespace="com.mybatis.dao.IBookDao"> ,命名空间 ...

  5. mybatis框架(6)---mybatis插入数据后获取自增主键

    mybatis插入数据后获取自增主键 首先理解这就话的意思:就是在往数据库表中插入一条数据的同时,返回该条数据在数据库表中的自增主键值. 有什么用呢,举个例子: 你编辑一条新闻,同时需要给该新闻打上标 ...

  6. Mybatis插入数据后返回主键id

    有时候使用mybatis插入数据后,需要用到记录在数据库中的自增id,可以利用keyProperty来返回,赋值给实体类中的指定字段. 单条记录插入并返回 First, if your databas ...

  7. MyBatis插入数据之后返回插入记录的id

    MyBatis插入数据的时候,返回该记录的id<insert id="insert" keyProperty="id" useGeneratedKeys= ...

  8. Mybatis实现数据的增删改查

    Mybatis实现数据的增删改查 1.项目结构(使用maven创建项目) 2.App.java package com.GetcharZp.MyBatisStudy; import java.io.I ...

  9. mybatis 插入数据返回 -1

    通常使用mybatis对数据进行增删改会进行返回值的判断, 返回值不为1时说明该条语句执行失败,不过今天遇到程序报错返回值不为1,去数据库查看却发现插入成功了,后来知道原来是因为mybatis一次对多 ...

随机推荐

  1. IT兄弟连 HTML5教程 HTML5的基本语法 如何选择开发工具

    如何选择开发工具 有许多可以编辑网页的软件,事实上你不需要用任何专门的软件来建立HTML页面,你所需要的只是一个文本编辑器(或字处理器),如Office Word.记事本.写字板等.制作页面初学者通常 ...

  2. netty ByteBuf与String相互转换

    String转为ByteBuf 1)使用String.getBytes(Charset),将String转为byte[]类型 2)使用Unpooled.wrappedBuffer(byte[]),将b ...

  3. 3、Hibernate的多表关联

    一.数据库中的表关系: 一对一关系 一个人对应一张身份证,一张身份证对应一个人,一对一关系是最好理解的一种关系,在数据库建表的时候可以将人表的主键放置与身份证表里面,也可以将身份证表的主键放置于人表里 ...

  4. Redis for OPS 02:消息订阅和事务管理

    写在前面的话 上一节谈了 Redis 的安装以及五种基本数据类型的一些简单的操作,本章节主要看看 Redis 的另外一些特征,虽然可能不常用,但是还是需要了解的.对于我们运维人员来讲,这些东西更像拓展 ...

  5. ElasticSearch简介(三)——中文分词

    很多时候,我们需要在ElasticSearch中启用中文分词,本文这里简单的介绍一下方法.首先安装中文分词插件.这里使用的是 ik,也可以考虑其他插件(比如 smartcn). $ ./bin/ela ...

  6. Python超详细的字符串用法大全

    字符串拼接 实际场景:把列表中的数据拼接成一个字符串 解决方案:使用 str.join() 方法 >>> li = ['cxk', 'cxk', 'kk', 'caibi'] > ...

  7. String trim() ,去除当前字符串两边的空白字符

    package seday01;/** * String trim() * 去除当前字符串两边的空白字符 * @author xingsir */public class TrimDemo { pub ...

  8. Unity API学习笔记(2)-GameObject的3种Message消息方法

    官方文档>GameObject 首先建立测试对象: 在Father中添加两个脚本(GameObejctTest和Target),分别用来发送Message和接受Message: 在其它GameO ...

  9. MySQL中日期和时间类型

    1 日期类型 MySql中关于日期的类型有Date/Datetime/Timestamp三种类型. 日期赋值时,允许"不严格"语法:任何标点符都可以用做日期部分或时间部分之间的间割 ...

  10. oracle SSL 配置

    可以参考metalink号:762286.1 End To End Examples of using SSL With Oracle's JDBC THIN Driver   ======   大致 ...