- 在 MyBatis 中,@ConstructorArgs 和 @Arg 注解用于指定构造函数参数和函数的参数值。这两个注解通常用于映射结果集到 Java 对象时,可以通过构造函数来创建对象并设置属性值。
- @ConstructorArgs 注解用于指定构造函数的参数列表,它可以包含多个 @Arg 注解
- @ConstructorArgs 注解有以下属性:
属性 |
描述 |
value |
构造函数的映射定义,该属性是一个 Arg 数组。包含多个 @Args |
- @Args 注解有以下属性:
属性 |
描述 |
id |
与 XML 元素 <idArg> 相似,它是一个布尔值,表示该属性是否用于唯一标识和比较对象。 |
column |
指定参数对应的数据库列名 |
javaType |
指定参数对应的Java类型。如果不指定,则根据方法参数类型自动推断。 |
jdbcType |
指定参数对应的JDBC类型。如果不指定,则根据Java类型自动推断 |
typeHandler |
指定处理该参数的TypeHandler类。如果不指定,则使用默认的TypeHandler。 |
select |
用于嵌套查询,表示该参数需要执行一个查询语句(@Select)来获取值 |
resultMap |
用于嵌套结果映射,表示该参数需要使用一个ResultMap(@Results)来进行结果映射。 |
name |
当方法有多个@Arg注解时,可以通过name属性来区分它们所代表的含义。 |
columnPrefix |
为所有列名添加前缀。 |
示例
public interface UserMapper(){
@ConstructorArgs({
@Arg(column = "id", javaType = Integer.class, id = true),
@Arg(column = "userName", javaType = String.class, id = false),
@Arg(column = "password", javaType = String.class, id = false)}
)
@Select("select id, userName, password from user")
List<User> selectAll();
}
示例
public interface UserMapper {
@Select("SELECT id, name AS ${prefix}username FROM user")
List<User> getAllUsers(@Arg("prefix") String prefix);
}
注
- MyBatis 3.5.4 后 @ConstructorArgs 注解被优化弃用,现在可以直接在最外层使用 @Arg 注解
示例
public interface UserMapper(){
@Arg(column = "id", javaType = Integer.class, id = true),
@Arg(column = "userName", javaType = String.class, id = false),
@Arg(column = "password", javaType = String.class, id = false)}
@Select("select id, userName, password from user")
List<User> selectAll();
}