@Param注解可以应用于方法的参数或者方法的参数上的字段,用于指定参数在SQL语句中的名称。
为什么使用@Param
当方法有多个参数时,如果不使用@Param注解,MyBatis将使用参数的位置作为参数的名称,这可能会导致不明确或者混乱的情况。通过使用@Param注解,可以明确指定每个参数在SQL语句中的名称。
当方法的参数是一个复杂对象(例如JavaBean)时,MyBatis默认使用参数对象的属性名作为参数在SQL语句中的名称。但是,有时候我们可能需要使用不同的名称或者引用参数对象的属性时需要进行映射。@Param注解提供了这种映射的能力。
使用@Param注解
@Param注解应用于方法参数上。通过指定注解的value属性,我们为每个参数指定了自定义的名称,这些名称将在SQL语句中被使用。
@Insert("INSERT INTO users (id, username, email) VALUES (#{userId}, #{userName}, #{email})")
void insertUser(@Param("userId") int id, @Param("userName") String name, @Param("email") String email);
@Param注解应用于方法参数上的字段。我们将整个User对象作为方法的参数,通过指定注解的value属性,将参数字段映射到SQL语句中的相应位置。
@Insert("INSERT INTO users (id, username, email) VALUES (#{user.id}, #{user.name}, #{user.email})")
void insertUser(@Param("user") User user);
不使用@Param注解
单个参数:如果方法只有一个参数,并且在SQL语句中引用该参数,可以直接使用参数本身。
@Select("SELECT \* FROM users WHERE id = #{id}")
User getUserById(int id);
多个参数:如果方法有多个参数,并且在SQL语句中引用这些参数,可以使用默认的位置参数。
@Insert("INSERT INTO users (id, username) VALUES (#{0}, #{1})")
void insertUser(int id, String username);
当复杂对象作为方法的参数进行传递。MyBatis会按照默认的规则将对象的属性映射到SQL语句中。
public class User {
private int id;
private String name;
}
@Insert("INSERT INTO users (id, username, email) VALUES (#{id}, #{name}, #{email})")
void insertUser(User user);