oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert

 更新时间:2015年11月01日 15:35:29   作者:_coding_  
最近接了一个项目,其中项目需求,有一个非常纠结的问题,由于业务的关系,DB的数据表无法确定,在使用过程中字段可能会增加,这样在insert时给我造成了很大的困扰。接下来,通过本篇文章给大家介绍oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert

最近做项目遇到一个挺纠结的问题,由于业务的关系,DB的数据表无法确定,在使用过程中字段可能会增加,这样在insert时给我造成了很大的困扰。

先来看一下最终我是怎么实现的:

<insert id="batchInsertLine" parameterType="HashMap"> 
   <![CDATA[ 
   INSERT INTO tg_fcst_lines(${lineColumn}) 
   select result.*,sq_fcst_lines.nextval from( 
   ]]> 
   <foreach collection="lineList" item="item" index="index" separator="union all" > 
    (select   
    <foreach collection="item" index="key" item="_value" separator=","> 
      #{_value} 
    </foreach>  
    from dual) 
   </foreach> 
   <![CDATA[) result]]>   
 </insert> 

由于数据表不确定,所以我无法确定我要insert的字段,由于是批量insert,确定value值也挺费劲。
我传给mybatis的参数是一个map:

Map insertMap = new HashMap(); 
insertMap.put("lineColumn",lineColumn);    
insertMap.put("lineList", lineList); 

lineColumn是一个字符串,lineList是一个list:

List<Map> lineList = new ArrayList(); 

lineList里存放的是map,map的键对应数据表的字段,值是你要insert的值,这样就可以通过foreach取出list的值作为insert语句的value,但由于map是无序的,存放的顺序和
遍历时取值的顺序不一定一致,所以为了确保insert字段和值可以一一对应,可以通过遍历一次map来取出key拼接一个字符串作为insert的字段

String lineColumn = "";  //拼接的SQL,作为insert语句的一部分 
[java] view plaincopy
Map<String,String> lineMap = lineList.get(0); 
for (String key : lineMap.keySet()) { 
  lineColumn +=key+","; 
} 
lineColumn +="LINE_ID"; 

这里的line)id是一个自增的字段,在语句中直接写序列会报错,所以先遍历list将取出的值作为result,在取出result的所有值,连同序列一起作为insert的值。

在取值的时候使用两个foreace嵌套来实现,外层的foreach遍历list,里层的foreach遍历map。

以上内容是本文给大家介绍的oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert的全部叙述,希望大家喜欢。

相关文章

  • Oracle中PL/SQL复合数据类型

    Oracle中PL/SQL复合数据类型

    这篇文章介绍了Oracle中PL/SQL的复合数据类型,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Linux中Oracle安装后bash: sqlplus: command not found问题解决方法

    Linux中Oracle安装后bash: sqlplus: command not found问题解决方法

    这篇文章主要给大家介绍了关于Linux中Oracle安装后bash: sqlplus: command not found问题的解决方法,这是因为你的系统中没有安装Oracle数据库客户端或者其可执行文件路径未配置到,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • Oracle如何修改当前的序列值实例详解

    Oracle如何修改当前的序列值实例详解

    很多时候我们都会用到oracle序列,那么我们怎么修改序列的当前值呢?下面这篇文章主要给大家介绍了关于Oracle如何修改当前的序列值的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-05-05
  • oracle 常见等待事件及处理方法

    oracle 常见等待事件及处理方法

    我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息
    2009-03-03
  • oracle统计时间段内每一天的数据(推荐)

    oracle统计时间段内每一天的数据(推荐)

    这篇文章主要介绍了oracle统计时间段内每一天的数据,需要的朋友可以参考下
    2018-03-03
  • Oracle system/用户被锁定的解决方法

    Oracle system/用户被锁定的解决方法

    很多人对oracle数据库会将用户锁定感觉莫名其妙,所以下面这篇文章主要介绍了Oracle system/用户被锁定的解决方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • oracle数据库截取字符串substr函数使用举例

    oracle数据库截取字符串substr函数使用举例

    在Oracle数据库中可以使用SUBSTR函数来截取字符串,这篇文章主要给大家介绍了关于oracle数据库截取字符串substr函数使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • Oracle 添加用户并赋权,修改密码,解锁,删除用户的方法

    Oracle 添加用户并赋权,修改密码,解锁,删除用户的方法

    Oracle 添加用户并赋权,修改密码,解锁,删除用户实现方法,需要的朋友可以参考下。
    2009-10-10
  • PLSQL客户端连接Oracle数据库配置详细教程

    PLSQL客户端连接Oracle数据库配置详细教程

    这篇文章主要介绍了如何安装和配置Oracle客户端,包括安装步骤、配置环境变量、查看和编辑tnsnames.ora文件以及如何连接Oracle数据库,需要的朋友可以参考下
    2025-02-02
  • Oracle中转义字符的详细介绍

    Oracle中转义字符的详细介绍

    在ORACLE中,单引号有两个作用: 字符串是由单引号引用和转义。最近就遇到了转义的问题,下面这篇文章就给大家主要介绍了关于Oracle中转义字符的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-01-01

最新评论