mybatis多个接口参数的注解使用方式(@Param)

Mybatis是一款优秀的持久化框架,它的优点之一就是支持多数据源和动态SQL,但在使用多数据源时,可能会发现使用同名的mapper.xml进行映射时,出现了问题。此时可以用 @Param 注解来区分同名方法。这里将对多个接口参数的注解使用方式进行详细讲解,并配合两个实例来加深理解。

什么是 @Param 注解

@Param 是 Mybatis 中的注解,表示为映射方法参数取别名。在 SQL 中,通过 #{别名} 来引用这个值。

例如:

public interface UserMapper{
    List<User> getUserList(@Param("id") int id, @Param("name") String name, @Param("sex") String sex);
}

上面的代码在 SQL 中就可以这样使用:

SELECT * FROM user WHERE id = #{id} and name = #{name} and sex = #{sex}

在调用接口方法的时候,我们在传递参数时,需要使用这个注解标记参数,以便在 Mybatis 处理方法调用时,能够识别这个参数并在 SQL 中通过 #{别名} 映射过来。

为什么要使用 @Param 注解

实际开发中,常常有多个参数的情况,这时候我们需要在 XML 中编写多个 #{} 模板,并将参数全部按顺序传入,这样不但繁琐而且容易混淆,因此 Mybatis 提供了 @Param 注解,方便我们传递参数。

@Param 注解的使用方式

在接口方法的参数前,使用 @Param 注解并指定其中的参数名。在 XML 文件中就可以直接使用指定的参数名来取代之前的“数字”参数。

例如:

public interface UserMapper{
    void updateUser(@Param("id") int id, @Param("name") String name, @Param("age") int age);
}

XML 中使用:

<update id="updateUser" parameterType="hashmap">
    UPDATE USER SET name=#{name},age=#{age} WHERE id=#{id}
</update>

这样在接口方法中传入参数时,必须指定参数名。

例如:

UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(1, "Tom", 23);

这里传的必须是 updateUser( @Param("id") 1, @Param("name") "Tom", @Param("age") 23);

@Param 注解的注意事项

  1. @Param 注解中的值必须与 XML 中 #{} 中的值相一致。
  2. 接口中可以使用多个 @Param 注解进行参数注释,但是建议使用 POJO 对象传参。
  3. 如果一个方法只传一个参数,不需要使用 @Param 注解。

示例1:多参数查询示例

以下以一个多参数查询为例,来说明 @Param 注解的使用方法。

首先,在 mapper 接口类中定义方法 getUserList,该方法需要传递多个参数:

public interface UserMapper {
    List<User> getUserList(@Param("name") String name, @Param("age") Integer age, @Param("sex") String sex);
}

在 XML 中定义了该方法的 SQL 语句:

