Mybatis 省略 @Param 注解原理

  • 环境配置

java 版本: jdk1.8

Mybatis 版本: 3.4.1

SpringBoot 整合 Mybatis 版本: SpringBoot2.0

  • 涉及到的知识点:

jdk8 新增了-parameters 参数,开启此参数可以将编译后的 class 文件保留源码中的参数名称,而不是(arg0,arg1)。保留参数名称方便判断反射参数。由于 Java8 的新特性,使得 Mybatis 在 3.4.1 版本后可以省略 @Param 注解。

起始原因:

在回顾 Mybatis 的基础知识点编写 Demo 程序时,发现 Mapper 接口中传递多参数时,需要添加 @param 注解指定传递参数名称,而在 SpringBoot 整合 Mybatis 框架的项目中则可以省略 @param 注解。于是乎,开始探究原因。

下面开始我们的探索之旅

1、新建 mybatis 的 Demo 项目

1.1、首先创建一个 Mybatis 的单独的 Demo, 并编写 UserMapper.java,这里省略 @Param 注解。这里使用的只是非常简单的查询语句。

public interface UserMapper {    User getUser(String username, String password);}

1.2、创建完 Demo,编写完 Mapper 接口和 xml 文件后,在 Test 目录下开始编写测试类。

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 版本), 查看 POM 的依赖管理文件和参数设置。

此时就看到了熟悉的关键字。为了确认是否这个参数,于是乎将这一段注释掉。

想法得到验证。

想法得到验证。然后在 SpringBoot1.x 版本中,目前已知的是 SpringBoot1.5.1 版本没有添加该参数。

谢谢您的阅览,希望这篇文章对您有所帮助!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值