MyBatis多个接口参数报错:Available parameters are [0, 1, param1, param2], 及解决方法
1. sql语句如下:
SELECT * FROM tb_crm_user WHERE
id = #{userId, jdbcType=INTEGER} AND
user_name = #{userName, jdbcType=VARCHAR}
2. 接口如下:
TbCrmUser queryTbCrmUser(int userId, String userName);
3. 调用接口方式如下:
int userId = 1000059081;
String userName = "积极";
TbCrmUser user1 = tb.queryTbCrmUser(userId, userName);
4. 结果如下:

5. 错误原因:
这个错误表示,xml可用的参数只有【0, 1, param1, param2】四个,没有userId! 这就奇了个怪,本宝明明给了参数userId,为什么识别不了?而且我只有一个参数的时候,这样明明没有错呀!!!
原来是【0, 1, param1, param2】是MyBatis根据参数位置自定义的名字,如果只有一个参数,那就只有一个位置,当然没有歧义了。可是如果有多个参数,就需要指定哪个参数在哪个位置!
6. 修改方式1:
最简单的一个方式就是修改sql语句,指定位置,用0,1 或者param1, param2都可以:
SELECT * FROM tb_crm_user WHERE
id = #{0, jdbcType=INTEGER} AND
user_name = #{1, jdbcType=VARCHAR}
但是不建议这样做,因为如果参数很多,效果则不理想; 修改方式2:
给接口添加@Param注解,指明参数的对应关系,原因是给参数配置了@Param注解后,MyBatis就会自动将参数封装成Map类型,@Param注解值会作为Map中的key,因此在xml中的sql语句就可以通过配置的注解值来使用参数
TbCrmUser queryTbCrmUser(@Param("userId") int userId,
@Param("userName") String userName);
修改方式3:
当参数很多时:我们还可以采用如下方式解决:
首先,修改接口参数格式:
TbCrmUser queryTbCrmUser(Map<String, Object> map); 其次,在调用接口的前面自己创建一个map
int userId = 1000059081;
String userName = "积极";
Map<String, Object> map = new HashMap<>();
map.put("userId", userId);
map.put("userName", userName);
TbCrmUser user1 = tb.queryTbCrmUser(map);
这样做的本质与第二种方式本质一致!
MyBatis多个接口参数报错:Available parameters are [0, 1, param1, param2], 及解决方法的更多相关文章
- Spring Boot中报错org.apache.ibatis.binding.BindingException: Parameter 'XXXX' not found. Available parameters are [0, 1, param1, param2]的解决办法
我这里的报错信息显示: org.apache.ibatis.binding.BindingException: Parameter 'reqUsername' not found. Available ...
- Picard报错“MAPQ should be 0 for unmapped read”的解决方法
picard对bwa生成的sam文件进行reorder时,报错如下: Getting Help Exception in thread "main" htsjdk.samtools ...
- flask+sqlite3+echarts2+ajax数据可视化报错:UnicodeDecodeError: 'utf8' codec can't decode byte解决方法
flask+sqlite3+echarts2+ajax数据可视化报错: UnicodeDecodeError: 'utf8' codec can't decode byte 解决方法: 将 py文件和 ...
- 【pycharm】pycharm上安装tensorflow,报错:AttributeError: module 'pip' has no attribute 'main' 解决方法
pycharm上安装tensorflow,报错:AttributeError: module 'pip' has no attribute 'main' 解决方法 解决方法: 在pycharm的安装目 ...
- 使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法:
使用IDEA操作Hbase API 报错:org.apache.hadoop.hbase.client.RetriesExhaustedException的解决方法: 1.错误详情: Excepti ...
- Python报错UnicodeDecodeError: ascii codec can t decode byte 0xe0 ...解决方法
用命令(python setup.py install)安装webpy时候总是报错 在网上搜索到的解决方法如下: 1. 这是Python 2 mimetypes的bug 2. 需要将Python2.7 ...
- 启动tomcat时,报错:IOException while loading persisted sessions: java.io.EOFException解决方法
报错原因:加载持久化session错误,tomcat加载时读取的文件是是*.ser,session序列化文件,文件的位置是tomcat\work\Catalina\localhost,找到sessio ...
- mybatis参数错误 Parameter '×××' not found. Available parameters are [0, 1, param1, param2]
报错的代码 @Update("update staff_info set ApplyState = #{applyState} where Id = #{userId}") int ...
- 编译lua5.3.2报错提示libreadline.so存在未定义的引用解决方法
从官网上下载5.3.2的源码后,make linux进行编译,提示报错: gcc -std=gnu99 -o lua lua.o liblua.a -lm -Wl,-E -ldl -lreadline ...
随机推荐
- <Android 应用 之路> 天气预报(二)
界面组成 载入界面 显示界面 Activity两个,一个用来显示载入界面,一个用来显示天气信息 主要代码如下: public class MyActivity extends Activity { p ...
- WisdomTool REST Client 下载 测试请求,生成api文档
https://github.com/Wisdom-Projects/rest-client
- jacvaSe-LinkedList
package com.java.chap08.sec02; import java.util.LinkedList; public class TestLinkedList { private st ...
- HDU 3681 Prison Break 越狱(状压DP,变形)
题意: 给一个n*m的矩阵,每个格子中有一个大写字母,一个机器人从‘F’出发,拾取所有的开关‘Y’时便能够越狱,但是每走一格需要花费1点能量,部分格子为充电站‘G’,每个电站只能充1次电.而且部分格子 ...
- sessionStorage 详解,特点,使用技巧,场景
很早之前久知道sessionStorage ,也学习过,但没有实战使用过 .最近团队遇到一个问题<electronjs中打开新页面sessionStorage丢失>,让我有机会重新来认识一 ...
- 激光推送报错:APNs is not available,please check your provisioning profile and certification 和 设置别名问题 app not registed, give up set tag:
前几天,项目中用到了推送功能,就集成了激光,遇到了2个问题,就给大家分享一下, 第一个问题: 在集成的过程是按照激光的文档做的,但是最后配置完了,一运行,就打印出这么一句话, APNs is not ...
- MySql面试题、知识汇总、牛客网SQL专题练习
点击名字直接跳转到链接: Linux运维必会的100道MySql面试题之(一) Linux运维必会的100道MySql面试题之(二) Linux运维必会的100道MySql面试题之(三) Linux运 ...
- BigDecimal and double
BigDecimal类 对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数 ...
- sql快速删除所用表,视图,存储过程
[http://www.th7.cn/db/mssql/2011-07-07/10127.shtml#userconsent#] 删除用户表 .select 'DROP TABLE '+name fr ...
- 新手 WordPress主题制作全过程
WordPress主题制作全过程(一):基础准备 前言: 我想大多数使用WordPress的朋友都喜欢去尝试新的主题,但是换来换去,总是找不到那么一款适合自己的,让人很郁闷.于是很多人萌生了修改现有主 ...