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。

 

posted @ 2024-06-18 20:29  r1-12king  阅读(99)  评论(0编辑  收藏  举报