mybatis中foreach报错:_frch_item_0 not found的解决方法
发现问题
在mybatis的动态sql中最常见的错误就是使用,比如:_frch_item_0 not found
There is no getter for property named 'states' in 'class com.xingguo.model.User'
等等。
一般在使用时出现问题是由以下几种错误使用方式造成的:
1.参数类型不是List,特别当参数为实体类,一个属性为list时,注意collection的名字。
2.遍历时属性的名字或者字段错误
3.多个参数时没有使用@param进行命名,在sql中顺序混乱
下面从MySQL的源码中看下对于list参数是如何解析的。
首先看到DefaultSqlSession.Java中的wrapCollection()
方法:
private Object wrapCollection(final Object object) { if (object instanceof Collection) { StrictMap<Object> map = new StrictMap<Object>(); map.put("collection", object); if (object instanceof List) { map.put("list", object); } return map; } else if (object != null && object.getClass().isArray()) { StrictMap<Object> map = new StrictMap<Object>(); map.put("array", object); return map; } return object; }
所以从上面可以看到中默认情况下写的array和list,也就是collection默认的是array和list。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
mybatis 中 foreach collection的用法小结(三种)
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. item表示集合中每一个元素进行迭代时的别名, index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置, open表示该语句以什么开始, separator表示在每次进行迭代之间以什么符号作为分隔 符, close表示以什么结束. 在使用foreach的时候
-
Mybatis动态SQL之if、choose、where、set、trim、foreach标记实例详解
动态SQL就是动态的生成SQL. if标记 假设有这样一种需求:查询用户,当用户名不等于"admin"的时候,我们还需要密码为123456. 数据库中的数据为: MyBatisConfig.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
-
MyBatis的foreach语句详解
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collectio
-
详解mybatis foreach collection示例
在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了foreach功能,该功能比较强大,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内.它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符.这个元素是很智能的,它不会偶然地附加多余的分隔符. 下面是一个演示示例: <select id="findByIdsMap" resultMap="BaseResultMap"> Select <includ
-
Oracle+Mybatis的foreach insert批量插入报错的快速解决办法
最近做一个批量导入的需求,将多条记录批量插入数据库中. 解决思路:在程序中封装一个List集合对象,然后把该集合中的实体插入到数据库中,因为项目使用了MyBatis,所以打算使用MyBatis的foreach功能进行批量插入.期间遇到了"SQL 命令未正确结束 "的错误,最终解决,记录下来供以后查阅和学习. 首先,在网上参考了有关Mybatis的foreach insert的资料,具体如下: foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach
-
Mybatis foreach标签使用不当导致异常的原因浅析
异常产生场景及异常信息 上周,由于在Mybatis的Mapper接口方法中使用实现了Map.Entry接口的泛型类,同时此方法对应的sql语句也使用了foreach标签,导致出现了异常.如下为异常信息: org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no
-
mybatis中foreach报错:_frch_item_0 not found的解决方法
发现问题 在mybatis的动态sql中最常见的错误就是使用,比如:_frch_item_0 not found There is no getter for property named 'states' in 'class com.xingguo.model.User' 等等. 一般在使用时出现问题是由以下几种错误使用方式造成的: 1.参数类型不是List,特别当参数为实体类,一个属性为list时,注意collection的名字. 2.遍历时属性的名字或者字段错误 3.多个参数时没有使用@p
-
微信二次分享报错invalid signature问题及解决方法
基于微信公众号开发的h5页面(使用jssdk接口),由用户A分享给用户B,用户B再次分享这个页面时,不能成功分享.问题出在用户B收到的分享链接与用户A打开的链接不同 A用户的链接为 http://test.com/test.html B用户收到的连接 http://test.com/test.html&from=singlemessage from=singlemessage是微信客户端为了区分分享来源再链接后自动添加的标记,再次分享时,需要在js代码中对自动获取的连接进行encodeURICo
-
安装python时MySQLdb报错的问题描述及解决方法
问题描述: windows安装python mysqldb时报错python version 2.7 required,which was not found in the registry 网上很多方案,比如方案一: Python3.x时, from _winreg import * 改为 from winreg import * 去掉下划线 import sys from _winreg import * # tweak as necessary version = sys.version
-
Windows安装Node.js报错:2503、2502的解决方法
前言 Windows真的是太恶心了!!!不仅会出现大量的垃圾文件,而且有时莫名的安装不上一些软件(正常软件).前久因为想学学Koa2,打算升级下nodejs的版本以体验下ES6.ES7的aync,await等新特性,却死活安装不上nodejs同时也卸载不了老版的nodejs,不知所措,放了一段时间,今晚想看看D3准备学学,并借助Koa做个展示性的学习练手项目,决心查查资料解决下nodejs安装报错问题. 功夫不负有心人,终于得以解决,故以此文记录下. 目录权限问题? 首先我想是不是权限问题,于是
-
IIS FTP部分文件上传报错451的原因及解决方法
最近部署一个基于IIS7的ftp服务器,添加一个组的用户具有上传及读取权限,使用Flashfxp软件测试了不同文件的上传下载,均可以正常使用.由于之前建FTP出现过使用浏览器访问不能验证用户的问题,于是也用浏览器进行测试,访问正常.正高兴呢.结果测试传几个文件遇到问题了.部分文件可以正常上传,但部分报错,具体错误提示如下: 找了下资料,发现原来是万国码问题,具体解决方法如下: 在FTP管理器的右边点击"高级设置"--将"允许UTF8"改为[False],如下图:
-
MySQL5.6 GTID模式下同步复制报错不能跳过的解决方法
数据库版本: mysql> select version(); +------------+ | version() | +------------+ | 5.6.10-log | +------------+ 1 row in set (0.02 sec) 同步复制信息: mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Wait
-
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
导入执行后 VM292:1 thirdScriptError sdk uncaught third Error module "miniprogram_npm/vant-weapp/mixins/transition" is not defined Error: module "miniprogram_npm/vant-weapp/mixins/transition" is not defined at require (http://127.0.0.
-
Linux中Oracle启动侦听报错TNS:permission denied的解决方法
前言 最近在开发环境 oracle 启动侦听的时候,出现了 TNS:permission denied 的问题,通过网上和咨询朋友,最终找到了解决方案,现在共享出来给有需要的朋友. 错误描述 [oracle@oracle ~]$ lsnrctl start LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 27-MAR-2015 15:37:59 Copyright (c) 1991, 2009, Oracle. All rights r
-
Mybatis批量更新报错问题
下面给大家介绍mybatis批量更新报错问题, allowMultiQueries=true 后来发现是jdbc链接没有加允许批量更新操作的参数引起的,不加会报badsql,mysql版的mybatis批量更新操作如下 <update id="updateOrderOverdueStatus" parameterType="java.util.List"> <foreach collection="list" item=&quo
-
SpringMail使用过程中的报错解决办法
SpringMail使用过程中的报错解决办法 1.Unable to locate provider for protocol: smtp –>缺少依赖造成的 <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> <dependency
随机推荐
- vueJS简单的点击显示与隐藏的效果【实现代码】
- 注意!PHP 7中不要做的10件事
- jquery实现无刷新验证码的简单实例
- VBS教程:函数-Eval 函数
- JS搜狐面试题分析
- 原生js和jquery分别实现横向导航菜单效果
- 浅谈.NET中加密和解密的实现方法分享
- php后台程序与Javascript的两种交互方式
- Android利用传感器仿微信摇一摇功能
- jQuery中ztree 点击文本框弹出下拉框的实例代码
- response.setContentType()的作用及MIME参数详解
- C# Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(下)
- 让NumLock指示灯常亮起来
- jQuery解析与处理服务器端返回xml格式数据的方法详解
- jquery 操作单选框,复选框,下拉列表实现代码
- js获取电脑分辨率的思路及操作
- 浅谈 Mousewheel 事件
- C#多线程经典示例(吃苹果)
- Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例
- Android实现调用摄像头和相册的方法