`

ibatis 2搭配oracle做批量插入小结

阅读更多
  比如,经常遇到的情况是,要把表A中的符合条件的数据全部取出来,形成一个结果集,
然后针对结果集中的每一条数据,循环插入到数据表B中去,除了传统的在JAVA代码中
FOR循环来做外,在ibatis 2中,还增加了iterate标签,可以用来生成循环要执行的语句,介绍如下:

<iterate 

    property="" /*可选,  

        从传入的参数集合中使用属性名去获取值,  

        这个必须是一个List类型,  

        否则会出现OutofRangeException,  

        通常是参数使用java.util.Map时才使用,  

        如果传入的参数本身是一个java.util.List, 不能只用这个属性. 

      
    conjunction="" /*可选,  

        iterate可以看作是一个循环,  

        这个属性指定每一次循环结束后添加的符号,  

         比如使每次循环是OR的, 则设置这个属性为OR*/ 

    open="" /*可选, 循环的开始符号*/ 

    close="" /*可选, 循环的结束符号*/ 

    prepend="" /*可选, 加在open指定的符号之前的符号*/ 

>

</iterate>

例子:
   <iterate prepend=”AND” property=”userNameList”
open=”(” close=”)” conjunction=”OR”>
username=#userNameList[]#
</iterate>

   这个时候,会生成如下形式的语句:
   (username=xxx1 or username=xxx2 or username=xxx3)
   因为open,close中指定了括号,conjunction则指定了分割是用or,

   又如:
  id in
<iterate  prepend="" property="ids"  open="("  close=")"  conjunction="," >
#ids[]#
</iterate>
  生成为:
   id in (xx1,xx2,xx3,.....),
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,
以防解析器简单地将List输出成String。

   再来看几个例子:
1) 删除的:
     <delete id="delete">  
    delete from t_table where key in  
    <iterate property="keys" conjunction="," open="(" close=")">  
    #keys[]#  
    </iterate>  
</delete> 
2 ) update:
    如果传用的参数是自己定义的类,如:
<update id="sqlMap" parameterClass="example.test">
    UPDATE         TBL_COMPANY
    SET                ADDRESS = #address#
    WHERE        COMPANY_ID IN
    <iterate conjunction="," open="(" close=")" property="companyIds" >
        #companyIds[]#
    </iterate>
</update>
生成Sql语句: UPDATE TBL_COMPANY SET ADDRESS='address' WHERE COMPANY_ID IN ( 45, 50, 70)

   其中:companyIds是example.test类中的list属性。

3) 批量插入,oracle中可以用insert all into,比如:
   <insert id="insertintoragroupra" parameterClass="map">
insert all
<iterate conjunction=" " property="ragrouppreinsert">

  into GROUP_ASSETRA
(RISKID, GROUPID,GROUPNAME,AV,RALISTID)
values
             (
            F_GETSEQ(),#ragrouppreinsert[].groupId#,#ragrouppreinsert[].groupname#,#ragrouppreinsert[].av#,
                                  #ralistId#
            )   
</iterate>

     select * from dual
</insert>

  注意:比如这里parameterClass="map"中,表明传入的是一个MAP,这个MAP中
可以包含内容很丰富的东西了,比如:
   map.put("ragrouppreinsert",list)  //这里ragrouppreinsert"存放的
是一个LIST结果集了
  map.put("ralistId",ralistId)   //这里另外设置一个要批量增加到group_assetra表中的数据
   注意在上面的语句中,因为要将结果集合list中的每一条记录对应的字段插入到
GROUP_ASSETRA中,所以要使用#ragrouppreinsert[].groupId#的写法,
而把map中的ralistId插进去,则只需要#ralistId#就可以了,这样其实就是
插入到group_assetra表中的每一个ralistid字段都是相同的值了
      F_GETSEQ()是一个函数,获得GROUP_ASSETRA表中的每次的序列,
具体其中遇到的问题,参考不错的一篇讲oracle insert all into的文:
http://yangtingkun.itpub.net/post/468/188133
   
3
2
分享到:
评论
1 楼 weilu73 2012-12-25  
非常想知道 F_GETSEQ()函数是怎样的。我现在遇到批量插入时key是同一个

相关推荐

    ibatis3批量插入

    通过Ibatis3xml文件配置+Mysql实现数据批量插入,原先在网上找很多,都是关于批量更新,批量插入的很少,而且其写法又完全不同,所以自己研究了一下。可供参考。另外插入时如出现内容报错,请参照my.cnf修改书库配置...

    Ibatis.net+ oracle 简单事例

    添加对Oracle 的引用,如Oracle.DataAccess.Client,然后将Ibatis.net 的相关配置文件和Mapper XML文件加入到项目中。使用VS2008的调试工具,可以快速测试SQL语句和业务逻辑。 【示例应用】 "IbatisTet" 可能是一个...

    ibatis的批量插入DAO实例

    本篇将深入探讨如何在Ibatis中实现批量插入数据的DAO(Data Access Object)实例,以及相关的源码分析。 首先,Ibatis允许我们通过SQL映射文件来定义SQL语句,这种方式比传统的JDBC更加灵活且易于维护。批量插入...

    ibatis 读取oracle clob类型

    ibatis 读取oracle clob类型

    ibatis+oracle实例

    2. **事务管理**:Ibatis提供了对数据库事务的控制,可以配合Oracle的ACID特性处理复杂的事务场景。 3. **存储过程调用**:Ibatis可以通过`&lt;select&gt;`、`&lt;procedure&gt;`元素调用Oracle的存储过程,增强业务逻辑的封装...

    ibatis应对批量update

    ### ibatis应对批量update 在处理大量数据更新时,传统的for循环方式往往会导致效率低下。这是因为每一次循环都需要执行一次数据库连接操作,对于批量更新来说,这样的处理方式显然不够高效。为了解决这个问题,...

    webwork+ibatis+spring oracle c3p0 集成框架

    【webwork+ibatis+spring oracle c3p0 集成框架】 WebWork、iBatis、Spring 和 Oracle C3P0 是四个在企业级Java应用开发中常用的组件,它们各自扮演着不同的角色,而将它们集成在一起可以构建一个高效、灵活且可...

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程分页

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

    iBatis结合Oracle批量插入三种方法的测评 iBatis是一种流行的持久层框架,提供了对数据库的访问和操作功能。Oracle是目前最流行的关系数据库管理系统之一。今天,我们将讨论iBatis结合Oracle批量插入三种方法的测评...

    struts2+spring+ibatis+oracle+分页搜索+上传附件实例

    Struts2、Spring、iBatis以及Oracle是Java Web开发中的四大核心组件,它们共同构建了一个强大且灵活的后端架构。在这个实例中,我们将会深入探讨这些技术如何协同工作,实现分页搜索功能和上传附件操作。 1. **...

    ibatis调用oracle存储过程

    在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...

    ibatis连接oracle所需的jar包

    2. **ojdbc14.jar**: 这是Oracle数据库的JDBC驱动程序,用于Java应用程序连接Oracle数据库。JDBC(Java Database Connectivity)是Java中用于与各种数据库通信的标准接口。ojdbc14.jar包含了Oracle JDBC Driver,...

    struts2+spring+ibatis+oracle整合的登陆系统

    总结来说,"struts2+spring+ibatis+oracle整合的登陆系统"是一个综合性的Web应用示例,它展示了如何利用Struts2处理用户交互,Spring管理依赖和事务,iBatis执行数据库操作,以及Oracle存储数据。这样的整合方案为...

    jar框架包2 ibatis spring oracle mysql

    本压缩包“jar框架包2”聚焦于四大关键技术:Ibatis、Spring、Oracle和MySQL,这四者在企业级Java应用开发中扮演着至关重要的角色。 Ibatis,全名MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及...

    strust2+spring3+ibatis2 +oracle10g 完整整合框架

    总之,这个 "Struts2+Spring3+iBatis2 +Oracle10g 完整整合框架" 提供了一个高效、稳定的基础,帮助开发者快速构建企业级的 Java Web 应用。其核心在于组件间的协同工作,使得开发、测试和维护变得更加便捷。

    Ibatis+Oracle(含对应数据库sql) 源码

    【标题】"Ibatis+Oracle(含对应数据库sql) 源码" 是一个学习和实践Ibatis与Oracle数据库结合使用的资源包。这个资源对于初学者来说尤其有帮助,因为它包含了一个实际项目的源代码和相应的SQL脚本,使得学习者能够...

    struts2包+ibatis组合+oracle

    Struts2、iBatis和Oracle是Web应用开发中常见的技术栈,它们分别在MVC框架、持久层处理和数据库管理方面发挥重要作用。下面将详细解释这三个组件以及它们的组合应用。 **Struts2** 是一个基于MVC(Model-View-...

Global site tag (gtag.js) - Google Analytics