转载: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[{ ## ...
随机推荐
- [BetterExplained]书写是为了更好的思考
我经常在走路和睡前总结所学过的内容,思考遗留的问题,一段时间的阅读和思考之后,一个总体的知识框架就会逐渐浮现在脑海中.然后我会将它书写下来,然而,我往往非常惊讶地发现,当我书写的时候,新的内容仍然源源 ...
- 学习下知然网友写的taskqueue
博主在他的博客里对taskqueue的各种使用情况和使用方法都介绍的很清楚:http://www.cnblogs.com/zhiranok/archive/2013/01/14/task_queue. ...
- 自动化测试中CSS SELECTOR选择器的一些写法
常见符号: #表示id .表示class >表示子元素,层级 一个空格也表示子元素,但是是所有的后代子元素,相当于xpath中的相对路径 #input 选择id为input的节点 .Volvo ...
- Orace 12.2 ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_21"
一个测试环境的12.2.0.1数据库后台alert不断报出以下错误信息: Errors in file /d12/app/oracle/diag/rdbms/test/test/trace/test_ ...
- Asp.Net WebAPI及相关技术介绍(含PPT下载)
此PPT讲述了Asp.Net WebAPI及相关Web服务技术发展历史. 共80多页,Asp.Net WebAPI在讲到第36页的时候才会出现,因为这个技术不是凭空产生的,它有着自己的演变进化的历史. ...
- Nginx 日志自动分割
Nginx 的日志都是写在一个文件当中的,不会自动地进行切割,如果访问量很大的话,将导致日志文件容量非常大,不便于管理和造成Nginx 日志写入效率低下等问题.所以,往往需要要对access_log. ...
- Atitit.每周计划日程表 流程表v3
Atitit.每周计划日程表 流程表 每周趋势总结 新特性聚合 最佳实践聚合. 上周总结 本度计划 检查于推进年度计划月度计划里程碑 检查于推进季度计划月度计划里程碑 上周Todo汇总结转.. 待报 ...
- 【iCore1S 双核心板_ARM】例程二:读取ARM按键状态
实验原理: 按键的一端与STM32的GPIO(PB9)相连,且PB9外接一个1k大小的限流上接电阻. 初始化时把PB9设置成输入模式,当按键弹起时,PB9由于上拉电阻的作用呈高电平(3.3V): 当按 ...
- GPT(保护分区)解决办法
教你在硬盘被GPT保护分区后怎么格式化 GUID 分区表 (GPT) 作为可扩展固件接口 (EFI) 计划的一部分而引入.与 PC 以前通用的旧的主引导记录 (MBR) 分区方案相比,GPT 为磁盘 ...
- android开发(48) Android Snackbar 的使用
Snackbar 类似toast,用于向 用户展示信息,和用户交互,它能够显示一个 按钮 获得用户的操作.它的特点如下: 作为android.support.design.widget.Coordin ...