【mybatis mapper XML】List类型入参参数处理
前言
- 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种情况:
- 如果传入的是单参数且参数类型是一个List的时候,默认使用list作为参数名
- 如果传入的是单参数且参数类型是一个array数组的时候,默认使用array作为参数名
- 如果传入的参数是多个的时候,需要设置参数名。当然单参数时也可以设定参数名。使用@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类型入参参数处理相关推荐
- mybatis mapper xml文件的导入方式和查询方式
mybatis mapper xml文件的导入方式和查询方式 ssm框架 Mybatis mapper与SQLSession的关系 每个基于MyBatis的应用都是以一个SqlSessionFact ...
- mybatis mapper.xml入参
Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mapper接口方法接受的参数类型. 可以接受的参数类型 ...
- mybatis mapper.xml dtd_全栈开发踩坑之路4-用MyBatis实现服务
1.前言 上一篇文章介绍了如何设计后端的Mysql数据库:Alex Wang:全栈开发踩坑之路3-MySql数据库设计,本文介绍如何用MyBatis实现后端服务. 本后端项目的Github地址(撰写中 ...
- mybatis mapper.xml 文件共用_MyBatis 缓存原来是这么一回事儿!| 原力计划
作者 | Lw中责编 | 夕颜出品 | CSDN(ID:CSDNnews) 什么是缓存? 缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其 ...
- PL/SQL测试存在CLOB类型入参的存储过程时,入参为NULL
今天有一存储过程调用时报错, 想dubeg下查找问题 . 但是由于一入参为CLOB类型(如果为VARCHAR2,只支持2000长度),利用PL/SQL自身的测试功能测试时,v_doc 填入参数在运行方 ...
- mybatis mapper.xml数据库映射生成java实体,增删改查sql语句
1.问题描述:使用mybatis生成mapper.xml文件的时候经常遇到数据库表字段很多,写mapper.xml文件时转化成java实体很麻烦,写增删改查的sql时也要做 很多重复的工作.程序员就想 ...
- myBatis mapper.xml 文件共用
前段时间忙项目,有很多多表联合查询,而其中很多sql是可以复用的,当时为赶进度都是复制粘贴完事,最近有一个通用很多的sql要求各种额外添加表,导致需要到处修改sql还不知道是否完全修改到,所以就在想是 ...
- mybatis Mapper.xml使用问题
mybatis-plus:mapper-locations: classpath:/mybatis/**/*.xml #指定sql映射文件#在yaml文件中,这个配置是用来指定target里面*map ...
- mybatis mapper.xml --注释 带参数的坑
注释了直接在下面写了新的sql,注释的时候一般我都习惯性的选中之后Ctrl+/利用编辑器自带的自动注释功能,这个时候编辑器是分两种情况的:情况一是你之前老的sql没有类似<where>这样 ...
最新文章
- 全志uboot修改_全志SDK编译问题解决二:build uboot only
- AI公开课:19.05.29 浣军-百度大数据实验室主任《AutoDL 自动化深度学习建模的算法和应用》课堂笔记以及个人感悟
- (chap2 TCP/IP基础知识) TCP/IP协议分层模型
- Mybatis核心配置文件SqlMapConfig.xml独立使用配置内容
- Spring Cloud比较好的博文地址
- 31 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义结算在产品的记帐规则
- SpringMvc 400 Bad Request解决方法
- php shell ddos,用shell解决ddos攻击实例
- C++基础::limits
- GCC 原子操作中 Acquire/Release/Consume/Relaxed 内存模型
- 福建师范网络教育应用计算机,福建师范大学网络教育计算机应用基础课程期末考核答案.docx...
- c# redies 安装 和使用
- 哪个计算机无法做到双屏显示,笔记本电脑怎么实现双屏显示不同的内容
- 分享一下我的从业经历和工作感悟
- Java File分隔符和 Path分隔符
- 关于isalpha——计算英文单词的个数
- 移动端适配 - 小结
- envoy做集中式egress sidecar
- ElasticSearch 根据环境自动创建动态索引
- word-break 换行
热门文章
- ceph-deploy部署bluestore
- winform自定义控件
- 专门用来显示大量数据的视图:AdapterView(1)
- 向不支持输入法的软件输入中文
- Java_memcached 使用说明
- EGOImageView 解析
- <读书笔记> Thinking in python (Python 设计模式) 1. Singlton的c++与python的实现
- 2007年50种方式将改变你生活
- Javascript Array和String的互转换。
- WebApi安全性 使用TOKEN+签名验证