https://nannan408.iteye.com/blog/2170470

https://blog.csdn.net/xingzhishen/article/details/86424395

参数的数据结构是一个ArrayList<Map<String, Integer>>,需要以String,Integer为条件批量更新数据库的数据.

将参数封装到叫做JsonData的qv中,JsonData的关键代码是

private ArrayList<Map<String, Integer>> usersPlatforms;

public ArrayList<Map<String, Integer>> getUsersPlatforms() {
return usersPlatforms;
}

public void setUsersPlatforms(ArrayList<Map<String, Integer>> usersPlatforms) {
this.usersPlatforms = usersPlatforms;
}
Mapper中的方法是:

updateXxxx(JsonData jsonData);
Mapper.xml的sql是:

<update id="updateXxxx" parameterType="JsonData">
UPDATE xxx SET `xx` = 10
<where>
<foreach collection="usersPlatforms" item="userPlatform" open="" close="" separator="OR">
<foreach collection="userPlatform.keys" item="key" open=" user_id = " close="" separator="">
#{key}
</foreach>
<foreach collection="userPlatform.values" item="value" open=" AND platform = " close="" separator="">
#{value}
</foreach>
</foreach>
</where>
</update>
 
 ----------------------------------- ----------------------------------- ----------------------------------- -----------------------------------

1.前言. 
   如题. 
2.代码. 
(1)mapper.xml.

  1. <select id="getTest" resultType="java.util.HashMap" parameterType="java.util.HashMap" >
  2. select count(1) as c1,userid as c2 from  test where insertime  <![CDATA[>=]]> #{beginTime,jdbcType=TIMESTAMP} and insertime <![CDATA[<]]> #{endTime,jdbcType=TIMESTAMP} group by  userid
  3. </select>

(2)interface

  1. public interface TestMapper{
  2. List<Map<String,Object>> getTest(Map<String,Object> map);
  3. }

(3) 
测试类:

  1. @Test
  2. public void test3(){
  3. SimpleDateFormat sf=new SimpleDateFormat("yyyyMMddHH");
  4. Date d1 = null;
  5. try {
  6. d1 = sf.parse("2014061100");
  7. } catch (ParseException e) {
  8. // TODO Auto-generated catch block
  9. e.printStackTrace();
  10. }
  11. Date d2 = null;
  12. try {
  13. d2 = sf.parse("2014121100");
  14. } catch (ParseException e) {
  15. // TODO Auto-generated catch block
  16. e.printStackTrace();
  17. }
  18. //new
  19. Map map=new HashMap<String, Object>();
  20. map.put("beginTime", d1);
  21. map.put("endTime", d2);
  22. List list=testMapper.getTest(map);
  23. System.out.println(list.size());
  24. }

2.批量更新. 
   大部分传list就可以了,传map也可以,但map也要解析成list,可以自行研究map,这里介绍通用的list传值方法: 
(1)mapper

  1. public  int batchUpdate(List<Test> list);

(2)xml

  1. <update id="batchUpdate" parameterType="java.util.List">
  2. <foreach collection="list" item="list" index="index" open="begin" close=";end;" separator=";">
  3. update Test
  4. <set>
  5. A= A + #{list.a}
  6. </set>
  7. where B = #{list.b}
  8. </foreach >
  9. </update>

(3)测试类

    1. public void testBatchUpdate(){
    2. List<Test > item=new ArrayList<Test>();
    3. for(int i=0;i<10;i++){
    4. Test Test=new Test();
    5. Test.setA(i+10);
    6. Test.setB("kkk");
    7. item.add(Test);
    8. }
    9. int count=  TestMapper.batchUpdate(item);
    10. System.out.println("jieguo:"+ count);
    11. }

