跳到主要内容

映射结果集

在 Mapper 文件中映射查询结果可以使用 <resultMap> 或 <entity>,区别是:

  • <resultMap>,标签适用于对 SQL 查询结果的映射。
  • <entity>,适用于对一个具体表的映射。
resultMap 和 entity 如何选择?
  • 在有些时候 resultMap、entity 区分并不明显,例如:针对同一个表的不同条件查询或者查询这个表的不同列。
    • entity 适合查询结果中的列来自同一个表,resultMap 适合来自多个表的列。
  • 如果使用 构造器 API 则必须使用 entity 来映射表或者使用 对象映射 相关注解映射表。
  • 如果查询列语句中包含(别名、函数、case、等特殊情况时)或者查询的列来自不同的表,这时 resultMap 是最佳选择。

<resultMap> 标签

定义和使用 resultMap
<resultMap id="user_resultMap" type="com.example.dto.UserBean">
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="age" property="age"/>
<result column="create_time" property="createTime"/>
</resultMap>

<select id="queryById" resultMap="user_resultMap">
select
id, name, age, create_time
from
users
where
id = #{id}
</select>

标签属性

<resultMap> 标签

属性名描述
id可选 如果为空那么将会以 type 属性为替代。主要是用于标识。
type必选 类型全名,用于决定映射到的具体类型。
caseInsensitive可选 在处理映射列名和属性名时是否对大小写不敏感,默认是 true 不敏感。对于某些数据库查询结果始终返回大写,利用这个功能可以方便的映射到属性上。
autoMapping可选 用于决定是否进行 自动映射。默认是 true 自动映射。
mapUnderscoreToCamelCase可选 配合 autoMapping 使用,用于决定属性名在映射到列名时,是否按照驼峰命名法转换为下划线命名法,例如:属性名 createTime 被转换为 create_time。默认 false 不转换

<result> 标签

属性名描述
column必选 查询结果的列名。
property必选 映射类型的属性名。
javaType可选 通常会自动识别类型,除非属性是一个抽象类或者接口,则需要配置具体的实现类。
jdbcType可选 默认按照 Java 和 JDBC 类型关系 进行映射,可通过该属性来强制指定 jdbcType。
typeHandler可选 根据 类型处理器 所描述的优先级进行查找,可通过该属性强制指定一个具体的 typeHandler。