MyBatis 的 id 和 result 标签均是将一个列的值映射到一个简单数据类型(String, int, double, Date 等)的属性或字段。示例如下:
<id property="id" column="post_id"/> <result property="subject" column="post_subject"/>
id 和 result 标签是结果映射的基础。这两者之间的唯一不同是,id 标签对应的属性会被标记为对象的标识符,在比较对象实例时使用。 这样可以提高整体的性能,尤其是进行缓存和嵌套结果映射(也就是连接映射)的时候。
Id 和 Result 的属性:
属性 | 描述 |
---|---|
property | 映射到列结果的字段或属性。如果 JavaBean 有这个名字的属性(property),会先使用该属性。否则 MyBatis 将会寻找给定名称的字段(field)。无论是哪一种情形,你都可以使用常见的点式分隔形式进行复杂属性导航。比如,你可以这样映射一些简单的东西:“username”,或者映射到一些复杂的东西上:“address.street.number”。 |
column | 数据库中的列名,或者是列的别名。一般情况下,这和传递给 resultSet.getString(columnName) 方法的参数一样。 |
javaType | 一个 Java 类的全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。然而,如果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证行为与期望的相一致。 |
jdbcType | JDBC 类型,所支持的 JDBC 类型参见这个表格之后的“支持的 JDBC 类型”。只需要在可能执行插入、更新和删除的且允许空值的列上指定 JDBC 类型。这是 JDBC 的要求而非 MyBatis 的要求。如果你直接面向 JDBC 编程,你需要对可以为空值的列指定这个类型。 |
typeHandler | 我们在前面讨论过默认的类型处理器。使用这个属性,你可以覆盖默认的类型处理器。这个属性值是一个类型处理器实现类的全限定名,或者是类型别名。 |
下面将演示怎样使用 id 和 result 标签映射一个 JavaBean,如下:
(1)结果映射XML代码:
<!-- 显示结果集映射 --> <resultMap id="RESULT_MAP" type="com.hxstrive.mybatis.resultmap.demo1.UserBean"> <id column="user_id" jdbcType="INTEGER" property="userId" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="sex" jdbcType="VARCHAR" property="sex" /> <result column="age" jdbcType="INTEGER" property="age" /> </resultMap> <select id="findAll" resultMap="RESULT_MAP"> select `user_id`, `name`, `sex`, `age` from `user` </select>
(2)实体 UserBean 内容如下:
public class UserBean { private Integer userId; private String name; private String sex; private Integer age; // 忽略 getter 和 setter 方法 }
复制的官方文档,屁用没有
多谢指正,后续将改进