在 MyBatis 中,如果 Mapper 接口的方法有多个参数,但没有使用 @Param 注解,默认情况下,MyBatis 会将这些参数放入一个 Map 中,键名为 param1、param2 等,或者使用索引 0、1 等来访问。以下是具体的使用方法和注意事项。
假设有一个 Mapper 接口方法,包含多个参数但没有使用 @Param 注解:
public interface UserMapper {
User selectUserByNameAndAge(String name, int age);
}
在 XML 文件中,可以通过以下方式引用参数:
param1、param2 等MyBatis 会自动为参数生成键名 param1、param2 等:
xml 代码解读
<select id="selectUserByNameAndAge" resultType="User"> SELECT * FROM user WHERE name = #{param1} AND age = #{param2}
</select>
0、1 等也可以通过索引 0、1 等来引用参数:
xml 代码解读
<select id="selectUserByNameAndAge" resultType="User"> SELECT * FROM user WHERE name = #{0} AND age = #{1}
</select>
param1、param2 或索引 0、1 的方式可读性较差,容易混淆。@Param 注解明确参数名称。@Param 注解:
使用 @Param 注解可以为参数指定名称,提高代码可读性和可维护性。
public interface UserMapper {
User selectUserByNameAndAge(@Param("name") String name, @Param("age") int age);
}
XML 文件:
xml 代码解读
<select id="selectUserByNameAndAge" resultType="User"> SELECT * FROM user WHERE name = #{name} AND age = #{age}
</select>