记录通过mybatis处理大批量oracle数据
来源:互联网 发布:店铺淘宝客怎么做 编辑:程序博客网 时间:2024/05/16 16:17
主要方式为通过存储过程来处理大批量数据;
效率不错,十万条数据用时60s左右,测试时间包括TypeHandler中处理数据、数据传输、数据处理,
示例记录如下。
参考资料
http://code.google.com/p/mybatis/source/browse/trunk/src/test/java/org/apache/ibatis/submitted/sptests/?r=3394
http://blog.csdn.net/kkdelta/article/details/7226331
1,oracle数据类型定义
<pre class="sql" name="code">CREATE OR REPLACE TYPE BASE_DATA AS OBJECT ( col1 VARCHAR2(40));
2,定义数据类型的数组集合
CREATE OR REPLACE TYPE TABLE_OF_BASE AS TABLE OF BASE_DATA;
3,创建存储过程
CREATE OR REPLACE procedure data_pro(base_datas IN TABLE_OF_BASE) as BASEDATA BASE_DATA;begin FOR idx IN base_datas.first() .. base_datas.last() LOOP BASEDATA := base_datas(idx); INSERT INTO TESTTABLE ( bstnk) VALUES ( B2CDATA.bstnk); end loop;exception when others then rollback; raise;end;
4,定义TypeHandler
import java.sql.Array;import java.sql.CallableStatement;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.text.SimpleDateFormat;import java.util.List;import oracle.sql.ArrayDescriptor;import oracle.sql.STRUCT;import oracle.sql.StructDescriptor;import org.apache.ibatis.type.JdbcType;import org.apache.ibatis.type.TypeHandler;import com.haier.openplatform.alm.radar.domain.RRSLesJDMSG;public class ArrayTypeHandler implements TypeHandler<Object> { public RadarL0TypeHandler() { super(); } public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { List<RRSLesJDMSG> objects = (List<RRSLesJDMSG>) parameter; StructDescriptor structDescriptor = StructDescriptor.createDescriptor("BASE_DATA", ps.getConnection()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); STRUCT[] structs = new STRUCT[objects.size()]; for (int index = 0; index < objects.size(); index++) { RRSLesJDMSG pack = objects.get(index); Object[] params = new Object[1]; params[0] = pack.getBstnk(); STRUCT struct = new STRUCT(structDescriptor, ps.getConnection(), params); structs[index] = struct; } ArrayDescriptor desc = ArrayDescriptor.createDescriptor("TABLE_OF_BASE", ps.getConnection()); oracle.sql.ARRAY oracleArray = new oracle.sql.ARRAY(desc, ps.getConnection(), structs); ps.setArray(i, oracleArray); } public Object getResult(ResultSet rs, String columnName) throws SQLException { Array array = rs.getArray(columnName); return array.getArray(); } @Override public Object getResult(CallableStatement cs, int columnIndex) throws SQLException { Array array = cs.getArray(columnIndex); return array.getArray(); } @Override public Object getResult(ResultSet rs, int columnIndex) throws SQLException { // TODO Auto-generated method stub return null; } }
5,设置mapper.xml文件
<update id="testDataList" parameterType="java.util.Map" statementType="CALLABLE"> <![CDATA[ {call batchInsertB2C(#{datalist,mode=IN,jdbcType=ARRAY,typeHandler=com.quartz.ArrayTypeHandler})} ]]> </update>
0 0
- 记录通过mybatis处理大批量oracle数据
- Oracle中大批量删除数据的方法(通过主键删除)
- Spring 处理大批量数据
- oracle大批量数据更新
- Oracle大批量插入数据
- Oracle 大批量操作数据
- Oracle大批量插入数据
- Oracle存储过程处理大批量数据性能测试
- Spring+Hibernate大批量处理数据
- Spring+Hibernate处理大批量数据
- Spring+Hibernate大批量处理数据
- Spring+Hibernate大批量处理数据
- spring+hibernate 大批量处理数据
- Spring+Hibernate处理大批量数据
- Oracle大批量删除数据方法
- 【oracle】关于大批量数据删除
- 不用存储过程怎么处理大批量数据?读取大批量数据
- 通过数组方式向Oracle大批量插入数据(10万条11秒)
- 一组基于SVG矢量图库和jQuery/GSAP的精美图标动画
- cmd ren命令 重命名文件(夹)
- 【干货分享】移动营销宝典--入门篇
- 2014 年最火的 21 款JavaScript 框架
- ubuntu命令查询版本和内核版本
- 记录通过mybatis处理大批量oracle数据
- opencv安装过程中的问题与解决
- Java集合类源码同步否~
- Android学习笔记之Service
- Linux学习笔记——如何在交叉编译时使用共享库
- 第一章 绪论 作业
- 根据经纬度获取城市信息(谷歌地图api)
- 励志,人生的方向
- SPServices介绍之三:使用SPSerivces对象调用Web Service