情况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.bmabk.com/index.php/post/111132.html