这篇文章主要介绍了Mybatis省略@Param注解原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
环境配置:
- jdk1.8
- mybatis3.4.1
- springboot2.0
起始原因:
编写mybatis的Demo程序时,mapper传递多参数时,需要添加@param注解指定传递参数名称,而在springboot整合的mybatis则可以省略@param注解。于是乎,开始探究原因。
涉及到的知识点:
jdk8新增了-parameters参数,开启此参数可以将编译后的class文件保留源码中的参数名称,而不是(arg0,arg1)。保留参数名称方便判断反射参数。此处便运用在Mybatis中mapper接口传参中。
1、新建mybatis的Demo项目
编写UserMapper.java,这里省略@Param注解。
public interface UserMapper {
User getUser(String username, String password);
}
编写测试类
public class MyBatisTest {
@Test
public void testCrud() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User admin = mapper.getUser("admin", "123456");
System.out.println(admin);
}
}
Debug路线如下: 直接上图
此时参数封装的结构为:
然后就不出意外的报错了
那么如何解决呢?
2、添加-parameters参数后的执行结果如下
在pom文件添加插件并参加参数,参数的意义: 让编译器在编译代码时,保留参数的实际名称。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
添加插件和参数后, 可以在idea查看编译器添加参数的情况。
此时Mybatis封装参数效果如下:
那么执行结果如何呢?
没有问题,只是数据库没有匹配的数据。
那么为什么springboot项目我们没有配置过这类的参数,但是也可以省略@param注解呢?
3、springboot项目为什么不用另外配置-parameters参数呢
新建一个springboot项目(2.0.3版本)
此时就看到了熟悉的关键字。为了确认是否这个参数,于是乎将这一段注释掉。
想法得到验证。
springboot1.5.1版本没有添加该参数。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程学习网。
本文标题为:Mybatis省略@Param注解原理分析
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
- 基于Java Agent的premain方式实现方法耗时监控问题 2023-06-17
- 深入了解Spring的事务传播机制 2023-06-02
- Java实现顺序表的操作详解 2023-05-19
- ExecutorService Callable Future多线程返回结果原理解析 2023-06-01
- JSP 制作验证码的实例详解 2023-07-30
- Springboot整合minio实现文件服务的教程详解 2022-12-03
- Spring Security权限想要细化到按钮实现示例 2023-03-07
- Java中的日期时间处理及格式化处理 2023-04-18
- SpringBoot使用thymeleaf实现一个前端表格方法详解 2023-06-06
- JSP页面间传值问题实例简析 2023-08-03