关于ibatis.binding.BindingException: Parameter ‘frame‘ not found异常

情况1

Dao层代码写法:

Entity getEntityList(String params1,Integer params2, Integer params3,Integer params4);

对应SQL:

SELECT * FROM table t WHERE t.age = #{params1} AND t.age = #{params1} AND t.age = #{params1} AND t.age = #{params1}

场景:windows环境下无异常,而Linux环境下会抛出异常

nested exception is org.apache.ibatis.binding.BindingException: Parameter 'params1' not found. Available parameters are [arg3, arg2, arg1, arg0, param3, param4, param1, param2]

情况2

Dao层代码写法:

Entity getEntityList(String params1);

对应SQL:

SELECT * FROM table t WHERE t.age = #{params1} 

场景:windows环境下无异常,Linux环境下也无异常

总结:

      经过查阅资料,做一下总结

           1、如果传参数的时候以Map<String,Object> params方式进行传参时,sql中取参数是根据key去取参数

           2、如果传参数时,不使用Map<String,Object> params进行封装,而是有多少数据,dao层接口的括号里写多少数据,mybatis就会将接口的数据解析成

void method(Integer params1,Integer params2,Integer params3)

     sql中就会处理成

SELECT * FROM table t WHERE t.age = #{params1} AND  t.age = #{params2}  AND  t.age = #{params3} -- 这种windows和Linux不会报错
SELECT * FROM table t WHERE t.age = #{params3} AND  t.age = #{params2}  AND  t.age = #{params1} -- 这种windows下不会报错,Linux下回报错

由此总结:1、如果dao层参数是一个的话,可以不加@Param注解,正常写即可

                  2、如果dao层参数是多个的话,有两种写法

                      (1)dao层参数加上@Param注解,且传入参数的顺序,不需要跟SQL中使用的顺序一致,SQL中正常使用即可

                      (2)dao层参数不加@Param注解,这时候,传入参数的顺序必须和SQL中使用参数的顺序保持一致才行

查阅资料:https://www.cnblogs.com/canger/p/9931774.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值