【环境问题】基础Web环境搭建问题记录4——Java不记录形参,运行期替换arg0,arg1...

环境:
MacBook Pro 15
jdk8
IntelliJ IDEA
基础Web框架:Spring+SpringMVC+MyBatis+MySQL+Maven

引子:

大概3,4年前,开始接触Spring+Mybatis这套框架;作为应届生毕业,幸每个都有个mentor带着,度过了一段从白纸到草纸的过程。
问题大概发生在正式入职的1个月内,接手老大的一个后台项目(Spring+Mybatis…),记得看到mybatis中Dao中的方法可以直接与*.xml文件里sql对应,感觉很NB。然后就碰到一些列问题…其中一个就是:_parameter参数经常出现在if test标签里?感觉很奇怪,Dao的方法里也没有配置这个参数。碰巧向mentor问了一嘴,mentor嘴角带着一抹鬼笑的简单解答了mybatis的内置参数blabla…

问题:

mybatis 在Dao中定义方法,传多(>2个)参数数时,需要使用@param(“paramName”)指明传递的参数名称,否则无法正确对应到*.xml文件的方法中。
这里写图片描述

TIPS:

这里错误原因:Java没有保存形参的记录,所以在运行期会把形参统一替换成arg0(param1)、arg1(param2)这样的形参参数列表。
从报错截图可以看出Java运行期替换的参数表现形式:

arg0,arg1,arg2…
param1,param2,param3…

这两种形参形式,只代表参数的顺序,可以混合使用。
这里就引申出这个问题的另外解决办法(不建议开发中使用,仅供学习研究):可以直接在*.xml中,直接配置#{arg0},#{arg1}这样,就标清楚了Dao的Java方法的形参的顺序,而不用显示配置@Param()。
当然可以#{arg0},#{param2}这样混着食用,保证形参顺序对应即可。

参考:

最近再看一个项目:一个关于”Java高并发秒杀API”的项目
项目源码:https://github.com/codingXiaxw/seckill
项目老师:夏循武

JavaSSM学习小结(2):DAO层学习

MyBatis内置参数看这里:
MyBatis学习——内置参数的使用:_parameter、_datebaseId
mybatis中_parameter使用和常用sql

猜你喜欢

转载自blog.csdn.net/guodonggang/article/details/81490205