在 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_tableWHERE 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_tableWHERE some_column = #{query.someField}LIMIT #{limit}
</select>
在这个例子中,#{query.someField}
和 #{limit}
分别对应于 query
参数对象的 someField
属性和 limit
参数值。
总结
@Param
注解用于指定方法参数在 SQL 映射文件中的名称。- 这使得在 SQL 映射文件中引用参数变得更直观。
- 对于多个参数的方法,每个参数都需要一个
@Param
注解。