本例技术:Spring+SpringMVC+MyBatis+Oracle

问题描述:需要将程序里的一个集合保存到数据库里,集合的类型对应数据库的一个实体,若在程序里遍历集合再一条条保存到数据库表中有点麻烦,这里可以利用MyBatis 的 foreach语句实现批量插入数据。

核心代码清单:

Item(实体类):

[java] view plaincopy
  1. public class Item {
  2. private String itemCode;//项目代码
  3. private String itemName;//项目名称
  4. private String itemValue;//项目值(多个值用逗号隔开)
  5. private String itemCategory;//项目所属类别
  6. public String getItemCode() {
  7. return itemCode;
  8. }
  9. public void setItemCode(String itemCode) {
  10. this.itemCode = itemCode;
  11. }
  12. public String getItemName() {
  13. return itemName;
  14. }
  15. public void setItemName(String itemName) {
  16. this.itemName = itemName;
  17. }
  18. public String getItemValue() {
  19. return itemValue;
  20. }
  21. public void setItemValue(String itemValue) {
  22. this.itemValue = itemValue;
  23. }
  24. public String getItemCategory() {
  25. return itemCategory;
  26. }
  27. public void setItemCategory(String itemCategory) {
  28. this.itemCategory = itemCategory;
  29. }
  30. }

Service实现层方法:

[java] view plaincopy
  1. public Integer submitItem(List<Item> list ){
  2. return researchMapper.submitItem(list);
  3. }

MyBatis的mapper配置文件的语句(在Oracle数据中,多条数据之间用union all 连接,MySQL数据库用,):

[java] view plaincopy
  1. <insert id="submitItem"  parameterType="java.util.List">
  2. insert into ITEM (
  3. ITEM_CODE,
  4. ITEM_NAME,
  5. ITEM_VALUE,
  6. ITEM_CATAGORY
  7. )
  8. select  item.* from
  9. (
  10. <foreach collection="list" item="item" index="index" separator="UNION ALL" >
  11. select
  12. #{item.itemCode,jdbcType=VARCHAR},
  13. #{item.itemName,jdbcType=VARCHAR},
  14. #{item.itemValue,jdbcType=VARCHAR},
  15. #{item.itemCategory,jdbcType=VARCHAR}
  16. from dual
  17. </foreach>
  18. ) item
  19. </insert>
[java] view plaincopy
  1. <!--MySql写法-->
  2. <insert id="submitItem"  parameterType="java.util.List">
  3. insert into ITEM (
  4. ITEM_CODE,
  5. ITEM_NAME,
  6. ITEM_VALUE,
  7. ITEM_CATAGORY
  8. )
  9. values
  10. <foreach collection="list" item="item" index="index" separator="," >
  11. (
  12. #{item.itemCode,jdbcType=VARCHAR},
  13. #{item.itemName,jdbcType=VARCHAR},
  14. #{item.itemValue,jdbcType=VARCHAR},
  15. #{item.itemCategory,jdbcType=VARCHAR}
  16. )
  17. </foreach>
  18. </insert>

foreach元素解析:

foreach元素是一个遍历集合的循环语句,它支持遍历数组,List和Set接口的集合。

foreach元素中,collection是传进来的参数名称,可以是一个数组或者List、Set等集合;

item是循环中当前的元素(配置的item的名字随意取,类似于iterator);

index是当前元素在集合中的位置下标;

seperator是各个元素的间隔符;

()分别是open和close元素,表示用什么符号将这些集合元素包装起来。

注意:由于一些数据库的SQL对执行的SQL长度有限制,所以使用foreach元素的时候需要预估collection对象的长度;foreach除了用于本示例的循环插入,亦可用于构建in条件中(可自行尝试)。

MyBatis foreach语句批量插入数据相关推荐

  1. Mybatis 实现Mysql批量插入数据,判断数据是否存在

    常见插入数据的SQL insert into 插入数据库时会检查主键是否存在,存在会报错 replace into 替换数据库记录,需要表中有主键或者unique索引,如果数据库已存在的数据,会先删除 ...

  2. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

  3. Mybatis批量插入数据的两种方式

    总体描述 软件开发过程中需要批量插入数据的场景有几种: 从离线文件(excel, csv等)导入大批量数据到系统. 从其它系统定时或者人工同步大批量数据到系统. 程序自身的某些算法执行时会生成大批量数 ...

  4. Java通过Mybatis实现批量插入数据到Oracle中

    最近项目中遇到一个问题:导入数据到后台并将数据插入到数据库中,导入的数据量有上万条数据,考虑采用批量插入数据的方式: 结合网上资料,写了个小demo,文章末尾附上demo下载地址 1.新建项目:项目目 ...

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

    转:http://www.cnblogs.com/mabaishui/archive/2012/06/20/2556500.html 一.直接执行SQL查询: 1.mappers文件节选 <re ...

  6. 使用mybatis plus批量插入数据

    之前用mybaits插入数据时,需要在sql语句中作特殊的处理,然后才能够批量插入数据. 今天试验了一下mybatis plus的批量插入方式,简直太简单了,太爽了,真真切切的体会到了科技就是生产力. ...

  7. MyBatis 批量插入数据到Oracle

    Oracle批量插入数据写法 INSERT INTO USER (ID, NAME) <foreach collection="list" item="item&q ...

  8. oracle insert汉字出错,Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名...

    本文主要向大家介绍了Oracle数据库之Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. Oracle数据库,用 ...

  9. mybatis批量插入oracle报表达式,mybatis oracle两种方式批量插入数据

    mybatis在oracle中批量插入数据时,单次批量大小有限制,批量插入时,单次批量过大,也会影响插入性能.故程序端也需要对应的限制. BEGIN insert into blacklist (id ...

最新文章

  1. 计算机专业的一个四年工作的总结
  2. Docker 常见问题汇总
  3. 喜马拉雅贺雯迪:基于端到端TTS实现更具生动、富有情感的语音合成表现
  4. WEB前端底层知识--浏览器是如何工作的
  5. 数字图像处理系统组成 及研究内容
  6. 用计算机语言拜年,鸡年大吉!22种编程语言大拜年
  7. java 判断qq_检测QQ号码是否存在
  8. 在 可编辑的 Div 的 光标位置 插入 文字 或 HTML
  9. sql server安装-没有权限访问文件
  10. Command ‘docker‘ not found, but can be installed with:
  11. Unity中打开商店评分评价
  12. u盘删除的文件怎么恢复
  13. 源码实践指南!Mastering opencv Ch3 Markerless AR--UBUNTU下 opencv+opengl 运行
  14. Python学习笔记7——数据类型(中)
  15. 李一男起伏人生如高速过山车 栽大跟头后还回得来吗
  16. 初音未来音乐计算机教程,PSP《初音未来:歌姬计划》原创PV制作简易图文教程...
  17. 英雄的黎明-纯音乐-横山菁儿
  18. java sencha_sencha编译出错
  19. 人脸识别通过什么区分人脸和照片
  20. Apache——CVE-2021-41773

热门文章

  1. oracle从9.2.0.1升级到9.2.0.8步骤
  2. 部分iPhone13 系统有bug
  3. MacOS之Chrome弹框:代理要求提供用户名和密码(已解决)
  4. I2S和PCM区别(二十)
  5. 高通driver模块编译方法
  6. Android SEAndroid
  7. Android中的跨进程调用技术AIDL
  8. tensorflow loss到多少_tensorflow学习笔记day4
  9. 分布式和微服务区别_分布式、集群、微服务到底有啥区别?
  10. python remove函数_Python列表的remove方法的注意事项