mybatis insert foreach循环插入方式

作者:学亮编程手记 时间:2023-10-15 22:32:53 

mybatis insert foreach循环插入


@Insert("<script>" +
           "insert into driver_account_appeal_photo (appeal_id,appeal_photo_path) values\n" +
           "<foreach collection=\"photoList\" item=\"item\" index=\"index\" separator=\",\">\n" +
           "\t(#{appealId},#{item})\n" +
           "</foreach>" +
           "</script>")
//@Insert("insert into driver_account_appeal_photo (appeal_id,appeal_photo_path) values(#{appealId},#{appealPhotoPath})")
void addAppealPhoto(AppealPhoto appealPhoto);

foreach语句批量插入数据

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

问题描述:

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

核心代码清单:

Item(实体类):


public class Item {
   private String itemCode;//项目代码
   private String itemName;//项目名称
   private String itemValue;//项目值(多个值用逗号隔开)
   private String itemCategory;//项目所属类别

public String getItemCode() {
       return itemCode;
   }

public void setItemCode(String itemCode) {
       this.itemCode = itemCode;
   }

public String getItemName() {
       return itemName;
   }

public void setItemName(String itemName) {
       this.itemName = itemName;
   }

public String getItemValue() {
       return itemValue;
   }

public void setItemValue(String itemValue) {
       this.itemValue = itemValue;
   }

public String getItemCategory() {
       return itemCategory;
   }

public void setItemCategory(String itemCategory) {
       this.itemCategory = itemCategory;
   }
}

Service实现层方法:


   public Integer submitItem(List<Item> list ){
       return researchMapper.submitItem(list);
   }

MyBatis的mapper配置文件的语句

在Oracle数据中,多条数据之间用union all 连接,MySQL数据库用:


<insert id="submitItem"  parameterType="java.util.List">
       insert into ITEM (
       ITEM_CODE,
       ITEM_NAME,
       ITEM_VALUE,
       ITEM_CATAGORY
       )
       select  item.* from
       (
       <foreach collection="list" item="item" index="index" separator="UNION ALL" >
           select
           #{item.itemCode,jdbcType=VARCHAR},
           #{item.itemName,jdbcType=VARCHAR},
           #{item.itemValue,jdbcType=VARCHAR},
           #{item.itemCategory,jdbcType=VARCHAR}
           from dual
       </foreach>
       ) item
   </insert>

<!--MySql写法-->
<insert id="submitItem"  parameterType="java.util.List">
   insert into ITEM (
   ITEM_CODE,
   ITEM_NAME,
   ITEM_VALUE,
   ITEM_CATAGORY
   )
   values
   <foreach collection="list" item="item" index="index" separator="," >
     (
       #{item.itemCode,jdbcType=VARCHAR},
       #{item.itemName,jdbcType=VARCHAR},
       #{item.itemValue,jdbcType=VARCHAR},
       #{item.itemCategory,jdbcType=VARCHAR}
    )
   </foreach>
</insert>

foreach元素解析:

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

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

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

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

seperator是各个元素的间隔符;

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

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

来源:https://zhangxueliang.blog.csdn.net/article/details/99718660

标签:mybatis,insert,foreach,循环
0
投稿

猜你喜欢

  • Unity shader实现高斯模糊效果

    2023-11-17 20:23:45
  • IDEA中的clean,清除项目缓存图文教程

    2022-02-05 09:02:02
  • 4种Android屏幕自适应解决方案

    2022-09-09 07:28:42
  • Android开发中Activity的生命周期及加载模式详解

    2021-07-28 02:33:44
  • C#实现六大设计原则之依赖倒置原则

    2023-06-27 04:02:57
  • Windows同时安装两个版本JDK并实现动态切换JAVA8或JAVA11的方法

    2022-05-20 05:38:41
  • Java源码解析LinkedList

    2023-04-28 02:56:18
  • Android Studio项目中导入开源库的方法

    2022-02-02 02:40:27
  • Java中多媒体文件上传及页面回显的操作代码

    2021-11-21 09:45:31
  • android中Bitmap的放大和缩小实例代码

    2021-10-01 13:23:28
  • 在spring中实例化bean无效的问题

    2022-03-16 17:55:34
  • Android的Service应用程序组件基本编写方法

    2023-12-17 04:22:00
  • C语言中求字符串长度的函数的几种实现方法

    2023-07-04 23:29:05
  • Android开发之android_gps定位服务简单实现

    2023-07-31 20:02:25
  • Java多线程 CompletionService

    2022-08-19 18:51:32
  • c# Struct的一些问题分析

    2023-08-31 08:27:36
  • 深入浅析Mybatis的缺陷问题

    2023-07-19 19:39:46
  • Android Studio利用AChartEngine制作饼图的方法

    2021-12-28 10:53:30
  • C# 调用C++写的dll的实现方法

    2022-10-25 11:36:56
  • Java实现CORS跨域请求的实现方法

    2022-04-01 19:49:18
  • asp之家 软件编程 m.aspxhome.com