构造方法(@ConstructorArgs @Arg)

Exisi 2021-03-27 07:45:02
Categories: Tags:
  • 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();

}