Mybatis省略@Param注解原理分析

作者:吴明_yst 时间:2023-06-19 16:08:44 

环境配置:

  • 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路线如下: 直接上图

Mybatis省略@Param注解原理分析

Mybatis省略@Param注解原理分析

此时参数封装的结构为:

Mybatis省略@Param注解原理分析

然后就不出意外的报错了

Mybatis省略@Param注解原理分析

那么如何解决呢?

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省略@Param注解原理分析

此时Mybatis封装参数效果如下:

Mybatis省略@Param注解原理分析

那么执行结果如何呢?

Mybatis省略@Param注解原理分析

没有问题,只是数据库没有匹配的数据。

那么为什么springboot项目我们没有配置过这类的参数,但是也可以省略@param注解呢?

3、springboot项目为什么不用另外配置-parameters参数呢

新建一个springboot项目(2.0.3版本)

Mybatis省略@Param注解原理分析

Mybatis省略@Param注解原理分析

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

Mybatis省略@Param注解原理分析

想法得到验证。

springboot1.5.1版本没有添加该参数。

来源:https://blog.csdn.net/qq_50661854/article/details/124443139

标签:Mybatis,@Param,注解
0
投稿

猜你喜欢

  • 详解Spring Boot中MyBatis的使用方法

    2023-08-22 17:25:01
  • Java如何获取word文档的条目化内容

    2023-10-27 15:04:32
  • Spring Cloud Gateway不同频率限流的解决方案(每分钟,每小时,每天)

    2023-01-05 13:49:34
  • 基于WPF实现验证码控件

    2021-08-15 21:44:36
  • Spring使用AOP完成统一结果封装实例demo

    2021-12-16 18:49:06
  • unity 如何获取button文本的内容

    2022-01-29 19:31:04
  • Android实现老虎机小游戏代码示例

    2022-08-04 04:15:11
  • java压缩zip文件中文乱码问题解决方法

    2022-12-20 11:14:25
  • java文件操作输入输出结构详解

    2023-07-30 21:48:30
  • C# 三种序列化方法分享

    2022-09-21 03:43:05
  • 一文快速掌握Spring Cloud Stream

    2023-09-01 23:09:38
  • ComposeDesktop开发桌面端多功能APK工具

    2022-02-11 16:57:04
  • Java获取Process子进程进程ID方法详解

    2022-09-01 13:21:08
  • Java中构造函数,set/get方法和toString方法使用及注意说明

    2021-07-15 13:01:39
  • java分布式面试CAP分别代表含义分析

    2021-10-05 17:54:47
  • 深入浅出MappedByteBuffer(推荐)

    2023-11-14 19:59:43
  • Java后端学习精华之TCP通信传输协议详解

    2021-08-06 03:15:42
  • JavaWeb登录界面登录失败在同一页面进行提示的解决

    2023-11-26 15:51:34
  • Java maven详细介绍

    2022-10-12 06:45:31
  • Java switch使用原理及实例解析

    2023-10-11 20:44:20
  • asp之家 软件编程 m.aspxhome.com