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

导读:本篇文章讲解 关于ibatis.binding.BindingException: Parameter ‘frame‘ not found异常,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

情况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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/111132.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!