根据条件查询数据列表,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循环遍历数组报错情况,及其解决方法相关推荐

  1. 【FAQ】应用集成HMS Core部分服务出现“ 6003报错”情况的解决方法来啦

    背景 开发者在应用中集成HMS Core部分服务时,android sdk 以及flutter等跨平台sdk,会出现编译打包后,运行报6003错误码的情况.根据查询可以得知,错误代码 6003 表示证 ...

  2. M1芯片MacBook pro重装系统出现报错情况的解决方法

    我想大家应该都知道Windows电脑做系统相对来说是比较麻烦的,但是之前MacBook做系统是非常简单的,自从这个M1芯片的MacBook发布了之后,它这个做系统和之前的Intel芯片是不一样的.感兴 ...

  3. foreach循环遍历数组方法vue介绍

    在vue中用foreach循环遍历数组全部元素,利用回调函数对数组进行操作,自动遍历整个数组,且无法break中途跳出循环,不可控,不支持return操作输出,return只用于控制循环是否跳出当前循 ...

  4. php foreach 一维数组遍历,php foreach 循环遍历数组方法

    摘要 腾兴网为您分享:php foreach 循环遍历数组方法,桌面时钟,找乐助手,银联商务,星球联盟等软件知识,以及西部证券,猫咪社区app,消逝的光芒风灵月影,精真估二手车,优视,布谷布谷,米乐网 ...

  5. Python发送邮件smtplib.SMTP各报错问题的解决方法

    Python发送邮件smtplib.SMTP各报错问题的解决方法 参考文章: (1)Python发送邮件smtplib.SMTP各报错问题的解决方法 (2)https://www.cnblogs.co ...

  6. Eslint报错整理与解决方法(持续整理)

    Eslint报错整理与解决方法(持续整理) 参考文章: (1)Eslint报错整理与解决方法(持续整理) (2)https://www.cnblogs.com/lunlunshiwo/p/859600 ...

  7. 登录mysql报错2059_navicat连接mysql报错2059的解决方法

    navicat连接mysql报错2059的解决方法 发布时间:2020-12-21 10:27:37 来源:亿速云 阅读:82 作者:小新 栏目:数据库 这篇文章给大家分享的是有关navicat连接m ...

  8. php zpo框架,Yii使用DeleteAll连表删除出现报错问题的解决方法

    本文实例讲述了Yii使用DeleteAll连表删除出现报错问题的解决方法.分享给大家供大家参考,具体如下: 删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成 ...

  9. mysql 启动服务1067_windows无法启动MySQL服务报错1067的解决方法

    突然登陆MySQL时,出现禁止访问或者无法连接到数据库,回到服务,去打开wampmysqld ,发现 "windows无法启动MySQL服务 错误1067" ,死活启动不了,咋办? ...

最新文章

  1. {code:-1,error:`QcloudSecretId`不能为空,请确保 SDK 配置已正确初始化}解决方法
  2. 3----结构体中使用柔性数组
  3. SPARK RDD JAVA API 用法指南
  4. MSFT Outlook VBA处理新邮件的方法
  5. 深度学习第一次课-数学
  6. javascript自定义事件应用实例
  7. 《企业软件交付:敏捷与高效管理精要》——3.4 企业软件交付的软件工厂方法...
  8. win10 无法连接路由器共享设备 报错0X80004005
  9. mysql @符号_MySQL 数值类型
  10. mysql format 格式化 返回值
  11. 22号大更新网站大面积降权的原因分析
  12. html2json文档,插件 jQuery.json2html 中文 API 文档
  13. 小米真蓝牙耳机说明书_小米蓝牙耳机使用说明,开箱评测小米蓝牙耳机
  14. 矩阵特征值和特征向量matlab,MATLAB计算矩阵特征值和特征向量
  15. c语言个人所得税,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  16. 【小程序精品源码系列】小说阅读器
  17. 网站攻击常见的几种方式
  18. c++程序设计基础-类与对象:继承
  19. Gromacs 的第一步_能量最小化
  20. VMware虚拟机Ubuntu系统如何连接网络

热门文章

  1. oracle 创建备份目录,Oracle rman创建和自动化备份
  2. 8运行不了_民航局暂停运行737max8,分析可能因为“它”导致飞机俯冲坠落
  3. layui按条件开启关闭编辑列
  4. echarts自定义y轴刻度信息
  5. 【NOIP2015】【Luogu2678】跳石头
  6. android 卷帘动画,Android卷帘门动画实践
  7. android按钮切换颜色,togglebutton
  8. 询问区间内最大值-最小值
  9. 操作系统—多生产者多消费者问题
  10. [leetcode]136. 只出现一次的数字