本文系转载,十分感谢原作者。

点击打开原文

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 参数 查询相关推荐

  1. iBatis 动态SQL别名查询结果为Null问题

    iBatis 动态SQL别名查询结果为Null问题 在项目中使用了iBatis,使用xml方便的维护SQL,清晰明了,偶然发现动态拼接的SQL语句在数据中执行很好的返回结果,而到了程序中总是有字段返回 ...

  2. HQL查询(分页查询,动态sql查询,参数查询)

    分页查询: 对dept表进行分页,每页显示三条数据,显示第一页,主要代码如下: 动态sql查询: 主要代码: 参数查询:(1.匿名占位符  2.参数名称绑定name  3.参数名称绑定对象属性): 主 ...

  3. 局部刷新时间 jsp_局部区块多个报表 TAB 页切换及局部区块的参数查询

    在企业的业务系统中,如何从纷繁复杂的数据中抽丝剥茧看到关键数据信息呢?一个重要的途径就是将企业和各部门运营中关键的 KPI 集中在一起显示,同时尽量省去在企业的各个业务系统中分别查找数据. 下面是我近 ...

  4. 在${}中为甚么采用@Param及多参数查询@Param

    在${}中为甚么采用@Param 多参数查询@Param 引入 MyBatis中的参数 1.SqlSession中的insert/update/delete/selectOne/selectList方 ...

  5. mysql实例化_MySQL如何通过实例化对象参数查询数据 ?(源代码)

    本篇文章给大家带来的内容是关于MySQL如何通过实例化对象参数查询数据 ?(源代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助.public static string Query ...

  6. sqlserver导入向导时提示外部表不是预期格式_Excel办公实操,导入本地数据,创建参数查询,就是简单...

    导入数据创建参数查询 在技巧73中已经介绍了使用Excel的"来自Microsoft Query"功能有选择地导入数据的方法,该功能使用了Microsoft Query技术,该技术 ...

  7. 帆软报表学习笔记——根据参数查询

    帆软(FineReport)是一款非常快捷方便的报表软件,最近跟着公司后面做一个仓储收费管理系统,后期需要用得到各种费用的计算已经表格导出,所以乘着现在有空学习一个帆软的简单操作以及使用. 软件的下载 ...

  8. iBatis下使用like查询,以及需要注意的问题

    实现: 在iBatis中使用like查询 SQL 如下   '%' || #param# || '%' 需要注意的问题: 这么写虽然可以完成查询,但是对于字符中的一些关键字,比如 %  _  是查询不 ...

  9. dapper利用DynamicParameters构建动态参数查询

    dapper利用DynamicParameters构建动态参数查询 原文:dapper利用DynamicParameters构建动态参数查询 public static int GetTotalLog ...

  10. MyBatis批量操作和多参数查询

    批量操作 1.批量添加元素session.insert(String string,Object o) [plain] view plaincopy public void batchInsertSt ...

最新文章

  1. linux putty xshell vi 小键盘无法使用的解决方法
  2. 九九乘法表_JAVA
  3. Node.js Undocumented(2)
  4. 【遥感物候】C#遥感数据GIMMS 3G NDVI头文件批量生成器(几何校正)
  5. 【flink】Flink 1.12.2 源码浅析 : yarn-per-job模式解析 JobMasger启动 YarnJobClusterEntrypoint
  6. 可扩展的Web架构和分布式系统
  7. 深入理解JVM虚拟机读书笔记【第十三章】线程安全与锁优化
  8. matlab汽车仿真实例,基于MATLAB的车辆工程仿真实例
  9. kubernetes笔记
  10. 群晖文件管理系统使用教程
  11. 算法竞赛入门经典 习题3-2 分子量 Molar Mass
  12. 「B端零售业」那些你不知道的事儿
  13. Unexpected Exception caught setting 异常解决记录
  14. Linux内核机制总结进程管理之SMP调度(六)
  15. 盘点拿些出身最奇特的程序员是什么样的?
  16. 什么是RAM?如何清理电脑RAM?
  17. 制作Code128B一维条形码的综合教程
  18. 微信小程序中使用第三方ui框架方法
  19. RSA数据加密解密(各种语言)
  20. STP、RSTP、MSTP协议

热门文章

  1. 动态IP和静态IP区别,别傻傻分不清楚!
  2. 做外贸建站和营销的注意事项
  3. MAC删除自带ABC输入法
  4. 9011,9012,9013,9014,8050,8550三极管的区别
  5. python里面的return是什么意思_python中return是什么意思?
  6. mac根目录无法新建文件夹
  7. 【渝粤题库】陕西师范大学202131组织行为学作业(高起本、专升本)
  8. B站(哔哩哔哩)视频播放快捷键分享
  9. [手机Linux]一,线刷小米6到开发版,获取root权限
  10. springboot微信登陆