[实战经验]Mybatis的Mapper中方法入参什么时候加@Param?

当我们使用Mybatis的时候,mapper接口中方法里面的参数可能有单个,有多个,有对象,有基本类型,有集合,那什么时候需要加@Param注解,什么时候又不用加呢?

参数情况:

  • 一个基本类型
  • 多个基本类型
  • 一个对象
  • 多个对象
  • 一个集合

单个基本类型不用加@Param
Mapper接口方法:

void deleteUserById(Long userId);

XML中的SQL语句:

<delete id="deleteUserById" parameterType="Long">
    delete from user where id = #{userId}
</delete>

多个基本类型需要加@Param
Mapper接口方法:

void updateUserStatusAndRole(@Param("userId") Long userId, @Param("status") String status, @Param("role") String role);

XML中的SQL语句:

<update id="updateUserStatusAndRole" parameterType="map">
    update user set status = #{status}, role = #{role} where id = #{userId}
</update>

解释: 在这种情况下,有多个基本类型参数(userId、status和role),需要使用@Param注解明确指定参数的名称,以便在XML中引用这些参数。


单个对象不用加@Param
Mapper接口方法:

void insertUser(User user);

XML中的SQL语句:

<insert id="insertUser" parameterType="User">
    insert into user (id, name) values (#{id}, #{name})
</insert>

解释: 在这种情况下,入参是一个对象(User类),而且在XML中可以直接使用对象的属性名(id和name)来引用对象的属性,无需使用@Param注解,无需使用user.id,user.name的方法。


多个对象不需要@Param
Mapper接口方法:

void updateUserAddress(User user, Address address);

XML中的SQL语句:

<update id="updateUserAddress" parameterType="map">
    update user set 
        address_line1 = #{address.line1}, 
        address_line2 = #{address.line2} 
    where id = #{user.id}
</update>

解释: 当方法的入参是两个对象类型时,不需要使用 @Param 注解,可以直接在 XML 中使用对象的属性名引用对象属性。


单个集合不用加@Param
Mapper接口方法:

void insertUsers(List<User> users);

XML中的SQL语句:

<insert id="insertUsers" parameterType="java.util.List">
    insert into user (id, name) values 
    <foreach collection="users" item="user" separator=",">
        (#{user.id}, #{user.name})
    </foreach>
</insert>

解释: 在这种情况下,入参是一个集合(User类),可以使用集合中每个对象来引用属性,无需使用@Param。

好的,以上就是这次Mapper接口方法入参是否添加@Param注解的分享,如果你觉得对你有帮助,同学能动动小手指,帮我点个赞。

最近更新

  1. leetcode705-Design HashSet

    2024-04-02 10:10:05       5 阅读
  2. Unity发布webgl之后打开streamingAssets中的html文件

    2024-04-02 10:10:05       5 阅读
  3. vue3、vue2中nextTick源码解析

    2024-04-02 10:10:05       6 阅读
  4. 高级IO——React服务器简单实现

    2024-04-02 10:10:05       5 阅读
  5. 将图片数据转换为张量(Go并发处理)

    2024-04-02 10:10:05       4 阅读
  6. go第三方库go.uber.org介绍

    2024-04-02 10:10:05       6 阅读
  7. 前后端AES对称加密 前端TS 后端Go

    2024-04-02 10:10:05       7 阅读

热门阅读

  1. OpenEuler/Centos制作离线软件源

    2024-04-02 10:10:05       3 阅读
  2. File类的解释与说明

    2024-04-02 10:10:05       3 阅读
  3. linux清空文件内容

    2024-04-02 10:10:05       4 阅读
  4. 联邦学习概述,让你了解联邦学习

    2024-04-02 10:10:05       4 阅读
  5. 竞赛常考的知识点大总结(四)高级数据结构

    2024-04-02 10:10:05       4 阅读
  6. MySQL|为什么不推荐用外键?

    2024-04-02 10:10:05       4 阅读
  7. 如何在微信小程序中使用less来编写css

    2024-04-02 10:10:05       6 阅读
  8. selenium

    2024-04-02 10:10:05       4 阅读
  9. 【C/C++】C语言实现数组(多维数组+稀疏矩阵)

    2024-04-02 10:10:05       10 阅读
  10. node.js常用命令

    2024-04-02 10:10:05       6 阅读
  11. Mysql的库函数

    2024-04-02 10:10:05       3 阅读