首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Mybatis省略@Param注解原理

Mybatis省略@Param注解原理

作者头像
猫老师的叶同学
发布2023-03-01 13:48:07
发布2023-03-01 13:48:07
1.8K0
举报
文章被收录于专栏:中间件的探究中间件的探究

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注解。

代码语言:javascript
复制
public interface UserMapper {
    User getUser(String username, String password);
}

编写测试类

代码语言:javascript
复制
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文件添加插件并参加参数,参数的意义: 让编译器在编译代码时,保留参数的实际名称。

代码语言:javascript
复制
<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版本没有添加该参数。

谢谢您的阅览,希望这篇文章对您有所帮助。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis省略@Param注解原理
    • 1、新建mybatis的Demo项目
    • 2、添加-parameters参数后的执行结果如下:
    • 3、springboot项目为什么不用另外配置-parameters参数呢
    • 谢谢您的阅览,希望这篇文章对您有所帮助。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档