Hi, I’m Shendi
Mybatis报错找不到参数解决之编译保留参数名称
需求场景
在使用 Mybatis 的过程中,对于函数参数,通常会加上 @Param
注解来给参数命名,以让 Mybatis 找到参数。
有的时候忘记添加,执行时就会报找不到参数的错误,但这样太麻烦了,增加了开发时间,于是可以保留编译的参数名称,不用 @Param
注解
不仅仅是Mybatis,对于需要反射获取到变量名称来做处理的框架来说都可以使用。
以前一直用的这个,后面没管也没记录,就忘记了。于是换了新的环境就导致又一次报错了,所以在这里记录下来
Java编译保留函数与参数名称信息
这个特性是 JDK 1.8 才有的
在编译时,默认会将参数名称整为 arg0,arg1这样的形式
通过编译参数 -parameters
来保留代码中的名称
Eclipse
在Eclipse中,需要勾选 Store information about method parameters (usable via reflection)
在 Window -> Preferences -> Java -> Compiler 中
IDEA
在 File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler 中
Additional command line parameters 项输入 -parameters
优缺点
优点:
- 保留参数名称信息:使用
-parameters
选项编译Java代码时,会保留方法参数的名称信息。这使得在运行时通过反射机制能够获取到方法的真实参数名称,提高了代码的可读性和可维护性。 - 提升调试和日志记录能力:保留参数名称信息对于调试和日志记录非常有帮助。当出现问题时,可以通过反射获取到方法的参数名称,从而更轻松地跟踪和定位问题。
- 提高开发效率: 使用-parameters参数可以省略编写额外的代码来指定参数的名称,因此可以提高编码效率。
缺点:
- 增加编译后的类文件大小:由于保留了参数名称信息,编译后的类文件大小会有所增加。这可能会对应用程序的加载和启动时间产生一定的影响。
- 潜在的性能开销:使用
-parameters
选项会增加一些运行时性能开销,因为需要额外的元数据来存储参数名称信息。尽管这个开销相对较小,但在性能敏感的应用程序中可能需要权衡使用。
END