转载:mybatis踩坑之——foreach循环嵌套if判断
转载自:作者:超人有点忙
链接:https://www.jianshu.com/p/1ee41604b5da
來源:简书
今天在修改别人的代码bug时,有一个需求是在做导出excel功能时,mybatis动态构建sql语句的时候,要根据传进来的map中的一个值来判断是不是null,从而需要关联另一张表取得数据。
<select id="getFieldsValue" parameterType="java.util.Map" resultType="java.util.HashMap">
SELECT
<foreach collection="colList" item="col" index="index" separator=",">
<if test="optionList[index] != 'null'">
${col}.dic_value as ${col}
</if>
<if test="optionList[index] == 'null'"> ${col}
</if>
</foreach> FROM
${tableName} t
<foreach collection="optionList" item="option" index="index">
<if test="option != 'null'">
left join t_admin_dic_values ${colList[index]} ON t.${colList[index]}=${colList[index]}.id
</if>
</foreach> WHERE
t.id IN
<foreach collection="recordList" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</select>
可以看到SELECT后的<forech>循环体是colList,由于我传进来的是一个Map,这里的optionList[index]用的是colList循环的角标,但是我一度忘记了optionList存的是String,所以我之前的判断optionList[index] != null" 一直报错,要加上'null'。
xml文件 $ 和 # 的区别
1.${}在预编的时候会直接被变量替换,但是存在被注入的问题,表名必须用${},因为#{}在预编的时候会被解析为?占位符,但当被变量替换的时候会加上 ‘’单引号,表明不允许加单引号(但是反引号``是可以的)
作者:超人有点忙
链接:https://www.jianshu.com/p/1ee41604b5da
來源:简书
转载:mybatis踩坑之——foreach循环嵌套if判断的更多相关文章
- MyBatis踩坑之SQLProvider转义字符被删除问题
目录 踩坑背景 问题描述 原因追踪 解决方案 方法一 方法二 踩坑背景 项目架构:Spring Boot + MyBatis + MySQL. 使用MyBatis作为ORM框架,jdbc驱动使用的是m ...
- 两层c:forEach循环嵌套
jsp中两级菜单如何用c:forEach输出 items 要被循环的信息 否 无 begin 开始的元素(0=第一个元素,1=第二个元素) 否 0 end 最后一个元素(0=第一个元素,1=第二个元素 ...
- MyBatis踩坑记录
在线文档: 动态SQL http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html 1. Error setting null for paramete ...
- 初学者手册-MyBatis踩坑记(org.apache.ibatis.binding.BindingException)
1.参数绑定失败 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.Bi ...
- php 大数组 foreach 循环嵌套的性能优化
前提:最近在做后台的时候,页面加载太慢,故第一时间想到的自然是优化SQL, 优化后sql查询速度从 2秒变成了零点几秒, 以为就这麽完事了,然并卵,加载竟然花费30秒! 这麽慢,然后在代码中分块记录它 ...
- php多表查询数据合并,避免foreach循环嵌套
$memberList = $member->getMemberList(); $members = []; if (is_array($memberList)) { foreach ($mem ...
- SpringBoot整合mybatis踩坑
springboot整合mybaits过程中,调用接口时报错:org.apache.ibatis.binding.BindingException: Invalid bound statement ( ...
- Java int和integer有什么区别 (mybatis踩坑)
不要在实体类中使用int 我们都知道Integer是int的包装类,而int是基本数据类型.所以Integer类型的变量会初始化为null,int类型则会被初始化为0 . 所以在下面的动态拼接例子中: ...
- bboss oreach循环嵌套遍历map
foreach循环嵌套遍历mapforeach嵌套dsl脚本定义 <property name="dynamicInnerDsl"> <![CDATA[{ ## ...
随机推荐
- 基于Python项目的Redis缓存消耗内存数据简单分析(附详细操作步骤)
目录 1 准备工作 2 具体实施 1 准备工作 什么是Redis? Redis:一个高性能的key-value数据库.支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使 ...
- window7开启Administrator账户
需求描述: 在工作遇见,安装部分软件,对目录不具有写权限.为了彻底解决问题.启用Administrator账户! 问题解决: 激活Administrator账户,并设置密码 重启系统,用Adminis ...
- Swift 栈和堆
前言 Swift 中的数据类型分为引用类型(类)和值类型(枚举.结构体). 引用类型存储在 "堆" 上,值类型存储在 "栈" 上. Swift 管理引用类型采用 ...
- 将R非时间序列的data.frame转变为时序格式
将R非时间序列的data.frame转变为时序格式,常常会用到,尤其是股票数据处理中, 举例:dailyData包括两列数据:Date Close10/11/2013 871.9910/10/2013 ...
- Android BLE蓝牙开发-读写数据 获取UUID
https://www.jianshu.com/p/3711cfbf7128 一个ble蓝牙设备有多个包括多个Profile 一个Profile中有多个服务Service(通过服务的uuid找到对应的 ...
- 配置Windows Server 2008/2012/2016允许2个用户同时远程桌面
Windows Server 系列服务器默认情况下只能支持一个用户远程,如果第二个人远程上去之后会直接把前面一个登录用户踢掉.在日常工作中如果有多个人需要同时远程过去工作,会很不方面. 网上很多教程讲 ...
- fiddler4 使用教程
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统, ...
- cbow与skip-gram
场景:上次回答word2vec相关的问题,回答的是先验概率和后验概率,没有回答到关键点. 词袋模型(Bag of Words, BOW)与词向量(Word Embedding)模型 词袋模型就是将句子 ...
- Bitmap用来做大数据处理
MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)" Bit-map空间压缩和快速排序去 ...
- 在Android 5.0中使用JobScheduler(转载)
翻译见:http://blog.csdn.net/bboyfeiyu/article/details/44809395 In this tutorial, you will learn how to ...