mybatis 注解写法 多层嵌套foreach,调用存储过程,批量插入数据

 1    @Select("<script>" +
 2   "DECLARE @edi_Invoice_Details edi_Invoice_Details;" +
 3   "DECLARE @edi_Invoice_OrderItem edi_Invoice_OrderItem;" +
 4
 5   "INSERT INTO @edi_Invoice_Details (" +
 6    "oldso,so,po,invoiceTaxNo,invoiceType,invoiceTitle,\n" +
 7    "invoiceAddress,invoiceState,invoiceTaxRate,invoiceContent,\n" +
 8    "invoiceRatePrice,invoiceNoTaxPrice,invoiceId,invoiceDate,invoiceTaxPrice,invoiceNO,invoiceCode" +
 9    " ) " +
10    "VALUES " +
11    "<foreach collection=\"ediInvoiceDetails\" item=\"ediInvoiceDetail\" index=\"index\" separator=\",\" close=\";\">" +
12    "( " +
13      "#{ediInvoiceDetail.oldso},#{ediInvoiceDetail.so},#{ediInvoiceDetail.po},#{ediInvoiceDetail.invoiceTaxNo},#{ediInvoiceDetail.invoiceType},#{ediInvoiceDetail.invoiceTitle}," +
14      "#{ediInvoiceDetail.invoiceAddress},#{ediInvoiceDetail.invoiceState},#{ediInvoiceDetail.invoiceTaxRate},#{ediInvoiceDetail.invoiceContent},#{ediInvoiceDetail.invoiceRatePrice}," +
15      "#{ediInvoiceDetail.invoiceNoTaxPrice},#{ediInvoiceDetail.invoiceId},CONVERT(DATETIME,#{ediInvoiceDetail.invoiceDate},105),#{ediInvoiceDetail.invoiceTaxPrice},"+
16      "#{ediInvoiceDetail.invoiceNO},#{ediInvoiceDetail.invoiceCode}"+
17     " )" +
18      "</foreach> " +
19      "<foreach collection=\"ediInvoiceDetails\" item=\"ediInvoiceDetail\" index=\"index\" open=\"begin\" close=\";end;\" separator=\";\">" +
20      "INSERT INTO @edi_Invoice_OrderItem ( " +
21      "invoiceDetailsId, so, bomCode, agreementPrice,productAmount, productName " +
22      ") " +
23      "VALUES " +
24
25      "<foreach collection=\"ediInvoiceDetail.sodetails\" item=\"sodetail\" index=\"index\" separator=\",\">( " +
26       "#{sodetail.invoiceDetailsId},#{sodetail.so},#{sodetail.bomCode},#{sodetail.agreementPrice},#{sodetail.productAmount},#{sodetail.productName} "+
27       " )</foreach></foreach> " +
28
29      "EXEC up_EDI_Sync_SaveEDIInvoiceDetails @edi_Invoice_Details,@edi_Invoice_OrderItem"+
30     "</script>")
31     @Options(statementType = StatementType.CALLABLE)
32     void saveEdiInvoiceDetails(@Param("ediInvoiceDetails") List<EDIInvoiceDetails> ediInvoiceDetails);

原文地址:https://www.cnblogs.com/sbk613/p/10894909.html

时间: 2024-07-29 17:30:35

mybatis 注解写法 多层嵌套foreach,调用存储过程,批量插入数据的相关文章

postgres 使用存储过程批量插入数据

参考资料(pl/pgsql 官方文档): http://www.postgresql.org/docs/9.3/static/plpgsql.html create or replace function creatData2() returns boolean AS $BODY$ declare ii integer; begin II:=1; FOR ii IN 1..10000000 LOOP INSERT INTO ipm_model_history_data (res_model, r

sqlserver存储过程批量插入数据

在系统中经常会遇到向数据库中批量插入数据情况,存储过程中没有数组,只有通过字符串分割循环插入,下面是一个本人研究的一个例子: create proc [dbo].[Proc_TestBatchMainDetailIns] @mainName nvarchar(50),@detailNameStr nvarchar(max),@detailAgeStr nvarchar(max), @detailRowCount int=1,@tmpFlag int=1,@newMainId int=0 as b

mysql利用存储过程批量插入数据

最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能.由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍. 首先当然是建表: CREATE TABLE `fortest` (   `ID` INT(30) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,   `IP` VARCHAR(32) NOT NULL,   `OID` VARCHAR(15) DEFAULT NULL) 其次,构建存储过程: DELIMITER $$

调用存储过程取到数据通过NPOI存到Excel中

//调用 public ActionResult GenerateExcel() { DataTable headerTable = new DataTable(); headerTable.Columns.Add("Status_Id", Type.GetType("System.String")); headerTable.Columns.Add("Status_Name", Type.GetType("System.String&

mybatis foreach批量插入数据:Oracle与MySQL区别

mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分割时,最终拼接的代码形式为:insert into table_name (a,b,c) values (v1,v2,v3) ,(v4,v5,v6) ,... separator设置为"union all"分割时,最终拼接的代码形式为:insert into table_name (a,b

批量插入数据(基于Mybatis的实现-Oracle)

前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. ---------------------------------------------------------------------------- 批量插入数据方式: 一.Mybatis 全局设置批处理: 二.Mybatis 局部设置批处理: 三.Mybatis foreach批量插入: ①SELECT UNION ALL: ②BEGIN INSERT I

MyBatis直接执行SQL查询及批量插入数据

MyBatis直接执行SQL查询及批量插入数据 一.直接执行SQL查询: 1.mappers文件节选 <resultMap id="AcModelResultMap" type="com.izumi.InstanceModel">  <result column="instanceid" property="instanceID" jdbcType="VARCHAR" />  <

C++完成Oracle存储过程批量插入(一)

为了满足大数据量的批量插入这个需求,最近研究了一下Oracle数据库的批量插入这块儿,本篇先介绍一下这两天来所了解到的以及一次不成功的C++进行存储过程批量插入方案. 一.Oracle处理批量插入存储过程 1.Oracle处理批量插入涉及到的相关概念有:Type.bulk collect.Oracle数组等.现在对它们依次简单的介绍一下. 1)Type Type主要用于用户建立Oracle自定义类型. Type常用的自定义类型介绍: A.子类型 类似与全局定义的常量,只要改一处地方,与此常量相关

将list&lt;对象&gt;转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其他的方法,不过这个方法已经实现,就写一下了: 1.创建表. CREATE TABLE [dbo].[person]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Pwd] [nvarchar](50) NULL, [Age]