Java8新特性-编译时保留方法参数名
先来看一个例子。
1 | @Mapper |
在这段代码证,我们通过#{phone},#{password}占位符来获取形参phone和password。咋一看没错,但运行会发现报错:
说是找到不到phone参数。我们明明将形参名和#{}占位符里面的保持一致了,为什么还是找不到phone参数呢?
这是因为,在java8以前的版本中,编译器在编译的时候会将形参String phone编译为String arg0,并不会保留形参原来的名字。这个时候必须手动设置@Param参数完成映射。
1 | @Select("select * from tb_user where phone=#{phone} and password=#{password}") |
好在从java8之后,就提供了新特性。java8新特性:编译时保留方法参数名称。
java8这个特性默认是关闭的,需要开启-parameters参数才能获取参数名称。
#pom.xml
1 | <plugin> |
除了在pom.xml文件中配置,还可以手动使用命令:
javac -parameters xxxxx.java
,编译得到的class文件将保留参数名称。
配置完成后,重新运行,运行成功:
可能的问题:
在pom.xml中配置了-parameters参数,如果还是报找不到参数的错误,清理maven的缓存并重新编译。执行以下命令。
1 | mvn clean compile |
或者在idea的maven插件中,执行clean和compile生命周期。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 XiaoYi Blog!
评论