Mybatis中引用类型不需要加@param()注解

在 MyBatis 中,对于引用类型的参数(即 Java 对象),通常不需要使用 @Param 注解,除非你在映射文件中使用了多个参数,并且这些参数不是封装在一个对象中的。

当你只有一个引用类型的参数传递给 MyBatis 的映射器方法时,MyBatis 会自动将该参数作为唯一参数处理,并可以在 SQL 映射文件中通过 #{} 占位符引用该参数的属性。例如:

java
public interface UserMapper {
    User selectUserById(User user);
}

在上面的例子中,User 是一个引用类型,作为唯一参数传递给 selectUserById 方法。在对应的 SQL 映射文件中,你可以这样引用 User 对象的属性:

xml
<select id="selectUserById" resultType="User">
    SELECT * FROM user WHERE id = #{id}
</select>

这里,#{id} 直接引用了传入 User 对象的 id 属性,而不需要在方法签名中使用 @Param 注解。

然而,当你使用多个参数时(无论是基本类型还是引用类型),MyBatis 就无法直接确定每个参数的名字了。在这种情况下,你应该使用 @Param 注解来明确指定每个参数的名称,以便在 SQL 映射文件中引用它们。例如:

java
public interface UserMapper {
    User selectUserByNameAndAge(@Param("name") String name, @Param("age") int age);
}

在上面的例子中,selectUserByNameAndAge 方法接受两个参数:一个 String 类型的 name 和一个 int 类型的 age。由于这两个参数都是基本类型,而不是封装在一个对象中的,因此需要使用 @Param 注解来分别为它们命名。在 SQL 映射文件中,你可以这样引用它们:

xml
<select id="selectUserByNameAndAge" resultType="User">
    SELECT * FROM user WHERE name = #{name} AND age = #{age}
</select>

在这个例子中,#{name} 和 #{age} 分别引用了通过 @Param 注解命名的 name 和 age 参数。

总结来说,对于单个引用类型的参数,MyBatis 不需要 @Param 注解;而对于多个参数(无论是否包含引用类型),则需要使用 @Param 注解来命名每个参数,以便在 SQL 映射文件中正确引用它们。

posted @ 2024-05-12 17:21  文采杰出  阅读(230)  评论(0编辑  收藏  举报