mybatis问题。foreach循环遍历数组报错情况,及其解决方法
根据条件查询数据列表,mybatis查询代码如下
如果只查询属于特定部门拥有的数据权限。这需要用 String[ ] codes保存当前部门及其子部门的部门编码。
所以需要在mybatis中遍历编码数组。
失败1
<select id="findList" resultType="xx.entity.Xxxx">SELECT ${sqlMap.column.toSql()}FROM ${sqlMap.table.toSql()}<where>${sqlMap.where.toSql()}<if test="codes != null and codes.length > 0">AND u5.office_code in<foreach item="code" index="index" collection="codes" open="(" separator="," close=")">${code}</foreach></if></where>ORDER BY ${sqlMap.order.toSql()}</select>
上面的代码会在仅查询部门范围的数据时报错。
Error querying database. Cause: java.sql.SQLException: 在将 varchar 值 'SD' 转换成数据类型 int 时失败。
原因是 ${ } 符号获取数组值时,不会在值两边添加引号 ' ' 查询数据库时,可能默认为这个in里面的是int数值,所以报类型转换异常。
还原真实sql如下 (数据库的部门编码是字符串值。)
select * from data a left join user u on u.user_code=a.createBy left join employee e on e.emp_code=u.ref_code left join office o on o.office_code=e.office_code where a.status='0' and o.office_code in (001016,003,004,005,006,008,007)
失败2
就在想,既然是没加引号的问题,那我改用 #{ }这个符号来取值不就好的
<if test="codes != null and codes.length > 0">AND u5.office_code in<foreach item="code" index="index" collection="codes" open="(" separator="," close=")">#{code}</foreach></if>
再次尝试还是不行。这次报差错不一样了
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_code_0' in 'class'
没有找到对应的get的属性方法。觉得默认以为我这个是一个实体类,然后以get方式获取值,但我这里明显是String[ ] 数组形式的数据。
失败3
再从网上搜索资料。还有一种用法
<if test="codes != null and codes.length > 0">AND u5.office_code in<foreach item="code" index="index" collection="codes" open="(" separator="," close=")">#{codes[${index}]}</foreach></if>
这种还是会报错。
nested exception is org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'codes[0]'. It was either not specified and/or could not be found for the javaType ([Ljava.lang.String;) : jdbcType (null) combination.
### Cause: java.lang.IllegalStateException: Type handler was null on parameter mapping for property 'codes[0]'. It was either not specified and/or could not be found for the javaType ([Ljava.lang.String;) : jdbcType (null) combination.
成功
最后,还是使用 '${ }'
用美元符号在左右两边加引号方式解决问题。
<if test="codes != null and codes.length > 0">AND u5.office_code in<foreach item="code" index="index" collection="codes" open="(" separator="," close=")">'${code}'</foreach></if>
转载于:https://www.cnblogs.com/gne-hwz/p/11433646.html
mybatis问题。foreach循环遍历数组报错情况,及其解决方法相关推荐
- 【FAQ】应用集成HMS Core部分服务出现“ 6003报错”情况的解决方法来啦
背景 开发者在应用中集成HMS Core部分服务时,android sdk 以及flutter等跨平台sdk,会出现编译打包后,运行报6003错误码的情况.根据查询可以得知,错误代码 6003 表示证 ...
- M1芯片MacBook pro重装系统出现报错情况的解决方法
我想大家应该都知道Windows电脑做系统相对来说是比较麻烦的,但是之前MacBook做系统是非常简单的,自从这个M1芯片的MacBook发布了之后,它这个做系统和之前的Intel芯片是不一样的.感兴 ...
- foreach循环遍历数组方法vue介绍
在vue中用foreach循环遍历数组全部元素,利用回调函数对数组进行操作,自动遍历整个数组,且无法break中途跳出循环,不可控,不支持return操作输出,return只用于控制循环是否跳出当前循 ...
- php foreach 一维数组遍历,php foreach 循环遍历数组方法
摘要 腾兴网为您分享:php foreach 循环遍历数组方法,桌面时钟,找乐助手,银联商务,星球联盟等软件知识,以及西部证券,猫咪社区app,消逝的光芒风灵月影,精真估二手车,优视,布谷布谷,米乐网 ...
- Python发送邮件smtplib.SMTP各报错问题的解决方法
Python发送邮件smtplib.SMTP各报错问题的解决方法 参考文章: (1)Python发送邮件smtplib.SMTP各报错问题的解决方法 (2)https://www.cnblogs.co ...
- Eslint报错整理与解决方法(持续整理)
Eslint报错整理与解决方法(持续整理) 参考文章: (1)Eslint报错整理与解决方法(持续整理) (2)https://www.cnblogs.com/lunlunshiwo/p/859600 ...
- 登录mysql报错2059_navicat连接mysql报错2059的解决方法
navicat连接mysql报错2059的解决方法 发布时间:2020-12-21 10:27:37 来源:亿速云 阅读:82 作者:小新 栏目:数据库 这篇文章给大家分享的是有关navicat连接m ...
- php zpo框架,Yii使用DeleteAll连表删除出现报错问题的解决方法
本文实例讲述了Yii使用DeleteAll连表删除出现报错问题的解决方法.分享给大家供大家参考,具体如下: 删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成 ...
- mysql 启动服务1067_windows无法启动MySQL服务报错1067的解决方法
突然登陆MySQL时,出现禁止访问或者无法连接到数据库,回到服务,去打开wampmysqld ,发现 "windows无法启动MySQL服务 错误1067" ,死活启动不了,咋办? ...
最新文章
- {code:-1,error:`QcloudSecretId`不能为空,请确保 SDK 配置已正确初始化}解决方法
- 3----结构体中使用柔性数组
- SPARK RDD JAVA API 用法指南
- MSFT Outlook VBA处理新邮件的方法
- 深度学习第一次课-数学
- javascript自定义事件应用实例
- 《企业软件交付:敏捷与高效管理精要》——3.4 企业软件交付的软件工厂方法...
- win10 无法连接路由器共享设备 报错0X80004005
- mysql @符号_MySQL 数值类型
- mysql format 格式化 返回值
- 22号大更新网站大面积降权的原因分析
- html2json文档,插件 jQuery.json2html 中文 API 文档
- 小米真蓝牙耳机说明书_小米蓝牙耳机使用说明,开箱评测小米蓝牙耳机
- 矩阵特征值和特征向量matlab,MATLAB计算矩阵特征值和特征向量
- c语言个人所得税,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
- 【小程序精品源码系列】小说阅读器
- 网站攻击常见的几种方式
- c++程序设计基础-类与对象:继承
- Gromacs 的第一步_能量最小化
- VMware虚拟机Ubuntu系统如何连接网络
热门文章
- oracle 创建备份目录,Oracle rman创建和自动化备份
- 8运行不了_民航局暂停运行737max8,分析可能因为“它”导致飞机俯冲坠落
- layui按条件开启关闭编辑列
- echarts自定义y轴刻度信息
- 【NOIP2015】【Luogu2678】跳石头
- android 卷帘动画,Android卷帘门动画实践
- android按钮切换颜色,togglebutton
- 询问区间内最大值-最小值
- 操作系统—多生产者多消费者问题
- [leetcode]136. 只出现一次的数字