我们时长在批量插入时,需要获取插入数据的id.

这样:

 <insert id="insertUser" parameterType="gys.entity.User" keyProperty="userId" useGeneratedKeys="true">
INSERT INTO `user`
(userName)
VALUES
(#{userName})
</insert>

这样是没问题的.

但是有时候牵扯到批量插入,并且获取插入的id

这样写:

<insert id="insertUserBatch1" keyProperty="userId" useGeneratedKeys="true">
INSERT INTO `user`
(userName)
VALUES
<foreach collection="list" separator="," item="item">
(#{item.userName})
</foreach>
</insert>

这样运行后就会出现异常了.

这是因为你用的mybatis版本过低.比如我用的是3.2.2版本,这是mybatis的一个bug.

如果你换成3.4.4版本就没有问题了.

上面的sql语句换个写法 就又会报异常了(将insert包围在foreach里面)

比如:

<insert id="insertUserBatch2">
<foreach collection="list" separator=";" item="item">
INSERT INTO `user`
(userName)
VALUES
(#{item.userName})
</foreach>
</insert>

同理还有update的批量更新也是有这个问题

<update id="updateUserBatch">
<foreach collection="list" item="item" separator=";">
update `user` set
userName=#{item.userName}
where
userId=#{item.userId}
</foreach>
</update>

这是因为mybatis默认是只能执行一条sql语句,

可以再链接路径的时候加上参数,就可以执行多条sql语句了.allowMultiQueries=true

jdbc:mysql://127.0.0.1:3306/book?allowMultiQueries=true

mybaits插入时的一些总结的更多相关文章

  1. Mybaits插入记录返回主键值

    某些情况进行insert时不知道主键值(主键为自增),例如系统新增用户时,有用户序号(主键 自增),用户名,密码.插入时只需插入用户名和密码,之后取得mysql自增的序号. 如下为mysql的usr表 ...

  2. mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

    [CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...

  3. oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中

    有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图, B用户下的t_src_weather 表,如图: 要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据 ...

  4. MyBatis 插入时返回刚插入记录的主键值

    MyBatis 插入时返回刚插入记录的主键值 一.要求: 1.数据库表中的主键是自增长的,如:id: 2.获取刚刚插入的记录的id值: 二.源代码: 1.User.java package cn.co ...

  5. mysql 在创建表或者插入时遇到关键字报错

    mysql 在创建表或者插入时遇到关键字:比如name,status等.都不报错 解决方法:在字段上加上` 上面这个符号是键盘ecs下面那个符号

  6. Mysql数据库插入时乱码问题解决

    我们在利用cmd的黑屏界面进行mysql数据的插入时往往会出现不能插入的情况,这个原因是因为我们系统虽然和服务器端即mysql的数据库采用的都是统一的utf8的编码,但是在传输的过程中会变成iso88 ...

  7. oracle,uuid为主键,插入时直接更新id

    uuid为主键,插入时自动更新 -- Create table create table TECHNOLOGYCOMPANY ( ID VARCHAR2(32) default SYS_GUID() ...

  8. ON DUPLICATE KEY UPDATE重复插入时更新

    mysql当插入重复时更新的方法: 第一种方法: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (c ...

  9. mysql获取插入时自增ID值的方法

    1.  LAST_INSERT_ID: LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变. LAST_INSERT_ID是 ...

随机推荐

  1. cookie和session机制

    一.cookie和session机制之间的差别和联系 1.cookie机制 Cookie意为"甜饼",是由W3C组织提出,最早由Netscape社区发展的一种机制. 眼下Cooki ...

  2. java对文件操作之实用

    创建文件 package com.pre; import java.io.File; public class WJ { public static void main(String[] args) ...

  3. linux之 修改磁盘调度算法

    IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移动到底了再往反方向走,这恰恰就是现实生活中的电梯模型,所以IO调度器也被叫做电梯. (elevator)而相应的算法也就被叫做电梯算法.而Li ...

  4. mysql之 mysql_config_editor/login-path 登录密码保护

    login-path是MySQL5.6开始支持的新特性.通过借助mysql_config_editor工具将登陆MySQL服务的认证信息加密保存在.mylogin.cnf文件(默认位于用户主目录) . ...

  5. uglifyjs-webpack-plugin 插件,drop_console 默认为 false(不清除 console 语句),drop_debugger 默认为 true(清除 debugger 语句)

    uglifyjs-webpack-plugin 插件,drop_console 默认为 false(不清除console语句),drop_debugger 默认为 true(清除 debugger 语 ...

  6. navicat外键设置

    https://blog.csdn.net/qq_32486599/article/details/73497810

  7. 基于nginx + lua实现的反向代理动态更新

    大家都知道,nginx是当前应用非常广泛的web服务器,热度因为他的高并发高性能高可靠性,且轻量级!牛逼的不行,不多说这些. 今天要介绍的是,如何基于nginx和lua脚本,也就是在openresty ...

  8. javaweb下载中的一个问题

    如果你发现,response头以及contentType都已经设置没错,但出现浏览器将下载的文件内容显示到新窗口 那么解决方案就是在请求的时候不要产生新的窗口

  9. 【java】break,continue和return区别

    break:适用于switch和loop continue:只适用于loop 两者都可以通过给循环加标签来控制跳出,如下例所示 class BreakDemo { public static void ...

  10. driftnet 抓取图片总结

    语法: driftnet   [options]   [filter code] 主要参数: -b               捕获到新的图片时发出嘟嘟声 -i  interface     选择监听 ...