在 MyBatis 中,@Param 注解用于将方法参数绑定到 SQL 查询语句中的参数上。具体来说,当你在 Mapper 接口中定义方法时,@Param 注解可以帮助你指定参数的名称,以便在 SQL 映射文件中使用这些名称。

使用 @Param 注解的原因

当你在 MyBatis 的 Mapper 接口中定义一个方法并希望将方法的参数传递给 SQL 查询时,@Param 注解允许你为这些参数指定名称。这个名称可以在 XML 映射文件中的 SQL 语句中引用。

示例

假设你有一个 Mapper 接口方法如下:


import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface MyMapper {
    List<T> selectList(@Param("query") P p);
}

在这个方法中,@Param("query") 是一个注解,它将 P p 参数绑定到名为 query 的 SQL 参数上。

对应的 XML 映射文件

在 MyBatis 的 XML 映射文件中,你可以这样引用这个参数:

<select id="selectList" parameterType="P" resultType="T">
    SELECT * FROM my_table
    WHERE some_column = #{query.someField}
</select>

在这个 SQL 语句中,#{query.someField} 用于引用 query 参数对象的 someField 属性。

解释

  • @Param("query") 指定了参数的名称为 query。
  • 在 SQL 映射文件中,#{query.someField} 通过 query 这个名称来访问 P 对象的 someField 属性。

如果你没有使用 @Param 注解,MyBatis 默认会将方法参数命名为 param1, param2,依此类推,这可能会使得 SQL 映射文件中的参数引用变得不够清晰和容易管理。

多参数方法

如果你的 Mapper 方法有多个参数,你需要为每个参数指定一个 @Param 注解。例如:


import org.apache.ibatis.annotations.Param;
import java.util.List;

public interface MyMapper {
    List<T> selectList(@Param("query") P p, @Param("limit") int limit);
}

对应的 XML 映射文件中,你可以这样引用多个参数:

<select id="selectList" parameterType="map" resultType="T">
    SELECT * FROM my_table
    WHERE some_column = #{query.someField}
    LIMIT #{limit}
</select>

在这个例子中,#{query.someField} 和 #{limit} 分别对应于 query 参数对象的 someField 属性和 limit 参数值。

总结

  • @Param 注解用于指定方法参数在 SQL 映射文件中的名称。
  • 这使得在 SQL 映射文件中引用参数变得更直观。
  • 对于多个参数的方法,每个参数都需要一个 @Param 注解。
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