【@Param注解】| 台面使用——>底层原理分析

命运对每个人都是一样的,不一样的是各自的努力和付出不同,付出的越多,努力的越多,得到的回报也越多,在你累的时候请看一下身边比你成功却还比你更努力的人,这样,你就会更有动力。

导读:本篇文章讲解 【@Param注解】| 台面使用——>底层原理分析,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

在这里插入图片描述
🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄

🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄

🦁 定义

@Param注解的作用是指定方法参数在SQL语句中的名称,从而帮助MyBatis正确处理SQL语句中的占位符,生成正确的SQL语句

🦁 台面使用

 在使用MyBatis进行SQL映射时,@Param注解的底层原理主要是基于Java的反射机制实现的。
  • MyBatis解析Mapper接口方法,并获取方法参数类型

  • 遍历方法参数,如果参数上带有@Param注解,则解析该注解,并将注解中的value作为参数名称。

  • 将每个参数名称及对应的参数值,以一个Map的形式传递给SQL语句中的参数占位符

  • MyBatis使用OGNL表达式来从Map中获取对应参数的值,并将其填充到SQL语句中,最终生成完整的SQL语句

eg:

public User findUserById(@Param("id") Long id, @Param("username") String username);

在上面的方法中,@Param注解中的value值分别为”id”和”username”,表示方法中的第一个参数为”id”,第二个参数为”username”。MyBatis会根据这些参数名和值,动态生成SQL语句,并将处理后的SQL语句传递给数据库执行。

🦁 底层原理分析

@Param注解的源码其实并不长,具体如下:

package org.apache.ibatis.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * The annotation that specify the parameter name.
 *
 * <p>
 * <b>How to use:</b>
 *
 * <pre>
 * public interface UserMapper {
 *   &#064;Select("SELECT id, name FROM users WHERE name = #{name}")
 *   User selectById(&#064;Param("name") String value);
 * }
 * </pre>
 *
 * @author Clinton Begin
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Param {
  /**
   * Returns the parameter name.
   *
   * @return the parameter name
   */
  String value();
}

其中public @interface Param是一个注解,在使用MyBatis进行SQL映射时,用于指定参数名称。该注解只用于方法参数上,表示该参数在SQL语句中对应的名称。
从定义中可以看出,@Param注解具有以下特点:

  1. @Param注解是一个元注解,即它可以用于注解其他注解。(@Documented限定)

  2. @Param注解的保留策略是RUNTIME,即注解在运行时可见。

  3. @Param注解只能用于方法参数上,用于指定参数在SQL语句中的名称。

我们来分析一下第3点:
众所周知,在Java中,注解可以用于不同的程序元素(即目标元素),例如类、方法、字段、参数等。为什么@Param就只能用于方法参数上呢?
@Target注解用于指定注解的目标元素类型,以限制注解的使用范围。而@Param头顶上标注着@Target(ElementType.PARAMETER) ,此注解就如上所说限定了@Param注解只能用于方法参数上,不能用于其他目标元素,但是这也提高了代码的可读性和可维护性。

🦁 尾声

🐇 🐇 😄 🐇 🐇 今天的分享到此结束,咱们下期见!!! 🐇 🐇 😄 🐇 🐇

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/143129.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!