在实际项目中,我们一般都会用到批量insert、delete、update等操作,由于使用频率还是蛮高的,这里就做个简单的记录,供以后学习和参考.

批量insert

在数据库中,批量插入可以是多条insert into tableName values(?,?,?...);
或者一条insert into tableName values (?,?,?...),(?,?,?...),(?,?,?...)....
那么我们在使用mybatis时,xml就可以如下写批量操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
<insert id ="INSERT-CODE-BATCH" parameterType="java.util.List" >
insert into redeem_code
(bach_id, code, type, facevalue,create_user,create_time)
values
<foreach collection ="list" item="reddemCode" index= "index" separator =",">
(
#{reddemCode.batchId}, #{reddemCode.code},
#{reddemCode.type},
#{reddemCode.facevalue},
#{reddemCode.createUser}, #{reddemCode.createTime}
)
</foreach >
</insert >

标签说明:

  1. foreach元素的属性主要有 item,index,collection,open,separator,close。
  2. item表示集合中每一个元素进行迭代时的别名
  3. index指定一个名字,用于表示在迭代过程中,每次迭代到的位置
  4. open表示该语句以什么开始
  5. separator表示在每次进行迭代之间以什么符号作为分隔符
  6. close表示以什么结束
  7. collection属性为必填属性! 可以是List,Array,Map.

注意
这里的foreach标签没有包含insert into tableName,所以最后实际执行的是一条SQL语句:
insert into redeem_code (batch_id, code, type, facevalue,create_user,create_time)
values
(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? )

推荐mybatis博客专栏

批量update

mybatis的批量重点就是怎么去将sql拼接成可以直接在数据库执行的sql,这里再记录下以ibatis的批量操作,只要会了一个,其他也都不是问题了.

1
2
3
4
5
6
7
8
9
10
<update id="WHOLESALE-UPDATE-REBATE-CONFIG-BY-PRODUCTCODE" >
UPDATE
rebate_config
SET
rebate_type = 'BY_RATE',rebate_config_value = #rebateConfigValue#
WHERE
<iterate property="list" conjunction="or" open="(" close=")">
product_code =#list[]#
</iterate>
</update>

标签说明:

  1. prepend 可被覆盖的 SQL 语句组成部分,添加在语句的前面(可选)
  2. property 类型为 java.util.List 的用于遍历的元素(必选)
  3. open 整个遍历内容体开始的字符串,用于定义括号(可选)
  4. close 整个遍历内容体结束的字符串,用于定义括号(可选)
  5. conjunction 每次遍历内容之间的字符串,用于定义 AND 或 OR(可选)

注意

  1. 我这里传递过来的参数是一个Map<string,object>

    1
    2
    3
    Map<String, Object> conditions = new HashMap<String, Object>();
    conditions.put("rebateConfigValue", rebateValue); //rebateValue是一个固定的值
    conditions.put("list", productCodeList);
  2. 使用时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String

ibatis官方文档说明
ibatis学习网站

mybatis批量操作-xml方式的更多相关文章

  1. springboot使用之二:整合mybatis(xml方式)并添加PageHelper插件

    整合mybatis实在前面项目的基础上进行的,前面项目具体整合请参照springboot使用之一. 一.整合mybatis 整合mybatis的时候可以从mybatis官网下载mybatis官网整合的 ...

  2. SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  3. mybatis mapper xml文件的导入方式和查询方式

    mybatis mapper xml文件的导入方式和查询方式 ssm框架 Mybatis  mapper与SQLSession的关系 每个基于MyBatis的应用都是以一个SqlSessionFact ...

  4. MyBatis从入门到精通(2):MyBatis XML方式的基本用法

    本章将通过完成权限管理的常见业务来学习 MyBatis XML方式的基本用法 2.1一个简单的权限控制需求 权限管理的需求: 一个用户拥有若干角色,一个角色拥有若干权限,权限就是对某个模块资源的某种操 ...

  5. MyBatis从入门到精通:使用XML方式(映射文件之类的)

    2.3节笔记部分: package tk.mybatis.simple; public class Temp { } /* 2.2 使用XML方式 MyBatis使用了Java的动态代理可以直接通过接 ...

  6. SpringBoot系列-整合Mybatis(XML配置方式)

    目录 一.什么是 MyBatis? 二.整合方式 三.实战 四.测试 本文介绍下SpringBoot整合Mybatis(XML配置方式)的过程. 一.什么是 MyBatis? MyBatis 是一款优 ...

  7. 一、MyBatis基本使用,包括xml方式、注解方式、及动态SQL

    一.简介 发展历史:MyBatis 的前 身是 iBATIS.最初侧重于 密码软件的开发 , 后来发展成为一款基于 Java 的持久层框架. 定      位:MyBatis 是一款优秀的支持自定义 ...

  8. Spring Boot整合Mybatis(注解方式和XML方式)

    其实对我个人而言还是不够熟悉JPA.hibernate,所以觉得这两种框架使用起来好麻烦啊. 一直用的Mybatis作为持久层框架, JPA(Hibernate)主张所有的SQL都用Java代码生成, ...

  9. Mybatis 快速入门(XML方式)第一天

    导读 架构原理图 说明 mybatis配置文件 SqlMapConfig.xml,此文件为mybatis的全局配置文件,配置了mybatis的运行环境等信息 XXXMapper.xml,此文件作为my ...

随机推荐

  1. f1 f12热键关闭

    fn+f2进入bios系统——>找到configuration——>Hotkey Mode——>enter——>选择disable——>fn+f10保存

  2. udp调用connect有什么作用(转)

    原文链接如下: http://blog.csdn.net/wannew/article/details/18218619 整理一下.1:UDP中可以使用connect系统调用 2:UDP中connec ...

  3. JDBC数据源连接池(3)---Tomcat集成DBCP

    此文续<JDBC数据源连接池(2)---C3P0>. Apache Tomcat作为一款JavaWeb服务器,内置了DBCP数据源连接池.在使用中,只要进行相应配置即可. 首先,确保Web ...

  4. mui 怎样监听scroll事件的滚动距离

    var scroll = mui('.mui-scroll-wrapper').scroll(); document.querySelector('.mui-scroll-wrapper' ).add ...

  5. HDU 3045 picnic cows(斜率DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3045 题目大意:有n个数,可以把n个数分成若干组,每组不得小于m个数,每组的价值=除了该组最小值以外每 ...

  6. hdu 3078(LCA的在线算法)

    Network Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  7. Container With Most Water——双指针

    Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai).  ...

  8. vue-cli中引入jquery方法

    这里有个详解,当然,仅仅是安装jq的话下面这个办法就够了.传送门 在webpack.base.conf.js里加入 var webpack = require("webpack") ...

  9. (2)ansible主机清单文件inventory

    1)inventory作用 作用:通常用于定义要管理主机的认证信息,例如ssh登录用户名,密码等相关信息 缺省文件:/etc/ansible/hosts 2)定义主机组方式 #vim /etc/ans ...

  10. js禁止页面所有a链接访问

    <script type="text/javascript"> var arr=document.getElementsByTagName("a") ...