`

使用mybatis 批量插入

阅读更多

                                                         

                                                       使用mybatis 批量插入


(1.1) 使用Statement 批量插入
public void batchInsertJdbc1()throws Exception{
  DataSource ds = (DataSource)SpringContextHolder.getBean("dataSource");
  Connection conn = ds.getConnection();
  Statement st =conn.createStatement();
  String sql = "insert into user(userid,username,birthday,salary) values('3000','武二郞',now(),8000);";
  for(int i=0;i<5000;i++){
   st.addBatch(sql);
  }
  st.executeBatch();
}

(1.2) 使用PreparedStatement 批量插入,速度比1.1快
private void jdbc2()throws Exception{
  Connection conn = DBUtil.getConnection();
  String sql = "insert into user values (?,?,?,?)";
  PreparedStatement st =conn.prepareStatement(sql);
  for(int i=0;i<5000;i++){
   st.setString(1, "3001");
   st.setString(2, "武二郞");
   st.setDate(3, null);
   st.setDouble(4, 9000);
   st.addBatch();
  }
  st.executeBatch();
  System.out.println(new Date());
  st.close();
  conn.close();
 }

(1.3) 使用mybatis 批量插入 , 速度超快
分批插入,每批1000行

public void batchInsert(List<UserPO> list){
  int len = list.size();
  int mod =1000;
  int n = len%mod==0? len/mod:len/mod + 1;
  int start = 0;
  int pos = 0;
  int k =mod;
  List subList = null;
  for(int i=0;i<n;i++){
   if(len/(i+1) < mod){
    k=len%mod;
   }
   pos +=k;
   subList = list.subList(start, pos);
   userDao.batchInsert(subList);
   start+=mod;
  }
 }

public void batchInsert(List<UserPO> list){
  this.insert("cn.demo.dao.IUserDao.batchInsert", list);
 }
 
<insert id="batchInsert" parameterType="java.util.List" >
  insert into user(userid,username)
  values
  <foreach item="o" collection="list" index="ind" separator=",">
   (#{o.userId},#{o.userName})
  </foreach>
 </insert>
 
(1.4) 通过SqlSession批量插入
public void batchInsertJdbc3(List<UserPO> list)throws Exception{
  log.info(this.getClass()+" batchInsertJdbc3");
  //新获取一个模式为BATCH,自动提交为false的session
  //如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
  SqlSession session = this.getSqlSessionTemplate().getSqlSessionFactory().openSession(ExecutorType.BATCH,false);
  UserPO user = null;
  try{
  for(int i=0;i<list.size();i++){
   user = list.get(i);
   session.insert("cn.demo.dao.IUserDao.insertUser", user);
   if ((i+1) % 1000 == 0 || i == list.size() - 1) {
    //log.info(this.getClass()+" batchInsertJdbc3 commit " + i);
                //手动每1000个一提交,提交后无法回滚
    session.commit();
                //清理缓存,防止溢出
                session.clearCache();
            }
  }
  }catch(Exception e){
   session.rollback();
   e.printStackTrace();
  }
  finally{
   session.close();
  }
 }
 

 


 

分享到:
评论

相关推荐

    MyBatis批量插入Update

    在实际测试中,使用MyBatis批量插入可以达到至少快一倍的执行效率。 MyBatis批量插入的实现可以通过使用foreach标签来实现。在XML配置文件中,我们可以使用foreach标签来批量插入数据。例如: ```xml insert into...

    Java实现mybatis批量插入数据到Oracle

    本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...

    Mybatis与JDBC批量插入MySQL数据库性能测试

    代码部分包含了使用JDBC和Mybatis进行批量插入的示例,你可以直接运行这些代码进行测试。同时,数据库脚本和初始数据也在其中,确保了测试的一致性和可重复性。 通过这样的性能测试,我们可以了解到在特定场景下,...

    mybatis 批量插入返回主键

    只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢

    MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)

    在使用MyBatis批量插入数据到Oracle数据库时,需要将useGeneratedKeys设置为false,以避免主键冲突的错误。 本文分享了MyBatis批量插入数据到Oracle数据库中的两种方式,希望对大家有所帮助。如果您有任何疑问,请...

    spring中使用mybatis实现批量插入的示例代码

    Spring 中使用 MyBatis 实现批量插入的示例代码 一、前言 在实际开发中,批量插入数据是非常常见的需求。使用 Spring 框架结合 MyBatis 框架,可以实现高效的批量插入操作。本文将详细介绍 Spring 中使用 MyBatis ...

    Mybatis 3+Mysql 实现批量插入

    本文将深入探讨如何利用MyBatis框架结合MySQL数据库实现批量插入功能,包括其原理、配置、代码实现以及优化策略。 ### 一、MyBatis框架简介 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级...

    MyBatis动态SQL,MyBatis批量插入(Oracle数据库)[收集].pdf

    MyBatis动态SQL和批量插入的应用 MyBatis是一款功能强大且灵活的持久层框架,提供了多种方式来对数据库进行交互。其中,动态SQL是一种非常强大的特性,能够根据不同的条件生成不同的SQL语句。下面将详细介绍MyBatis...

    Java使用Mybatis将数据批量插入到Oracle

    Java实现使用Mybatis将数据批量插入到Oracle数据库,并且可以使用Oracle序列来生成主键

    mybatis批量添加

    mybatis批量添加的时候报错总结报错 parameter'_frch_item_0 not found

    mybatis 批量插入 嵌套select.pdf

    这个问题的描述是关于如何在MyBatis中正确地执行一个批量插入操作,其中一个字段的值依赖于对同一张表的SELECT查询结果。 原始的XML映射文件中的SQL插入语句尝试在FROM子句中直接更新目标表'chat_messages',这是不...

    Mybatis批量foreach merge into的用法

    Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...

    Mybatis实现多表联合查询和批量插入

    本文将详细介绍如何使用Mybatis实现多表联合查询和批量插入。 一、多表联合查询 在实际开发中,经常需要对多个表进行联合查询,例如,查询员工信息同时需要关联部门信息和职位信息。Mybatis提供了强大的联合查询...

    MyBatis批量插入(insert)数据操作

    在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...

    MyBatis批量插入数据过程解析

    由于项目使用了Spring+MyBatis的配置,所以我们打算使用MyBatis批量插入。 在MyBatis中,批量插入数据可以通过foreach标签来实现。foreach标签的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach...

    Mybatis批量插入的四种方式.docx

    Mybatis批量插入的四种方式 Mybatis 是一个流行的 Java 持久层框架,提供了多种方式来实现批量插入操作。下面将详细介绍 Mybatis 批量插入的四种方式。 1. 循环插入 循环插入是最简单的批量插入方式,即通过循环...

    Mybatis批量插入数据返回主键的实现

    Mybatis批量插入数据返回主键的实现 Mybatis是当前最流行的持久层框架之一,它提供了强大的批量插入功能,但是在批量插入数据时如何返回主键是一个常见的问题本文将详细介绍Mybatis批量插入数据返回主键的实现。 ...

    详解MyBatis批量插入数据Mapper配置文件的写法

    这篇文章将详细讲解如何在MyBatis的Mapper配置文件中实现批量插入。 首先,批量插入的数据通常来源于一个集合,如List对象,因此在Mapper接口中,我们需要定义一个方法接收这样的参数。例如,我们可以创建一个`...

    mybatispuls3.5使用批量插入

    下面我们将详细介绍如何在MyBatisPlus 3.5中使用批量插入: 1. 引入依赖: 首先,你需要在项目中引入MyBatisPlus的依赖。如果使用Maven,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;...

    SpringBoot整合Mybatis连接SQL Server 跨库批量插入

    本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...

Global site tag (gtag.js) - Google Analytics