• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >oracle > oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert

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

作者:_coding_ 字体:[增加 减小] 来源:互联网 时间:2017-05-11

_coding_通过本文主要向大家介绍了mybatis连接oracle,mybatis oracle,mybatis oracle分页,mybatis oracle配置,mybatis oracle 序列等相关知识,希望本文的分享对您有所帮助

最近做项目遇到一个挺纠结的问题,由于业务的关系,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> 
</div>

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

Map insertMap = new HashMap(); 
insertMap.put("lineColumn",lineColumn);    
insertMap.put("lineList", lineList); 
</div>

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

List<Map> lineList = new ArrayList(); 
</div>

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"; 
</div>

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

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

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Oracle在Mybatis中SQL语句的配置方法
  • oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert

相关文章

  • 2017-05-11ORACLE常见错误代码的分析与解决(二)
  • 2017-05-11Oracle 11g Client客户端安装教程
  • 2017-05-11从Oracle 表格行列转置说起第1/2页
  • 2017-05-11oracle中如何获得数据库的DBID信息
  • 2017-08-22Oracle 27个常用例子
  • 2017-05-11oracle常用函数汇总(分享)
  • 2017-05-11oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)
  • 2017-05-11oracle误drop/update操作后的数据恢复测试
  • 2017-05-11oracle存储过程创建表分区实例
  • 2017-05-11ora-00119和ora-00132问题的解决方法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Oracle删除表及查看表空间的实例详解
    • oracle 视图权限 oracle 创建视图权限不足
    • centos 6.5下安装oracle 11gR2与Oracle自动启动的配置
    • 详解Oracle中的隐含参数_disable_logging
    • Oracle 多表查询
    • win x64下安装oracle 12c出现INS-30131报错的解决方法
    • oracle11数据库安装图文教程
    • oracle查询锁表与解锁情况提供解决方案
    • oracle 函数
    • Oracle 启动例程 STARTUP参数说明

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有