ibatis结合oracle批量插入三种方法的测评

 更新时间:2018年12月11日 14:40:50   作者:执笔记忆的空白  
今天小编就为大家分享一篇关于ibatis结合oracle批量插入三种方法的测评,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

第一种

< insert id =" insert_table " parameterClass ="java.util.List" >  
  <![CDATA[ 
    insert into sj_test( col1 , col2 , col3 ) values 
  ]]>  
  < iterate conjunction ="," >  
    <![CDATA[ 
      (#test[]. col1 #, # test []. col2 #, # test []. col3 #) 
    ]]>  
  </ iterate >  
</ insert > 

这种方式是网上最常见的,但是也是问题最大的,今天把我彻底纠结了,弄了几个小时,最后发现,Oracle不支持 一个insert多个values的方式,不知道网友们被坑到了没,好像MySQL支持这种方式,所报的错误:ORA-00933:SQL命令未正确结束

第二种

<insert id="insert_table " parameterClass="java.util.List">
 insert all
 <iterate conjunction="">
 into sj_test( col1 , col2 , col3 ) values 
 (#test[]. col1 #, # test []. col2 #, # test []. col3 #) 
 </iterate>
 <!--必须要加上 -->
 select * from dual
</insert>

这种方式,Oracle支持,其他的数据库就不知道支不支持,但是这种方式有个局限性,就是你插入的表的列数* 你插入的行数 <1000 才有效

如:

我今天需要插入的表有13列字段,总共需要插入246行,在执行的时候

他就报:ORA-24335 cannot support more than 1000 columns

第三种方式

<insert id="insert_table" parameterClass="java.util.List">
insert into sj_test( col1 , col2 , col3 ) values  select 
col1 , col2 , col3 
from (
<iterate conjunction=" union all ">
select 
#test[].col1# as col1 , #test []. col2# as col2, # test[].col3# as col3 from dual
</iterate>
)
</insert>

这种方式 是先将List里面的值,循环拼接成一个查询虚拟表,然后再通过查询虚拟表,获取每一行的数据 插入到你需要插入的表里面去.    这样的话有个需要注意的地方,就是你拼接的SQL语句的长度有没有超过Oracle的最大长度,不过Oracle的最大长度是64KB,你的SQL语句应该不会写这么长吧?

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • SpringCloud使用Feign实现远程调用的使用示例

    SpringCloud使用Feign实现远程调用的使用示例

    Feign是一个基于注解的HTTP客户端库,它允许您将HTTP请求转换为声明式的Java接口,本文主要介绍了SpringCloud使用Feign实现远程调用的使用示例,感兴趣的可以了解一下
    2023-09-09
  • springboot自帶线程池ThreadPoolTaskExecutor使用

    springboot自帶线程池ThreadPoolTaskExecutor使用

    本文主要介绍了springboot自帶线程池ThreadPoolTaskExecutor使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Java注解@Transactional事务类内调用不生效问题及解决办法

    Java注解@Transactional事务类内调用不生效问题及解决办法

    这篇文章主要介绍了Java注解@Transactional事务类内调用不生效问题及解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • springboot如何通过SSH连接远程服务器

    springboot如何通过SSH连接远程服务器

    这篇文章主要介绍了springboot如何通过SSH连接远程服务器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java RPC框架如何实现客户端限流配置

    Java RPC框架如何实现客户端限流配置

    这篇文章主要介绍了Java RPC框架如何实现客户端限流配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Java使用JSONObject需要的6个jar包下载地址

    Java使用JSONObject需要的6个jar包下载地址

    这篇文章主要介绍了Java使用JSONObject需要的6个jar包下载地址,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的完美解决方法

    Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的完美解决方法

    Mac OS X 下基于 Java 的程序会出现中文标点输入无效的问题,在中文输入法状态,可以输入中文字,但输入中文标点最后上去的是英文标点.这篇文章主要介绍了Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的完美解决方法,需要的朋友可以参考下
    2016-10-10
  • Java字符串驼峰与下换线格式转换如何实现

    Java字符串驼峰与下换线格式转换如何实现

    这篇文章主要介绍了Java字符串驼峰与下换线格式转换如何实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java中多线程与并发_volatile关键字的深入理解

    Java中多线程与并发_volatile关键字的深入理解

    这篇文章主要给大家介绍了关于Java中多线程与并发_volatile关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java多线程编程小实例模拟停车场系统

    Java多线程编程小实例模拟停车场系统

    这是一个关于Java多线程编程的例子,用多线程的思想模拟停车场管理系统,这里分享给大家,供需要的朋友参考。
    2017-10-10

最新评论