不需要加注解也能映射到对应的参数名称上的根本原因是编译的时候默认使用的 javac -parameters方式它会保留参数的真实名字,然而Java编译的时候默认会将方法参数名抹除
如果使用默认的编译方式然后重新运行项目
通过使用注解可以匹配上
但是我们mapper接口没有加注解所以也会导致映射不到对应的参数导致报错
当我们将mapper的注解补上之后就没问题了
可以通过以下配置来实现编译的时候保留参数的名称
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<!--如果使用–parameters参数来编译这个类,参数的真实名字将会显示出来-->
<compilerArgument>-parameters</compilerArgument>
<encoding>${project.build.sourceEncoding}</encoding>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.12.RELEASE</version>
</plugin>
</plugins>
</build>
在springboot默认就已经帮我开启了
参考文章
JDK8新特性:编译器保留方法参数名字
面试题: 为何Mybatis获取不到接口的参数名?