- 浏览: 158927 次
- 性别:
- 来自: 魔都
最新评论
-
renzhengzhi:
mybatis的这个批量insert为什么不是在一个事务里?
使用Mybatis做批量插入 -
forlab:
花架构威武吧唧,一统江湖
Eclipse插件之Findbugs -
恋上你的味道:
花家狗V587 神功盖屎 一桶浆糊
Netty+Tomcat热部署端口占用解决办法 -
hekuilove:
宁帅陈 写道你好,我想通过java程序获取@当前登录用户的人员 ...
新浪微博API开发流程 -
宁帅陈:
你好,我想通过java程序获取@当前登录用户的人员以及信息,怎 ...
新浪微博API开发流程
最近有个需求,将excel的数据导入的数据库的这个一个操作。
工作主要分为:解析excel,将excel中的数据单条循环插入数据库。
使用框架:mybatis+spring
使用过Mybatis的人都知道,自动生成的Mapper里是不支持批量插入的,也不支持SQL。这个让我有点小小的郁闷,网上查资料发现对这方面的资料颇少。于是决定写一篇blog案例分享心得。
或许有人要问既然Mybatis既然支持插入了,为何非要要使用批量插入。我这里的excel中的数据最少也是上W条,如果是使用单条循环插入的话会对数据库造成很大的负荷状态,数据库的连接资源是有限的,循环插入的时候会直接的影响其它的数据库操作。
pojo
interface
再看看XML里的操作
如此简单的操作,我也不做多说吧。相信都能看懂#{item.uuid,jdbcType=CHAR}其中uuid是对象的字段,CHAR是对应的数据库字段类型
聋家狗 FU*CK YOU
我当时的业务是导入csv到数据库里,当时一个excel多则上百万条,少则几万条
,由于太多,我就1000条一次执行一次批量,插完为止。。
当时用的数据库是MySQL,我最近用oracle也有一个类似的情况想这样干结果不行了,oracle不支持这种语法
select标签里面是可以包含insert语句
我是把大量的数据拆开来N个1000条来执行的,执行N次
当然确定,select一样一样的。。insert也行。。没实现类
我的是MySQL
工作主要分为:解析excel,将excel中的数据单条循环插入数据库。
使用框架:mybatis+spring
使用过Mybatis的人都知道,自动生成的Mapper里是不支持批量插入的,也不支持SQL。这个让我有点小小的郁闷,网上查资料发现对这方面的资料颇少。于是决定写一篇blog案例分享心得。
或许有人要问既然Mybatis既然支持插入了,为何非要要使用批量插入。我这里的excel中的数据最少也是上W条,如果是使用单条循环插入的话会对数据库造成很大的负荷状态,数据库的连接资源是有限的,循环插入的时候会直接的影响其它的数据库操作。
pojo
package me.gall.business.model.mybatis.bean; /** * @author Quinn He * @dateTime 2012-2-9 下午4:35:18 * */ public class ApkStatisticRaw { private Integer id; private String uuid; private String apkId; private String eventId; private Integer supplyId; private Integer channelId; private String fileUploadRecordId; private String productName; private String content; private Long time; private Integer numbers; private Integer status; private String creator; private Long createTime; private String other; set... get... }
interface
import me.gall.business.model.mybatis.bean.ApkStatisticRaw; /** * @author Quinn He * @dateTime 2012-2-20 下午7:48:39 */ public interface ApkStatisticRawExtMapper { /** * 专门针对在导入CSV文件时 * 频繁操作数据库造成的数据库并发问题 * 固此方法为批量插入方法 * * @author Quinn He * @dateTime 2012-3-30 上午11:34:22 * @param list */ void batchInsert(List<ApkStatisticRaw> list); }
再看看XML里的操作
<select id="batchInsert" parameterType="java.util.List"> insert into apk_statistic_raw (uuid,apk_id,event_id,supply_id,channel_id,file_upload_record_id,product_name,content,time,numbers,status,creator,create_time,other )values <foreach collection="list" item="item" index="index" separator=","> (#{item.uuid,jdbcType=CHAR},#{item.apkId,jdbcType=CHAR},#{item.eventId,jdbcType=CHAR},#{item.supplyId,jdbcType=INTEGER},#{item.channelId,jdbcType=INTEGER} ,#{item.fileUploadRecordId,jdbcType=CHAR},#{item.productName,jdbcType=VARCHAR},#{item.content,jdbcType=VARCHAR},#{item.time,jdbcType=BIGINT}, #{item.numbers,jdbcType=INTEGER},#{item.status,jdbcType=INTEGER},#{item.creator,jdbcType=VARCHAR},#{item.createTime,jdbcType=BIGINT},#{item.other,jdbcType=VARCHAR} ) </foreach> </select>
如此简单的操作,我也不做多说吧。相信都能看懂#{item.uuid,jdbcType=CHAR}其中uuid是对象的字段,CHAR是对应的数据库字段类型
评论
15 楼
renzhengzhi
2015-08-24
mybatis的这个批量insert为什么不是在一个事务里?
14 楼
hekuilove
2014-03-20
恋上你的味道 写道
花家狗V587 一统江湖
聋家狗 FU*CK YOU
13 楼
恋上你的味道
2014-03-20
花家狗V587 一统江湖
12 楼
hekuilove
2014-01-21
qianmo666 写道
最大插入量是多少?
我当时的业务是导入csv到数据库里,当时一个excel多则上百万条,少则几万条
,由于太多,我就1000条一次执行一次批量,插完为止。。
当时用的数据库是MySQL,我最近用oracle也有一个类似的情况想这样干结果不行了,oracle不支持这种语法
11 楼
qianmo666
2014-01-06
最大插入量是多少?
10 楼
RyanLu
2013-01-09
请问如果我的ID是自增长的,我批量插入的时候,每个domain object的id,能返回吗?尝试过在里面加<select key>好像不起作用。我用是sql server 2005
<insert id="batchInsert" parameterType="java.util.List"> <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer"> SELECT SCOPE_IDENTITY() AS id </selectKey> <foreach collection="list" item="item" index="index" separator=" "> insert into itd.Approval (ApplicationId, ApproverId, ApproverProjectId, Priority, Status, ApprovedTime, Comments) select #{item.applicationId,jdbcType=INTEGER}, #{item.approverId,jdbcType=INTEGER}, #{item.approverProjectId,jdbcType=INTEGER}, #{item.priority,jdbcType=INTEGER}, #{item.status,jdbcType=CHAR}, #{item.approvedTime,jdbcType=TIMESTAMP}, #{item.comments,jdbcType=NVARCHAR} </foreach> </insert>
9 楼
zq93741833
2012-11-23
小五哥丶 写道
妹的,全是SELECT,
select标签里面是可以包含insert语句
8 楼
hekuilove
2012-11-06
hanzhicheng754 写道
哥们,你插入的最大量是多少?
我是把大量的数据拆开来N个1000条来执行的,执行N次
7 楼
hanzhicheng754
2012-11-05
哥们,你插入的最大量是多少?
6 楼
hekuilove
2012-10-24
natian306 写道
select? 确定不是insert? 楼主是否直接用的mapper操作? 是否有dao的实现类?
当然确定,select一样一样的。。insert也行。。没实现类
5 楼
natian306
2012-10-21
select? 确定不是insert? 楼主是否直接用的mapper操作? 是否有dao的实现类?
4 楼
hekuilove
2012-10-11
kingliu 写道
哥们儿,你用的什么数据库,我用sybase发现不行啊
我的是MySQL
3 楼
kingliu
2012-10-11
哥们儿,你用的什么数据库,我用sybase发现不行啊
2 楼
j315321
2012-05-22
能不能把批量操作的java方法贴出来看看,谢……
1 楼
小五哥丶
2012-04-20
妹的,全是SELECT,
发表评论
-
JVM相关笔记
2019-01-30 21:19 5031、检查死锁 jps -v [查看所有Java进 ... -
Git常用命令记录
2019-01-08 11:20 536强制更新 git log git reset --hard ... -
Netty+Tomcat热部署端口占用解决办法
2015-06-13 17:32 8300在eclipse使用maven deploy (tomcat: ... -
MAVEN+TOMCAT7、8的Deploy配置
2015-06-13 13:46 41、配置好conf/tomcat-users.xml,加入如下 ... -
javascript之HashMap
2015-04-16 11:23 1223用法 var map = new HashMap(); ... -
发现面向对象的美之抽象
2014-09-19 11:56 0很多开发者在面试的时候恐怕都问过或者被问过,面向对象的几大特性 ... -
ActiveMQ初级教程
2014-05-20 18:07 2698MQ的思想其实和连接池差不多,只不过一个是队列,一个是多线程。 ... -
Mybatis批量插入Oracle、MySQL
2014-05-19 16:09 5209要做批量插入数据库, ... -
ActiveMQ发送接收TextMessage、BytesMessage
2014-02-24 16:51 76481、TextMessage 发送部分 package o ... -
UDP通讯协议
2014-02-20 21:01 1243在做手机和服务端通讯时,UDP是其中可用协议之一。不过UDP的 ... -
JBOSS7配置JDNI
2014-02-13 21:52 13111、配置jar包 在jboss7的安装目录modules下建立 ... -
自定义DWR拦截器
2013-06-04 19:07 4550使用DWR和其它mvc框架混用时(如struts和spring ... -
Eclipse+TOMCAT工程如何deploy在webapps文件夹
2013-02-05 20:10 4821Eclipse集成Tomcat发布工程的时候,有时候项目发布不 ... -
根据时间的复杂统计
2012-12-07 18:24 1310客户的需求往往是各种各样的,本人在开发系统的时候遇到一个比较复 ... -
MySQL UTF-8中文排序
2012-06-15 16:08 2896假如在MySQL的表中有一列字段是中文,需要根据该字段从a-z ... -
关于:the last packet sent successfully to the server was 0 milliseconds ago
2012-04-20 10:11 2748最近老是出现个问题,早上以来公司登录公司的后台业务系统(由我是 ... -
jquery ajax parseerror问题
2012-03-03 12:32 3888以前都是用ajax做一些简单的东东,很少用ajax做查询。今日 ... -
过滤器chain.doFilter(req, resp);抛异常java.lang.IllegalArgumentException
2012-02-08 21:35 2598今天在开发中遇到一个错误 org.springframew ... -
关于maven工程内存溢出解决办法
2012-01-04 14:17 2188在看maven in action的时候意外发现我们项目中经常 ...
相关推荐
代码部分包含了使用JDBC和Mybatis进行批量插入的示例,你可以直接运行这些代码进行测试。同时,数据库脚本和初始数据也在其中,确保了测试的一致性和可重复性。 通过这样的性能测试,我们可以了解到在特定场景下,...
本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...
Spring 中使用 MyBatis 实现批量插入的示例代码 一、前言 在实际开发中,批量插入数据是非常常见的需求。使用 Spring 框架结合 MyBatis 框架,可以实现高效的批量插入操作。本文将详细介绍 Spring 中使用 MyBatis ...
本文将深入探讨如何在 Mybatis Plus 中自定义批量插入和批量更新,并根据唯一索引来确保数据的唯一性。 首先,了解 Mybatis Plus 的批量操作基础。Mybatis Plus 提供了 `batchInsert()` 和 `batchUpdate()` 方法来...
本文将详细介绍如何使用Mybatis实现多表联合查询和批量插入。 一、多表联合查询 在实际开发中,经常需要对多个表进行联合查询,例如,查询员工信息同时需要关联部门信息和职位信息。Mybatis提供了强大的联合查询...
下面我们将详细介绍如何在MyBatisPlus 3.5中使用批量插入: 1. 引入依赖: 首先,你需要在项目中引入MyBatisPlus的依赖。如果使用Maven,可以在pom.xml文件中添加如下依赖: ```xml <groupId>...
Java实现使用Mybatis将数据批量插入到Oracle数据库,并且可以使用Oracle序列来生成主键
批量插入使用`ExecutorType.BATCH` 的一个示例代码如下: ```java @Autowired private SqlSessionTemplate sqlSessionTemplate; // 获取一个BATCH模式且自动提交为false的session SqlSession session = ...
在实际测试中,使用MyBatis批量插入可以达到至少快一倍的执行效率。 MyBatis批量插入的实现可以通过使用foreach标签来实现。在XML配置文件中,我们可以使用foreach标签来批量插入数据。例如: ```xml insert into...
使用方法请看博客 https://blog.csdn.net/bandaotixiruiqiang/article/details/72478361#comments_12931827
只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢只提供代码,自己去下载相关jar包谢谢
本文将深入探讨如何利用MyBatis框架结合MySQL数据库实现批量插入功能,包括其原理、配置、代码实现以及优化策略。 ### 一、MyBatis框架简介 MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级...
但是,在不同的数据库管理系统中,foreach标签的使用有一些区别,今天我们主要介绍MyBatis foreach批量插入数据在Oracle和MySQL中的区别。 首先,让我们先了解一下foreach标签的基本使用方法。foreach标签是MyBatis...
本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...
MyBatis动态SQL和批量插入的应用 MyBatis是一款功能强大且灵活的持久层框架,提供了多种方式来对数据库进行交互。其中,动态SQL是一种非常强大的特性,能够根据不同的条件生成不同的SQL语句。下面将详细介绍MyBatis...
本文将详细介绍如何使用Mybatis实现数据批量插入。 使用foreach标签实现批量插入 在Mybatis中,可以使用foreach标签来实现数据批量插入。foreach标签可以对一个集合进行迭代,并生成相应的SQL语句。下面是一个简单...
总的来说,"mybatis-generator代码生成插件(中文注释,生成批量插入及修改)"是一款强大的开发辅助工具,它通过自动化代码生成,降低了开发难度,提高了代码质量,尤其是在处理复杂数据关系和大量数据操作时,其...
本文将详细介绍如何利用MyBatis结合多线程和CountDownLatch闭锁来实现数据的批量插入。 首先,我们来看`mybatis批处理`。MyBatis的批处理功能允许我们在一次数据库连接中执行多条SQL语句,从而减少了数据库连接的...
4. **使用 SQL 批量插入(SQL Batch Insert)** MyBatis Plus 支持自定义 SQL,可以通过 `executeBatch()` 执行批量 SQL 语句,如 `INSERT INTO table (column1, column2) VALUES (?, ?), (?, ?), ...` 这种形式,...
在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...