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标签详解的更多相关文章

  1. mybatis添加数据时返回主键 insert 返回主键值

    insert 返回主键值 useGeneratedKeys=“true” parameterType=“USer” keyProperty=“id”, <insert id="inse ...

  2. mybatis 批量插入 返回主键id

    我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键: 1.对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty ,<insert>标签 ...

  3. mybatis mysql 批量insert 返回主键

    Mybatis在插入单条数据的时候有两种方式返回自增主键:    mybatis3.3.1支持批量插入后返回主键ID, 首先对于支持自增主键的数据库:useGenerateKeys和keyProper ...

  4. mybatis批量插入返回主键问题

    今天整合mybatis时候用到返回主键问题,批量插入总是返回不了主键还报错. 记录入下: pom版本: <mybatis.version>3.2.6</mybatis.version ...

  5. Mybatis中insert返回主键ID

    记录解决的过程,这里就不搬砖了. 1.获取insert后的主键id 原文链接:http://www.cnblogs.com/fsjohnhuang/p/4078659.html 2.insert后返回 ...

  6. MyBatis插入语句返回主键值

    插入语句xml代码: <insert id="insertUser" parameterType="com.spring.mybatis.po.User" ...

  7. mybatis.net insert 返回主键

    mybatis insert语句 <insert id="Add" parameterClass="UserInfo" resultClass=" ...

  8. mybatis的insert返回主键

    <insert id="insert" useGeneratedKeys="true" keyProperty="id" parame ...

  9. mybatis 08: 返回主键值的insert操作 + 利用UUID获取字符串(了解)

    返回主键值的insert操作 应用背景 图示说明 在上述业务背景下,涉及两张数据表的关联操作:用户表 + 用户积分表 传统操作:在对用户表执行完插入语句后,再次查询该用户的uid,将该uid作为外键, ...

随机推荐

  1. React Native 进的第一个坑

    Bundling index.ios.js [development, non-minified, hmr disabled] 0.0% (0/1), failed. error: bundling ...

  2. opencv_java import org.opencv.highgui.Highgui,类中无imread方法

    opencv_java import org.opencv.highgui.Highgui,提示错误 2018年01月19日 14:50:25 小码农的路程 阅读数:358   原因:1.OpenCV ...

  3. 错误代码CS0051可访问性不一致_解决方案

    一.问题的出现 用C#在写多线程时报错 二.解决方案 1,分析思路 本来对BaseStruct设置为私有访问,但调用时又想公开化,从而造成了编译错误. 2,解决 将红色部分改为公有 3,总结 注意pu ...

  4. 【中间件安全】Tomcat 安全加固规范

    1. 适用情况 适用于使用Tomcat进行部署的Web网站. 2. 技能要求 熟悉Tomcat配置操作,能够利用Tomcat进行建站,并能针对站点使用Tomcat进行安全加固. 3. 前置条件 1.根 ...

  5. [Android] 基于 Linux 命令行构建 Android 应用(二):命令行管理项目

    创建 Android 项目 在命令行创建 Android 项目需要用到 android 工具(该工具由 Android SDK 提供,位于 <sdk>/tools/ 目录下.).它能自动生 ...

  6. 修改web前端访问端口

    说明: URL规则可添加变量部分,也就是说将符合同种规则的URL抽象成一个URL模式 1 2 3 @app.route('/instance/<uuid>/') def instance( ...

  7. openresty的安装和使用

    1,简介 OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,是一个强大的 Web 应用服务器,在性能方面,OpenResty可以 快速构造出足以 ...

  8. NHibernate之旅(21):探索对象状态

    本节内容 引入 对象状态 对象状态转换 结语 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的 ...

  9. web初级开发的那些坑

    1.在使用js原生的XMLHttpRequest加载.xml文件时,老是不对,按照书上的写的没错,后来才发现是我的web.xml文件中阻止了.xml文件的加载. 2.有关于string解析成json数 ...

  10. I - 取石子游戏

    有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者. ...