一、resultMap 自定义映射
1、resultMap 是什么
resultMap 是自定义的映射关系,可实现高级结果集映射。
注意:resultMap 不能与 resultType 同时使用。
2、子标签说明
constructor - 类在实例化时, 用来注入结果到构造方法中
– idArg - ID 参数; 标记结果作为 ID 可以帮助提高整体效能
– arg - 注入到构造方法的一个普通结果
id : 一个 ID 结果; 标记结果作为 ID 可以帮助提高整体效能
result – 注入到字段或 JavaBean 属性的普通结果
association – 一个复杂的类型关联;许多结果将包成这种类型
– 嵌入结果映射 – 结果映射自身的关联,或者参考一个
collection – 复杂类型的集
– 嵌入结果映射 – 结果映射自身的集,或者参考一个
discriminator – 使用结果值来决定使用哪个结果映射
– case – 基于某些值的结果映射
嵌入结果映射 – 这种情形结果也映射它本身,因此可以包含很多相同的元素,或者它可以参照一个外部的结果映射。
3、id & result
id 和 result 映射一个单独列的值到简单数据类型(字符串,整型,双精度浮点数,日期等)的属性或字段。
id:用于设置主键的映射关系;
result:用于设置非主键的映射关系;
常用属性:
property:映射到列结果的字段或属性。例如:"username" 或 "address.street.number"
column:数据表的列名,通常和 resultSet.getString(columnName) 的返回值一致
JavaType:一个 Java 类的完全限定名,或一个类型别名,如果映射到一个 JavaBean,MyBatis 通常可以断定类型(类型推断机制)
JdbcType:JDBC 类型是仅仅需要插入、更新和删除操作可能为空的列进行处理
typeHandler:类型处理器。使用这个属性,可以覆盖默认的类型处理器。这个属性值是类的完全限定名或者是一个类型处理器的实现。或者是类型别名。
代码示例:
<!--
resultMap:自定义结果集映射规则
自定义某个 JavaBean的封装规则
type:自定义规则的java类型
id:唯一id方便引用
-->
<resultMap id="MySimpleEmp" type="com.njf.mybatis.bean.Employee">
<!--
指定主键列的封装规则
id 定义主键会底层优化:
column:指定哪一列
properties:指定对应的 javaBean 属性
-->
<id column="id" property="id"/>
<!-- 定义普通列封装规则 -->
<result column="last_name" property="lastName"/>
<!-- 其他不指定的列会自动封装,我们只要写 resultMap就把全部的映射规则都写上 -->
<result column="email" property="email" />
<result column="gender" property="gender"/>
</resultMap>
<!--
public Employee getEmpById(Integer id);
-->
<select id="getEmpById" resultMap="MySimpleEmp">
select * from tbl_employee
where id = #{id}
</select>
二、association
association:复杂对象映射,POJO中的属性可能会是一个对象
1、使用联合查询、并以级联属性的方法封装对象
2、使用association标签定义对象的封装规则(嵌套结果集)
3、association -分段查询
select:调用目标的方法查询当前属性的值
column:将指定列的值传入目标方法
4、association-分段查询&延迟加载
开启延迟加载和属性按需加载
旧版本的 MyBatis 需要额外的支持包:
asm-3.3.1.jar
cglib-2.2.2.jar
三、collection
1、Collection-集合类型&嵌套结果集
2、Collection-分步查询&延迟加载