Mybatis省略@Param注解原理分析

 更新时间:2022年06月22日 11:03:37   作者:吴明_yst  
这篇文章主要介绍了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版本没有添加该参数。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java计算任意位水仙花数示例(回文数)

    java计算任意位水仙花数示例(回文数)

    这篇文章主要介绍了java计算任意位水仙花数示例(回文数),需要的朋友可以参考下
    2014-05-05
  • java后端合成图片的实现示例

    java后端合成图片的实现示例

    本文主要介绍了java后端合成图片的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

    SpringBoot整合MyBatis实现乐观锁和悲观锁的示例

    这篇文章主要介绍了SpringBoot整合MyBatis实现乐观锁和悲观锁的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • MyBatis映射关系详解

    MyBatis映射关系详解

    本文重点介绍MyBatis映射关系重点是映射关系一对一,一对一映射方式结合应用实例给大家详细讲解,对MyBatis映射关系相关知识感兴趣的朋友一起看看吧
    2022-11-11
  • SpringBoot扫描不到Controller的解决方案

    SpringBoot扫描不到Controller的解决方案

    这篇文章主要介绍了SpringBoot扫描不到Controller的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • mybatis 查询sql中in条件用法详解(foreach)

    mybatis 查询sql中in条件用法详解(foreach)

    这篇文章主要介绍了mybatis 查询sql中in条件用法详解(foreach),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringMvc获取页面中的参数方法详解

    SpringMvc获取页面中的参数方法详解

    这篇文章主要介绍了SpringMvc获取页面中的参数方法详解,获取页面的参数通常都是让类实现设置HttpServletRequest request接口然后重写接口中的方法的办法来得到参数,但是在Springmvc中有其他的获取方法,需要的朋友可以参考下
    2023-10-10
  • Java中将List拆分为多个小list集合的实现代码

    Java中将List拆分为多个小list集合的实现代码

    这篇文章主要介绍了Java中如何将List拆分为多个小list集合,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 基于ReentrantLock的实现原理讲解

    基于ReentrantLock的实现原理讲解

    这篇文章主要介绍了ReentrantLock的实现原理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Mybatis流式查询之ResultHanlde问题

    Mybatis流式查询之ResultHanlde问题

    这篇文章主要介绍了Mybatis流式查询之ResultHanlde问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论