Mybatis批量insert 返回主键值和foreach标签详解
Mybatis批量insert 返回主键
Mybatis从3.3.1版本开始,支持批量插入后返回主键ID。首先对于支持自增主键的数据库使用useGenerateKeys和keyProperty,对于不支持生成自增主键的数据库使用selectKey标签。类似《MyBatis 返回insert操作主键》中单条插入。
使用批量插入,可以减少和数据库交互的次数,但是,数据量应该做一个控制,和for循环类似。首先定义Java Bean Instance:
|
import java.io.Serializable; /** * 实例表实体类 */ public class Instance implements Serializable { private static final long serialVersionUID = 2288066394131442938L; private Long instanceId; private String infos; private String createTime; private String updateTime; // omit getter, setter and toString() } |
DAO层:
|
int addInstances(List<Instance> instanceDtos); |
函数返回值是int类型,表示影响的行数。mapper中SQL写法类似于执行单条insert操作,只是使用了foreach标签:
|
<insert id="addInstances" parameterType="list" useGeneratedKeys="true" keyProperty="instanceId"> insert into instance (infos,create_time,update_time) values <foreach collection="list" item="myEg" index="index" separator=","> (#{myEg.infos},now(),now()) </foreach> </insert> |
执行后,自增长的id都可以从instanceDtos中找到。由于myEg对应于Java对象,所以,读取其中的infos属性时,需要使用myEg.infos。
MyBatis foreach标签详解
下面梳理一下foreach标签。foreach主要用于构建in条件,它可以在SQL语句中迭代入参List或者Array。属性主要有 item,index,collection,open,separator,close,解释如下:
item表示集合中每一个元素进行迭代时的别名,便于在foreach中使用;
index指定一个名字,用于标志当前迭代位置;
open表示该语句以什么开始,如拼凑in子语句的左括号“(”;
separator分隔符,表示每次迭代之间以什么符号分隔;
close表示以什么结束,如拼凑in子语句的右括号“)”。
在所有属性中,最复杂非collection属性莫属,该属性在foreach标签中必须指定的。在不同情况下,该属性的值是不一样的,主要有以下3种情况:
1.若传入的是单参数且参数类型是List,则collection属性值为list;
2.若传入的是单参数且参数类型是Array数组,则collection的属性值为array;
3.若传入的参数是多个,则把它们封装成Map,当然单参数也可以封装成Map,collection的属性值为Map中的key;
上一节中,addInstances函数的入参只有一个,且是List,所以,collection属性值为list。如下函数
|
List<Instance> getInstanceInfo(new Long[]{1L, 3L}); |
请求的时候,SQL如下:
|
<select id="getInstanceInfo" resultType="list"> SELECT instance_id "instanceId", infos FROM instance WHERE instance_id IN <foreach item="oneId" index="index" collection="array" open="(" separator="," close=")" > #{oneId} </foreach> </select> |
oneId表示一个具体的元素,所以,用#{oneId}直接读取就行。
Mybatis批量insert 返回主键值和foreach标签详解的更多相关文章
- mybatis添加数据时返回主键 insert 返回主键值
insert 返回主键值 useGeneratedKeys=“true” parameterType=“USer” keyProperty=“id”, <insert id="inse ...
- mybatis 批量插入 返回主键id
我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签 ...
- mybatis mysql 批量insert 返回主键
Mybatis在插入单条数据的时候有两种方式返回自增主键: mybatis3.3.1支持批量插入后返回主键ID, 首先对于支持自增主键的数据库:useGenerateKeys和keyProper ...
- mybatis批量插入返回主键问题
今天整合mybatis时候用到返回主键问题,批量插入总是返回不了主键还报错. 记录入下: pom版本: <mybatis.version>3.2.6</mybatis.version ...
- Mybatis中insert返回主键ID
记录解决的过程,这里就不搬砖了. 1.获取insert后的主键id 原文链接:http://www.cnblogs.com/fsjohnhuang/p/4078659.html 2.insert后返回 ...
- MyBatis插入语句返回主键值
插入语句xml代码: <insert id="insertUser" parameterType="com.spring.mybatis.po.User" ...
- mybatis.net insert 返回主键
mybatis insert语句 <insert id="Add" parameterClass="UserInfo" resultClass=" ...
- mybatis的insert返回主键
<insert id="insert" useGeneratedKeys="true" keyProperty="id" parame ...
- mybatis 08: 返回主键值的insert操作 + 利用UUID获取字符串(了解)
返回主键值的insert操作 应用背景 图示说明 在上述业务背景下,涉及两张数据表的关联操作:用户表 + 用户积分表 传统操作:在对用户表执行完插入语句后,再次查询该用户的uid,将该uid作为外键, ...
随机推荐
- WebMisSharp升级说明,最新版本1.6.0
尊敬的C3 AM.C3 FX.WebMisSharp用户您好: 非常感谢长期来您对WebMisSharp系列产品的支持,您的使用和反馈是我们进步的最大动力.在你们的帮助下我们又向前迈进了一步,我们功能 ...
- 如何在wiced平台上编译,运行智能彩灯 实时控制彩灯的色调和开关
https://github.com/WildDogTeam/demo-c-rgblight/tree/master/src/device 恢复出厂的GPIO口在demo_platform.h声明为W ...
- Oracle Grid 11.2.0.4 安装是出现"INS-30510: Insufficient number of ASM disks selected."
最新文章:Virson's Blog 错误的原因是由于磁盘数和冗余层级不匹配: 如果创建用来存放OCR和VOTEDISK的ASM磁盘组,那么External.Normal.High三种冗余级别对应的F ...
- 【转载】VC维,结构风险最小化
以下文章转载自http://blog.sina.com.cn/s/blog_7103b28a0102w9tr.html 如有侵权,请留言,立即删除. 1 VC维的描述和理解 给定一个集合S={x1,x ...
- 提升linux下TCP服务器并发连接数(limit)
https://cloud.tencent.com/developer/article/1069900 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进 ...
- [Artoolkit] ARToolKit's SDK Structure on Android
Most applications on Android are developed in Java, and Android provides a rich framework of classes ...
- Window应急响应(一):FTP暴力破解
0x00 前言 FTP是一个文件传输协议,用户通过FTP可从客户机程序向远程主机上传或下载文件,常用于网站代码维护.日常源码备份等.如果攻击者通过FTP匿名访问或者弱口令获取FTP权限,可直接上传 ...
- Caused by: java.lang.ClassNotFoundException: javax.xml.bind.Validation
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.Validation JAXB API是java EE 的API,因此在java ...
- Linux->Windows主机目录和文件名中文乱码恢复
目录 Linux->Windows主机目录和文件名中文乱码恢复 声明 一. 乱码问题 二. 调试环境 三. 目录和文件名乱码恢复 3.1 可选方案 3.1.1 通过合适的编解码转换 3.1.2 ...
- VS 开发必用插件
C# outline --代码折叠 Indent Guides 虚线对齐 productivity power tools 功能集中在编辑.浏览以及其他常见的构造代码时会使用到的任务 Web Esse ...