<select id="getUserList" parameterType="hashmap" resultType="User">
    SELECT * FROM user 
    WHERE 1 = 1 AND name LIKE CONCAT('%',#{name},'%') 
    <if test='age!=null'>AND age = #{age}</if>
    <if test='sex!=null'>AND sex = #{sex}</if>
</select>
  • 如果 age 不为 null,则会拼接 AND 条件 age = #{age}
  • 如果 sex 不为 null,则会拼接 AND 条件 sex = #{sex}

在执行查询方法时,先创建一个 map,用于存储传递的参数,最后将 map 传递给查询方法,方法中使用 @Param 注解引用 map 中的参数。

@Test
public void testGetUserList() {
    UserMapper userMapper = openSession.getMapper(UserMapper.class);

    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("name", "zhang");
    paramMap.put("age", 20);
    paramMap.put("sex", null);

    List<User> users = userMapper.getUserList(paramMap);
    for (User user : users) {
        System.out.println(user);
    }

    openSession.close();
}

运行结果如下:

User(id=1, name=zhangsan, age=18, sex=男)
User(id=3, name=zhangsan, age=20, sex=女)

说明查询成功。

示例2:增加数据示例

以下以一个单表增加数据为例,来说明 @Param 注解的使用方法。

mapper 接口类中定义 add 方法,该方法需要传递多个参数:

public interface UserMapper {
    void add(@Param("name") String name, @Param("age") Integer age, @Param("sex") String sex);
}

在 XML 中定义了该方法的 SQL 语句:

<insert id="add" parameterType="hashmap" useGeneratedKeys="true" keyProperty="id">
    INSERT INTO user(name, age, sex) VALUES (#{name}, #{age}, #{sex})
</insert>

在执行增加方法时,也需要先创建一个 map,用于存储传递的参数,最后将 map 传递给增加方法,方法中使用 @Param 注解引用 map 中的参数。

@Test
public void testAdd() {
    UserMapper userMapper = openSession.getMapper(UserMapper.class);

    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("name", "Tom");
    paramMap.put("age", 22);
    paramMap.put("sex", "男");

    userMapper.add(paramMap);
    System.out.println("插入数据的主键: " + paramMap.get("id"));

    openSession.commit();
    openSession.close();
}

运行结果如下:

插入数据的主键: 5

说明插入成功。

以上就是关于 mybatis多个接口参数的注解使用方式(@Param) 的完整攻略,通过此文,我们能够了解到 @Param 注解的语法格式,注意事项和两个实例操作,希望对您的工作有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatis多个接口参数的注解使用方式(@Param) - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Flutter 如何正确显示SnackBar

    Flutter 中的 SnackBar 是一种轻量级的用户交互反馈工具,用于向用户显示简短的消息或操作结果。本篇攻略将详细讲解如何正确地使用 SnackBar。 1. 显示 SnackBar 在 Flutter 中,显示 SnackBar 最常见的方式是使用 Scaffold 的 ScaffoldMessengerState.showSnackBar() 方…

    GitHub 2023年5月16日
    00
  • Linux/Ubuntu Git从安装到使用的方法步骤

    下面我将详细讲解 Linux/Ubuntu Git从安装到使用的方法步骤的完整攻略。 1. 安装Git 在Linux/Ubuntu上安装Git非常简单,只需要打开终端,输入以下命令即可: sudo apt-get update sudo apt-get install git 该命令会从apt仓库中安装Git,并自动将其添加到系统路径中。 2. 配置Git …

    GitHub 2023年5月16日
    00
  • 通过redis的脚本lua如何实现抢红包功能

    抢红包功能是在多人同时参与时,每个人能够有一定的概率领取到某个红包的一定金额的功能。使用Redis和Lua脚本可以实现高效、并发的抢红包操作。 以下是该功能的完整攻略: 1. 创建红包 首先,在Redis中使用hash类型来存储红包信息,假设要创建的红包信息如下:红包总金额为100元,总数为10个,那么可以使用下面的命令创建: hset red_packet…

    GitHub 2023年5月16日
    00
  • 详解go-admin在线开发平台学习(安装、配置、启动)

    下面是关于“详解go-admin在线开发平台学习(安装、配置、启动)”的完整攻略: 1. 安装Go语言环境 go-admin在线开发平台是基于Go语言开发,因此首先需要安装Go语言环境。 在Windows系统中安装Go语言环境 可以在Go官网上下载Windows系统对应的Go安装包,具体步骤如下: 下载Windows系统对应的Go安装包:https://go…

    GitHub 2023年5月16日
    00
  • 一文带你玩转Golang Prometheus Eexporter开发

    一文带你玩转Golang Prometheus Exporter开发 简介 Prometheus Exporter 实现了一个 HTTP 服务,该服务会在 HTTP 客户端的 /metrics 端点提供度量指标,这些指标是由我们编写的应用程序生成的。在本文中,我们将会详细讲解如何使用 Golang 实现一个 Prometheus Exporter。 实现步骤…

    GitHub 2023年5月16日
    00
  • 使用git命令将本地代码上传到GitHub

    使用git命令将本地代码上传到GitHub分为以下几个步骤: 步骤一:创建GitHub仓库并获取仓库地址 在GitHub网站上创建一个仓库,获得一个仓库地址。在这个仓库地址中“用户名”是你的GitHub账户的用户名,”仓库名”是你要创建的仓库的名字,仓库地址类似于 https://github.com/用户名/仓库名.git。 步骤二:本地创建Git仓库 在…

    GitHub 2023年5月16日
    00
  • Linux系统下Git的基本配置和使用示例

    下面是对“Linux系统下Git的基本配置和使用示例”的完整攻略: Linux系统下Git的基本配置和使用示例 配置Git 安装Git 可以使用包管理器进行安装,比如在Ubuntu系统上使用以下命令即可安装: sudo apt-get update sudo apt-get install git 配置用户名和邮箱 在使用Git时,需要配置用户名和邮箱,以便…

    GitHub 2023年5月16日
    00
  • 使用electron实现百度网盘悬浮窗口功能的示例代码

    下面是详细讲解“使用electron实现百度网盘悬浮窗口功能的示例代码”的完整攻略。 简介 在本文中,你将学习如何使用Electron实现百度网盘悬浮窗口功能的示例代码。Electron是一个使用JavaScript、HTML和CSS构建跨平台桌面应用程序的开源框架,让开发者可以用前端技术构建本地桌面应用程序。 示例1:创建基本的Electron应用程序 第…

    GitHub 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部