mybatis批量新增或更新
mysql中在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE时,向数据库中插入一条记录:
若插入数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作(UPDATE 后面的操作),否则插入一条新的记录
格式
INSERT tbl_name [(col_name,...)]
VALUES (expr,...),(...),...
ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ...
在mybatis中实现批量增加或修改
(1)参数类型为List
xxxMapper.xml
<insert id="batchAddAssets" useGeneratedKeys="true" parameterType="java.util.List">
<selectKey resultType="INTEGER" keyProperty="id" order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
insert into api_assets (`guid`,`name`,`level`,`type`,`file_id`,`line_no`,`description`,`parent_guid`)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.guid},#{item.name},#{item.level},#{item.type},#{item.fileId},#{item.lineNo},#{item.description},#{item.parentGuid})
</foreach>
ON DUPLICATE KEY UPDATE
`name`=values(`name`),`level`=values(`level`),`type`=values(`type`),`line_no`=values(`line_no`),`description`=values(`description`),`parent_guid`=values(`parent_guid`)
</insert>
xxxMapper.java
void batchAddAssets(@Param("list") List<ApiAssets> list);
(2)参数类型为类
xxxMapper.xml
<insert id="addStructures" useGeneratedKeys="true" parameterType="com.tydt.bim.model.ApiStructures">
<selectKey resultType="INTEGER" keyProperty="id" order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
insert into api_structures (`name`,`file_id`,`guid`,`parent_guid`,`level`,`type`)
values
(#{struc.name},#{struc.fileId},#{struc.guid},#{struc.parentGuid},#{struc.level},#{struc.type})
ON DUPLICATE KEY UPDATE
`name`=values(`name`),`level`=values(`level`),`type`=values(`type`),`parent_guid`=values(`parent_guid`)
</insert>
xxxMapper.java
void addStructures(@Param("struc") ApiStructures struc);
foreach说明:
主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置
open表示该语句以什么开始
separator表示在每次进行迭代之间以什么符号作为分隔 符
close表示以什么结束
collection属性,是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有:
如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
如果传入的参数是多个,就需要把它们封装成一个Map
parameterType说明:
基本数据类型:
包含int,String,Date等。作为传参,只能传入一个。通过#{参数名} 即可获取传入的值
复杂的数据类型:
包含JAVA实体类、Map。通过#{属性名}或#{map的KeyName}即可获取传入的值
注:
可以传递一个List实例或者数组作为参数对象传给MyBatis。这时,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
mybatis批量新增或更新的更多相关文章
- MyBatis批量新增和更新
之前有开发任务一个接口里面有大量的数据新增和更新操作,导致十分缓慢.使用了批量操作之后速度有明显提升,几乎百倍千倍的速度提升. 博主之前统计过,通过普通接口一次数据库插入大概需要200ms,对于大量新 ...
- mysql批量新增或者更新
1.批量更新或者新增 1.单个新增或者更新 keyProperty新增完之后返回Id值
- mybatis 批量新增-批量修改-批量删除操作
mapper.xml <!-- 批量新增 --> <insert id="saveBatch" parameterType="java.util.Lis ...
- Mybatis 批量插入和更新小例
SpringBoot配置Mybatis前文有博文,数据库mysql: package com.example.demo.biz.dto; public class User { private int ...
- Oracle+Mybatis批量插入,更新和删除
1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ...
- mybatis批量插入和更新
批量插入 <insert id="add" parameterType="java.util.List"> insert all <forea ...
- Mybatis批量添加、更新小结
虽然是很基础的东西,不过难免会忘记,所以写个笔记巩固一下,顺便分享. 实体类: @Data public class EventOrder { private Long id; private ...
- [置顶] mybatis批量新增系列之有主键的表的批量新增
前面介绍了无主键的表的批量插入,文章地址:http://blog.csdn.net/zhouxiaoyun0228/article/details/9980181 但是在开发中往往许多的表是需要主键的 ...
- mybatis批量新增报错 BadSqlGrammarException
org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: com.mysql.jdbc. ...
随机推荐
- 转载于山边小溪的博客--编写跨浏览器兼容的 CSS 代码的金科玉律
http://www.cnblogs.com/lhb25/archive/2010/06/19/1760786.html 原始网页 作为 Web 设计师,你的网站在各种浏览器中有完全一样的表现是很 ...
- Ofbiz项目学习——阶段性小结——查询
一.组装参数的学习 首先是查询条件,对于查询条件,需要判断是否从前端传递空值?——怎么处理查询空值? 当然可以一个一个进行判断,但是这样代码会导致很多,可以统一处理,形成一个公共方法. 1. 单个处理 ...
- afnetwork moya 都符合通信协议七层模型
都是在会话层作出优化:安全.存储.会话控制: 在表示层作出数据处理: 在应用层提供请求响应的便捷接口.
- sql中exists和notexists用法总结(并和in的比较)
首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOT EXISTS 子查询中 找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如 ...
- MySQL 8.0.18 InnoDB Cluster 主从(MGR)完整安装配置
提示: MySQL InnoDB Cluster底层依赖Group Replication模式,至少3台机器 1. 准备3台 CentOS Linux 7 (Core), 修改各主机名:db-hos ...
- GoCN每日新闻(2019-11-06)
GoCN每日新闻(2019-11-06) GoCN每日新闻(2019-11-06) 1. 使用构建标签分离你的测试文件 https://mickey.dev/posts/go-build-tags-t ...
- ImportError: No module named 'typing'
k@ubuntu:~/Desktop/virtualenv$ python3 Python ( , ::) [GCC ] on linux Type "help", "c ...
- GSEA 基因集富集分析
http://software.broadinstitute.org/gsea/index.jsp GSEA(Gene Set Enrichment Analysis)是一种生物信息学的计算方法,用于 ...
- 《京东上千页面搭建基石——CMS前后端分离演进史》阅读笔记
一.背景 CMS即内容管理系统,目的是用于快速进行网站建设或者网页开发. 对于京东网站部门来说,CMS核心目的是用来快速开发和上线各种页面,诸如各种垂直频道页. 二.CMS核心目的 进行数据和模板的统 ...
- 《Maven实战》整理
一.maven介绍 Maven是优秀的构建工具,能够帮我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署. Maven能帮助我们标准化构建过程.在Maven之前,十个项目可能有十种构建方 ...