资讯专栏INFORMATION COLUMN

MyBatis 中 @Param 注解的四种使用场景,最后一种经常被人忽略!

BothEyes1993 / 591人阅读

摘要:如果我们在动态中用到了参数作为判断条件,那么也是一定要加注解的,例如如下方法定义出来的如下这种情况,即使只有一个参数,也需要添加注解,而这种情况却经常被人忽略好了,不知道大家有没有到呢有问题欢迎留言讨论。

有一些小伙伴觉得 MyBatis 只有方法中存在多个参数的时候,才需要添加 @Param 注解,其实这个理解是不准确的。即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解。

但是,在你总结出规律之前,你可能会觉得莫名其妙,有的时候一个参数明明不用添加 @Param 注解,有的时候,却需要添加,不添加会报错。

有的人会觉得这是 MyBatis 各个版本差异的锅,不可否认,MyBatis 发展很快,不同版本之间的差异还挺明显的,不过这个加不加 @Param 注解的问题,却并不是版本的锅!今天松哥就和大家来聊一聊这个问题,到底哪些情况下需要添加 @Param 注解。

首先,如下几个需要添加 @Param 注解的场景,相信大家都已经有共识了:

第一种:方法有多个参数,需要 @Param 注解

例如下面这样:

@Mapper
public interface UserMapper {
    Integer insert(@Param("username") String username, @Param("address") String address);
}

对应的 XML 文件如下:


    insert into user (username,address) values (#{username},#{address});

这是最常见的需要添加 @Param 注解的场景。

第二种:方法参数要取别名,需要 @Param 注解

当需要给参数取一个别名的时候,我们也需要 @Param 注解,例如方法定义如下:

@Mapper
public interface UserMapper {
    User getUserByUsername(@Param("name") String username);
}

对应的 XML 定义如下:

老实说,这种需求不多,费事。

第三种:XML 中的 SQL 使用了 $ ,那么参数中也需要 @Param 注解

$ 会有注入漏洞的问题,但是有的时候你不得不使用 $ 符号,例如要传入列名或者表名的时候,这个时候必须要添加 @Param 注解,例如:

@Mapper
public interface UserMapper {
    List getAllUsers(@Param("order_by")String order_by);
}

对应的 XML 定义如下:

前面这三种,都很容易懂,相信很多小伙伴也都懂,除了这三种常见的场景之外,还有一个特殊的场景,经常被人忽略。

第四种,那就是动态 SQL ,如果在动态 SQL 中使用了参数作为变量,那么也需要 @Param 注解,即使你只有一个参数。

如果我们在动态 SQL 中用到了 参数作为判断条件,那么也是一定要加 @Param 注解的,例如如下方法:

@Mapper
public interface UserMapper {
    List getUserById(@Param("id")Integer id);
}

定义出来的 SQL 如下:

这种情况,即使只有一个参数,也需要添加 @Param 注解,而这种情况却经常被人忽略!

好了,不知道大家有没有 GET 到呢?有问题欢迎留言讨论。

关注公众号【江南一点雨】,专注于 Spring Boot+微服务以及前后端分离等全栈技术,定期视频教程分享,关注后回复 Java ,领取松哥为你精心准备的 Java 干货!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75555.html

相关文章

  • Spring Boot 2.x(四):整合Mybatis四种方式

    摘要:前言目前的大环境下,使用作为持久层框架还是占了绝大多数的,下面我们来说一下使用的几种姿势。测试测试的程序与之前的一致,我们直接访问,可以看到成功的结果姿势三使用的姿势和可以与上面两种方式进行结合,。。。接口的实现是通过。然后我们将的改为。 前言 目前的大环境下,使用Mybatis作为持久层框架还是占了绝大多数的,下面我们来说一下使用Mybatis的几种姿势。 姿势一:零配置注解开发 第...

    felix0913 评论0 收藏0
  • Web开发框架推导

    摘要:边界清晰,有利于理解开发测试和部署。前后端分离考虑到目前开发流行前后端分离,为了适应潮流,引入前后端分离的约束。该请求被接受处理,但是该处理是不完整的。 本文欲回答这样一个问题:在 「特定环境 」下,如何规划Web开发框架,使其能满足 「期望 」? 假设我们的「特定环境 」如下: 技术层面 使用Java语言进行开发 通过Maven构建 基于SpringBoot 使用Intelli...

    vpants 评论0 收藏0
  • Spring Boot学习笔记(六)结合MyBatis实现较为复杂的RESTful API

    摘要:前两篇已经构建了标准工程实例,也整合了实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库的标准服务。到这里,最复杂的数据访问基本就算编写完了。 前两篇已经构建了RESTful API标准工程实例,也整合了MyBatis实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库CRUD的标准服务。 首先看下要实现的效果吧,完成下面截图部分的API,除了CRUD之外...

    CntChen 评论0 收藏0
  • 一起来学SpringBoot | 第七篇:整合Mybatis

    摘要:但是鉴于国内市场环境而言,掌握无异于是佳的选择,低学习成本和动态解耦的特点使得更容易被人们所接受。 SpringBoot 是为了简化 Spring 应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程 MyBatis 是一款优秀的持久层框架,它支持...

    includecmath 评论0 收藏0
  • Java面试 32个核心必考点完全解析

    摘要:如问到是否使用某框架,实际是是问该框架的使用场景,有什么特点,和同类可框架对比一系列的问题。这两个方向的区分点在于工作方向的侧重点不同。 [TOC] 这是一份来自哔哩哔哩的Java面试Java面试 32个核心必考点完全解析(完) 课程预习 1.1 课程内容分为三个模块 基础模块: 技术岗位与面试 计算机基础 JVM原理 多线程 设计模式 数据结构与算法 应用模块: 常用工具集 ...

    JiaXinYi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<