ibatis iterator list 参数 查询
本文系转载,十分感谢原作者。
点击打开原文
list参数查询,据说ibatis官方是有例子,我没有看到,基本上就是通过iterator标签可以循环,拼出sql。例如批量删除:
<select id="queryBatch" resultMap="resultMap" parameterClass="list">select * from tableName whereID in<iterate open="(" close=")" conjunction=",">#[]#</iterate></select>
注意parameterClass 是java.utils.list而iterate里面的属性直接写成#[]#,而这个时候查询方法的参数则是:list<Long>
如果还不明白为什么这么写,看下面的写法。
<select id="getProducts" parameterClass="Product"resultClass="Product">SELECT * FROM Products<dynamic prepend="WHERE productType IN "><iterate property="productTypes"open="(" close=")"conjunction=",">productType=#productType#</iterate></dynamic> </select>
这里的parameterClass是自己定义的一个对象,而对象里面是有一个list的productTypes的属性。而#productType#则是productType对象的一个属性(小声告诉你,这是我猜的,并且没有求证过~~~)
可以参考文章:
然而上面一种情况可能不会是我们常用的一种方式,我们可能参数直接就是list,在iterate中就无需写property属性了,就像第一个例子中,但是由于我们list中不是单一的long或者string,而是一个封装的对象,需要取里面具体的某个属性,
我在第一种方式的基础上,试验了很多种写法,如:#list[].id# , #[].id# , #id# , #id[]#。很不幸都失败了。
于是我还是采用了和加property的方式完成。而这个时候注意parameterClass=“map”,其实是将list放到了map中传进来的,并且map的key就是personList。
<delete id="deletePerson" parameterClass="map">delete from 表名 where sex=#sex# <iterate prepend="and" property="personList" open="("close=")" conjunction="or">age=$personList[].age$</iterate></delete>
具体细节,可以参考文章:
而网上有一些文章说去掉iterator中的propetry的方式,由于没有写的很明确不知道是与这个类似,还是与第一个例子类似。想知道细节的可以看这个文章:
当然我上面用到了对象,肯定不会是只查一个属性就ok的,肯定是要多个属性动态组合查询,否则我就直接用第一个例子好了,费下面这些事干嘛。而在组合动态查询的时候,也发现了一些问题:
select * from tableName where disabled = 0 <dynamic prepend="AND"><iterate open="(" close=")" property="list" conjunction=" OR ">(<isNotNull property="list[].id">ID = #list[].id# AND</isNotNull><isNotNull property="list[].channel">CHANNEL = #list[].channel# AND</isNotNull><isNotEmpty property="list[].reservationId">RESERVATION_ID = #list[].reservationId# AND</isNotEmpty>1=1)</iterate></dynamic>
上面的的第一个问题是:为啥 and要自己加,而不是在isNotNull中加prepend=“AND”原因就是在iterator中,发现只有第一次循环:<isNotNull prepend="and"property="list[].id"> 中不会自动加and,第而次会自动加的。
再就是 $personList[].age$ 与 #list[].reservationId#其实这两个是一样的,唯一区别在于,第一个是直接将值输出,第二个则会拼成?号,然后组装。
感觉写的有点乱,但是具体遇到这个问题的时候看看,肯定是可以明白的。
<update id="updkjrcdjbout"parameterClass="java.util.HashMap" >UPDATE TB_YW_KJRCDJB_OUT SET IS_EXPORT='1'WHERE<iterate open="(" close=")" property="list"conjunction=" OR ">ID=#list[].id#</iterate></update>
ibatis iterator list 参数 查询相关推荐
- iBatis 动态SQL别名查询结果为Null问题
iBatis 动态SQL别名查询结果为Null问题 在项目中使用了iBatis,使用xml方便的维护SQL,清晰明了,偶然发现动态拼接的SQL语句在数据中执行很好的返回结果,而到了程序中总是有字段返回 ...
- HQL查询(分页查询,动态sql查询,参数查询)
分页查询: 对dept表进行分页,每页显示三条数据,显示第一页,主要代码如下: 动态sql查询: 主要代码: 参数查询:(1.匿名占位符 2.参数名称绑定name 3.参数名称绑定对象属性): 主 ...
- 局部刷新时间 jsp_局部区块多个报表 TAB 页切换及局部区块的参数查询
在企业的业务系统中,如何从纷繁复杂的数据中抽丝剥茧看到关键数据信息呢?一个重要的途径就是将企业和各部门运营中关键的 KPI 集中在一起显示,同时尽量省去在企业的各个业务系统中分别查找数据. 下面是我近 ...
- 在${}中为甚么采用@Param及多参数查询@Param
在${}中为甚么采用@Param 多参数查询@Param 引入 MyBatis中的参数 1.SqlSession中的insert/update/delete/selectOne/selectList方 ...
- mysql实例化_MySQL如何通过实例化对象参数查询数据 ?(源代码)
本篇文章给大家带来的内容是关于MySQL如何通过实例化对象参数查询数据 ?(源代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.public static string Query ...
- sqlserver导入向导时提示外部表不是预期格式_Excel办公实操,导入本地数据,创建参数查询,就是简单...
导入数据创建参数查询 在技巧73中已经介绍了使用Excel的"来自Microsoft Query"功能有选择地导入数据的方法,该功能使用了Microsoft Query技术,该技术 ...
- 帆软报表学习笔记——根据参数查询
帆软(FineReport)是一款非常快捷方便的报表软件,最近跟着公司后面做一个仓储收费管理系统,后期需要用得到各种费用的计算已经表格导出,所以乘着现在有空学习一个帆软的简单操作以及使用. 软件的下载 ...
- iBatis下使用like查询,以及需要注意的问题
实现: 在iBatis中使用like查询 SQL 如下 '%' || #param# || '%' 需要注意的问题: 这么写虽然可以完成查询,但是对于字符中的一些关键字,比如 % _ 是查询不 ...
- dapper利用DynamicParameters构建动态参数查询
dapper利用DynamicParameters构建动态参数查询 原文:dapper利用DynamicParameters构建动态参数查询 public static int GetTotalLog ...
- MyBatis批量操作和多参数查询
批量操作 1.批量添加元素session.insert(String string,Object o) [plain] view plaincopy public void batchInsertSt ...
最新文章
- linux putty xshell vi 小键盘无法使用的解决方法
- 九九乘法表_JAVA
- Node.js Undocumented(2)
- 【遥感物候】C#遥感数据GIMMS 3G NDVI头文件批量生成器(几何校正)
- 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 JobMasger启动 YarnJobClusterEntrypoint
- 可扩展的Web架构和分布式系统
- 深入理解JVM虚拟机读书笔记【第十三章】线程安全与锁优化
- matlab汽车仿真实例,基于MATLAB的车辆工程仿真实例
- kubernetes笔记
- 群晖文件管理系统使用教程
- 算法竞赛入门经典 习题3-2 分子量 Molar Mass
- 「B端零售业」那些你不知道的事儿
- Unexpected Exception caught setting 异常解决记录
- Linux内核机制总结进程管理之SMP调度(六)
- 盘点拿些出身最奇特的程序员是什么样的?
- 什么是RAM?如何清理电脑RAM?
- 制作Code128B一维条形码的综合教程
- 微信小程序中使用第三方ui框架方法
- RSA数据加密解密(各种语言)
- STP、RSTP、MSTP协议
热门文章
- 动态IP和静态IP区别,别傻傻分不清楚!
- 做外贸建站和营销的注意事项
- MAC删除自带ABC输入法
- 9011,9012,9013,9014,8050,8550三极管的区别
- python里面的return是什么意思_python中return是什么意思?
- mac根目录无法新建文件夹
- 【渝粤题库】陕西师范大学202131组织行为学作业(高起本、专升本)
- B站(哔哩哔哩)视频播放快捷键分享
- [手机Linux]一,线刷小米6到开发版,获取root权限
- springboot微信登陆