MyBatis Oracle 使用序列批量插入数据库

  由于现在项目昨晚批处理作业抽取数据主键生成器出现了问题,紧急解决用序列作为主键。

  底层使用MyBatis与Oracle 数据库库交互。 和度娘交谈了很久她都没有给出解决方案。为

  此自己写了想了一种方式,没想到一次测试完全通过。

  大致demo如下 

  1. java 代码 

     1 /**
     2  * 文件名称: InsertBatch
     3  * 内容摘要: 测试 MyBatis 使用序列批量插入
     4  * 创 建 人: sunrise
     5  * 创建日期:2015-6-18 下午9:16:06
     6  * 修改记录1: // 修改历史记录,包括修改日期、修改者及修改内容
     7  *   修改日期:
     8  *   版 本 号:
     9  *   修 改 人:
    10  *   修改内容:
    11  * 修改记录2:…
    12  */
    13 @TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
    14 public class InsertBatch extends
    15         SpringTransactionalTestCaseWithAllContextConfiguration {
    16
    17     private static Logger logger = LoggerFactory.getLogger(InsertBatch.class);
    18     @Autowired
    19     DataComponent dataComponent;
    20     @Test
    21     public void test()
    22     {
    23
    24           int count = 0;//条数
    25           long starTime;//时间
    26           List<Map<String,String>> list = new ArrayList<Map<String,String>>();
    27           do
    28           {
    29               Map<String,String> map= new HashMap<String,String>();
    30               map.put("DEPT_NAME","XGY");
    31               list.add(map);
    32               count++;
    33           } while (count<2000);
    34
    35           logger.info(">>>>>>>>>>>>>>>>>>>>>>>>> star");
    36           starTime = System.currentTimeMillis();
    37           sunrise.insertData("sda.HisDataHandle.xgy", list);
    38           logger.info(">>>>>>>>>>>>>>>> 本次插入:{};耗时:{}",count,
    39                   System.currentTimeMillis()-starTime);
    40           logger.info(">>>>>>>>>>>>>>>>>>>>>>>>> over");
    41     }
    42 }
  2. sql xml 

    <!-- 测试sql --><insert id="xgy" parameterType="list">
                insert into
                sunrise(
                ID,
                DEPT_NAME
                )
                with t as (
                <foreach collection="list" item="item" index="index" separator="union all" >
                        select
                            #{item.DEPT_NAME} DEPT_NAME
                        from dual
                 </foreach>
                 )
             select SEQ_sunrise.Nextval,t.DEPT_NAME from t
         </insert>
  3. 日志

    [INFO] 15-06-18 21:32:25,446 [com.sunrise.test.dao.InsertBatch]  - >>>>>>>>>>>>>>>>>>>>>>>>> star
    [INFO] 15-06-18 21:32:25,759 [com.ophiux.test.dao.InsertBatch]  - >>>>>>>>>>>>>>>> 本次插入:2000;耗时:312
    [INFO] 15-06-18 21:32:25,760 [com.sunrise.test.dao.InsertBatch]  - >>>>>>>>>>>>>>>>>>>>>>>>> over
  4. 数据库截图
时间: 2024-11-04 23:17:55

MyBatis Oracle 使用序列批量插入数据库的相关文章

DataTable批量插入数据库

DataTable批量插入数据库 最近在将excel中的文件导入到数据库中,用程序进行编写,由于数据量较大所以速度很慢,后来采用了SqlBulkCopy类,解决了速度的问题,我就insert语句,sqldataadapter.update(dataset,tablename);sqlbulkcopy.WriteToServer(datatable);三个方法的性能进行比较: 1.生成测试的datatable表,表结构如下: UniqueID(主键,自动增长) | CompanyName | Co

Java MySql 批量插入数据库addBatch

//addBatch批量插入数据库 public static void insertCommentToMySql(Set<String> commentList) { Iterator<String> it = commentList.iterator(); Statement st=null; try { st = DBConnection.getConnection(dbName,dbUser,dbPwd).createStatement(); } catch (SQLExc

MYSQL批量插入数据库实现语句性能分析

假定我们的表结构如下 代码如下   CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCHAR( 50 ) NOT NULL, other_value VARCHAR( 50 ) NOT NULL ) 通常情况下单条插入的sql语句我们会这么写: 代码如下   INSERT INTO example (example_id, name, value, other_value)

Word中表格内容批量插入数据库

一.内容概要 1,下载jacob.jar,将jacob自带的DLL放入SYSTEM32中,确保电脑装了WORD程序: 2,方法是:FILE[]遍历特定文件夹,JACOB读取WORD中表格的内容,封装成arraylist,然后批量插入数据库 二.核心码 1,words.java;遍历文件夹,取出word表格中的内容到arraylist package main.java.utils; import java.io.File;//用于遍历文件夹下所有文件 import java.util.Array

使用SqlBulkCopy将DataTable中的数据批量插入数据库中

#region 使用SqlBulkCopy将DataTable中的数据批量插入数据库中 /// <summary> /// 注意:DataTable中的列需要与数据库表中的列完全一致. /// </summary> /// <param name="conStr">数据库连接串</param> /// <param name="strTableName">数据库中对应的表名</param> //

批量插入数据库数据,有则更新,无则追加

# 批量插入数据库数据,有则更新,无则追加import pymysqlimport numpy as npimport pandas as pdconn = pymysql.connect( host='127.0.0.1', port=3306, user='root', passwd='root', db='py3_userinfo', charset='utf8' )# 游标cur = conn.cursor()df = pd.DataFrame([['合肥', 12, 110],['北京

.net 使用SqlBulkCopy批量插入数据库

//一次批量插入100W条数据到数据库 static void Main(string[] args) { System.Random a = new Random(System.DateTime.Now.Millisecond); Stopwatch sw = new Stopwatch(); DataTable dt = GetTableSchema(); for (int count = 0; count < 1000000; count++) { DataRow r = dt.NewRo

Oracle 逐条和批量插入数据方式对比

创建测试表 create table base_users ( userid         varchar2(16), username  varchar2(32), passwd      varchar2(16) )tablespace cat_data; 采用一条一条插入的方式 create or replace procedure insert_data_one_by_one(n in number) as currentId number(16) := 0; l_userid var

大数据批量插入数据库使用(SqlBulkCopy )效率更高

SqlBulkCopy类是System.Data.SqlClient下的类,我们开发中不常用,甚至不知道有这么一个类的存在,但确实比sql插入,事务批量插入,sql批量拼接插入快很多,比调用存储过程插入方便 下面是它的用法: public static bool ExecuteTransactionScopeInsert(DataTable dt, int batchSize) { int count = dt.Rows.Count; string tableName = "TestTable&