前言

  • mybatis 3.4.6
  • 如果 DAO 中这样传参,XML该如何处理呢?
List<Article> selectLatestArticleList(@Param("channelIdList")List<Long> channelIdList, @Param("maxDay")int maxDay);

XML

  <select id="selectLatestArticleList" parameterType="map" resultMap="ArticleResult">select * from article where pubTime >= DATE_FORMAT( NOW() - INTERVAL #{maxDay} DAY, '%Y-%m-%d' ) and channel in <foreach item="item" collection="channelIdList" open="(" separator="," close=")">#{item}</foreach></select>

说明:

  • collection="channelIdList"中的channelIdList是DAO入参的参数名
  • item="item"中的item是本次迭代获取到的元素的别名。

上面的xml会变成下面的sql:

select * from article
where pubTime >= DATE_FORMAT( NOW() - INTERVAL 1 DAY, '%Y-%m-%d' ) and channel in (1,2,3)

foreach 介绍

  • foreach用于处理动态 SQL 的一个常见使用场景:对集合进行遍历(尤其是在构建 IN 条件语句的时候)。
  • 这里的集合指:可迭代对象(如 List、Set 等)、Map 对象或者数组对象。
  • 当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素。
  • 当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。

collection 属性取值的几种情况

当使用可迭代对象或者数组时,有3种情况:

  1. 如果传入的是单参数且参数类型是一个List的时候,默认使用list作为参数名
  2. 如果传入的是单参数且参数类型是一个array数组的时候,默认使用array作为参数名
  3. 如果传入的参数是多个的时候,需要设置参数名。当然单参数时也可以设定参数名。使用@Param(“keyName”)来设置参数名。

例子

例子1:

<select id="selectPostIn" resultType="domain.blog.Post">SELECT *FROM POST PWHERE ID in<foreach item="item" index="index" collection="list"open="(" separator="," close=")">#{item}</foreach>
</select>

例子2:

<insert id="insertAuthor" useGeneratedKeys="true"keyProperty="id">insert into Author (username, password, email, bio) values<foreach item="item" collection="list" separator=",">(#{item.username}, #{item.password}, #{item.email}, #{item.bio})</foreach>
</insert>

参考

https://mybatis.org/mybatis-3/zh/dynamic-sql.html
https://www.cnblogs.com/fnlingnzb-learner/p/10566452.html

【mybatis mapper XML】List类型入参参数处理相关推荐

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

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

  2. mybatis mapper.xml入参

    Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型. 可以接受的参数类型 ...

  3. mybatis mapper.xml dtd_全栈开发踩坑之路4-用MyBatis实现服务

    1.前言 上一篇文章介绍了如何设计后端的Mysql数据库:Alex Wang:全栈开发踩坑之路3-MySql数据库设计,本文介绍如何用MyBatis实现后端服务. 本后端项目的Github地址(撰写中 ...

  4. mybatis mapper.xml 文件共用_MyBatis 缓存原来是这么一回事儿!| 原力计划

    作者 | Lw中责编 | 夕颜出品 | CSDN(ID:CSDNnews) 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其 ...

  5. PL/SQL测试存在CLOB类型入参的存储过程时,入参为NULL

    今天有一存储过程调用时报错, 想dubeg下查找问题 . 但是由于一入参为CLOB类型(如果为VARCHAR2,只支持2000长度),利用PL/SQL自身的测试功能测试时,v_doc 填入参数在运行方 ...

  6. mybatis mapper.xml数据库映射生成java实体,增删改查sql语句

    1.问题描述:使用mybatis生成mapper.xml文件的时候经常遇到数据库表字段很多,写mapper.xml文件时转化成java实体很麻烦,写增删改查的sql时也要做 很多重复的工作.程序员就想 ...

  7. myBatis mapper.xml 文件共用

    前段时间忙项目,有很多多表联合查询,而其中很多sql是可以复用的,当时为赶进度都是复制粘贴完事,最近有一个通用很多的sql要求各种额外添加表,导致需要到处修改sql还不知道是否完全修改到,所以就在想是 ...

  8. mybatis Mapper.xml使用问题

    mybatis-plus:mapper-locations: classpath:/mybatis/**/*.xml #指定sql映射文件#在yaml文件中,这个配置是用来指定target里面*map ...

  9. mybatis mapper.xml --注释 带参数的坑

    注释了直接在下面写了新的sql,注释的时候一般我都习惯性的选中之后Ctrl+/利用编辑器自带的自动注释功能,这个时候编辑器是分两种情况的:情况一是你之前老的sql没有类似<where>这样 ...

最新文章

  1. 全志uboot修改_全志SDK编译问题解决二:build uboot only
  2. AI公开课:19.05.29 浣军-百度大数据实验室主任《AutoDL 自动化深度学习建模的算法和应用》课堂笔记以及个人感悟
  3. (chap2 TCP/IP基础知识) TCP/IP协议分层模型
  4. Mybatis核心配置文件SqlMapConfig.xml独立使用配置内容
  5. Spring Cloud比较好的博文地址
  6. 31 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义结算在产品的记帐规则
  7. SpringMvc 400 Bad Request解决方法
  8. php shell ddos,用shell解决ddos攻击实例
  9. C++基础::limits
  10. GCC 原子操作中 Acquire/Release/Consume/Relaxed 内存模型
  11. 福建师范网络教育应用计算机,福建师范大学网络教育计算机应用基础课程期末考核答案.docx...
  12. c# redies 安装 和使用
  13. 哪个计算机无法做到双屏显示,笔记本电脑怎么实现双屏显示不同的内容
  14. 分享一下我的从业经历和工作感悟
  15. Java File分隔符和 Path分隔符
  16. 关于isalpha——计算英文单词的个数
  17. 移动端适配 - 小结
  18. envoy做集中式egress sidecar
  19. ElasticSearch 根据环境自动创建动态索引
  20. word-break 换行

热门文章

  1. ceph-deploy部署bluestore
  2. winform自定义控件
  3. 专门用来显示大量数据的视图:AdapterView(1)
  4. 向不支持输入法的软件输入中文
  5. Java_memcached 使用说明
  6. EGOImageView 解析
  7. <读书笔记> Thinking in python (Python 设计模式) 1. Singlton的c++与python的实现
  8. 2007年50种方式将改变你生活
  9. Javascript Array和String的互转换。
  10. WebApi安全性 使用TOKEN+签名验证