mybatis使用foreach处理List中的Map mybatis-----传入传出多个参数,都是map或list,批量更新的更多相关文章

  1. CenOS中的yum配置文件CentOS-Base.repo里面的参数都是何含义? souhu CentOS-Base.repo

    souhu  yum服务器CentOS-Base.repo 将$releasever替换为操作系统版本号 # CentOS-Base.repo # # The mirror system uses t ...

  2. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  3. js中当call或者apply传入的第一个参数是null/undefined时,js函数内执行的上下文环境是什么?

    在js中我们都知道call/apply,还有比较少用的bind;传入的第一个参数都是改变函数当前上下文对象; call/apply区别在于传的参数不同,一个是已逗号分隔字符串,一个以数组形式.而bin ...

  4. MyBatis的foreach查询(List、Array、Map)

    mybatis 中 foreach collection的三种用法 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index ...

  5. Mybatis之foreach用法----List、Array、Map三种类型遍历

    在mybatis的xml文件中构建动态sql语句时,经常会用到标签遍历查询条件.特此记录下不同情况下书写方式!-------仅供大家参考------ 1. foreach元素的属性 collectio ...

  6. MyBatis的foreach语句详解 list array map

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.it ...

  7. 关于mybatis中传入一个List,字符串数组,或者Map集合作为查询条件的参数

    一.入参为List的写法: <select id="queryParamList" resultType="map" parameterType=&quo ...

  8. 谈一下思考,关于mybatis中<foreach collection="list">中list得来的原因 没看到官方说明

    <foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层 ...

  9. eclipse中hibernate和mybatis中xml配置文件的没有标签提醒解决方法

    当我们使用eclipse编写Mybatis或hibernate的xml文件时,面对众多标签的配置文件,却没有自动提醒,对于工作和学习都十分不方便. 之所以没有自动提醒,是因为dtd文件没有加载成功. ...

随机推荐

  1. 简单find命令的实现

    贴代码: /*实现一个简单的find命令:*//*程序思路:首先,用一个单链表将所需要的信息存储起来:其次根据所传入的参数信息,改变节点的状态(若有这个状态,证明该节点就是我们所需要的)最后将所需要的 ...

  2. 大白话说Java反射:入门、使用、原理 (转)

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java反射:入门.进阶.原理> 目录 一个简单的例子 反射常用API 获取反射中的Class对象 通过反射创建类对象 通过反射获取类 ...

  3. Intellij idea利用Statistic插件统计项目代码行数

    1 . 插件介绍统计项目中各个文件的数量,大小,行数,平均等信息根据扩展名自定义统计详细行数信息 , 包括总行数,代码行数,代码行数占比,注释行数,注释行数占比,空白行数,空白行数占比自定义选择多个文 ...

  4. 树莓派3B+红外配置

    sudo apt-get install lirc /etc/lirc/lirc_options.conf #driver = devinput driver = default #device = ...

  5. Deepin系统中手动开启swap的方法

    Deepin系统中手动开启swap的方法 如何设置 swap(交换空间)的大小建议设置和你的实际物理内存一样大,如你的内存是8G的,则可将下面的count的值设为8192(当然这只是参考值,你可根据你 ...

  6. regexp_replace

    pandas和SQL数据分析实战 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2&sha ...

  7. 闭包(python)

    1.闭包的理解 我们可以将闭包理解为一种特殊的函数,这种函数由两个函数的嵌套组成,且称之为外函数和内函数,外函数返回值是内函数的引用,此时就构成了闭包. 2. 闭包的格式 下面用伪代码进行闭包格式的描 ...

  8. MQTT研究之EMQ:【CoAP协议的ECC证书研究】

    今天研究的内容,是CoAP这个协议在EMQ消息队列的支持,CoAP是一个受限资源的协议,基于UDP实现的多用于物联网环境的通信协议.相关介绍不多说,可以看RFC. CoAP协议下,基于DTLS通信,同 ...

  9. roboware 常见操作和问题

    博客参考:https://blog.csdn.net/u013528298/article/details/88052470 1. build中错误位置定位方式 按住“CTRL”键并点击错误提示的链接 ...

  10. C++ Multimap运用实例—查找元素

    C++ Multimap运用实例—查找元素 #include <map> #include <iostream> #include <algorithm> #inc ...