mybatis insert foreach循环插入方式
作者:学亮编程手记 发布时间:2023-10-15 22:32:53
标签:mybatis,insert,foreach,循环
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
0
投稿
猜你喜欢
- Android 消息机制1.概述Android应用启动时,会默认有一个主线程(UI线程),在这个线程中会关联一个消息队列(MessageQu
- 工作笔记(在不知道json的key时如何获取当前json的keys)String json="{'name':
- 本文实例讲述了Java实现的不同图片居中剪裁生成同一尺寸缩略图功能。分享给大家供大家参考,具体如下:因为业务需要,写了这样一个简单类,希望能
- 本文介绍Android中的5种数据存储方式。数据存储在开发中是使用最频繁的,在这里主要介绍Android平台中实现数据存储的5种方式,分别是
- 下面代码看下java判断http地址是否连通private boolean isOk(String url) {
- 一.WebSocket简单介绍WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-d
- Java 数据库连接池详解数据库连接池的原理是:连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库
- 前言本篇文章 中写到的是 flutter 调用了Android 原生的 TextView 案例添加原生组件的流程基本上可以描述为:1 and
- Android 应用签名的两种方法一、使用pem签名 (一) apk签名命令java –jar sign
- 序言之前封装过一个日志注解,打印方法执行信息,功能较为单一不够灵活,近来兴趣来了,想重构下,使其支持表达式语法,以应对灵活的日志打印需求。该
- 一、什么是热部署?热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。二、什么是SpringBoot热部署?SpringBoot
- iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置),下面通过代码给大家详解,代码如下:#import <CoreLo
- 前言在我们平时使用图形化界面的时候,会发现来建立一个文件夹或者一个文档的时候很简单,只需要在桌面单击鼠标右键就可以了。但是,在我们写项目的时
- java解析json数组最简单的json数组[ { &quo
- 官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-a
- 一、interrupt的使用特点我们先看2个线程打断的示例首先是可打断的情况:@Testpublic void interruptedTes
- 环境:VS2019+Qt5.121. CLR库安装 &nb
- 本文介绍了Flutter 通过Clipper实现各种自定义形状的示例代码,分享给大家,具体如下:ClipOval 圆形裁剪ClipOval(
- 简介官方API文档Scaffold的of方法说明有说明调用Scaffold.of方法是在Scallfold的子组件的Build方法中,也就是
- 概念Java中的集合就是一种容器,可以容纳不同种类的数据,这些容纳是建立在未知的基础上。优点1.可以动态保存任意多个对象,使用比较方便。2.