MyBatis测试resultMap,分步查询以及延迟加载

  

什么是resultMap ?

  

 resultMap即自定义结果集映射规则,之前我们使用的resultType是MyBatis为我们提供的默认映射规则,使用方法如下:

  
 <代码> & lt;映射器命名空间=癱om.zgz.MyBatis.dao.DeptMapper”比;
  & lt;选择id=" getDeptById " resultType=癱om.zgz.MyBatis.bean.Dept”比;
  选择id, dept_name deptName从tbl_dept id=# {id}
  & lt;/select>
  & lt;/mapper>  
  

 那么resultMap的作用是什么呢?之前我们在处理数据库中字段与javabean中的属性不一致的问题时,采用的方法是起别名或者开启mybatis的自动驼峰映射,现在可以使用resultMap来做,另外可以使用解决级联查询的问题

  

如何使用resultMap ?

  

 我们现在新建一张员工部门表,要求是在我们查询员工的同时查询出员工对应的部门?
首先给出对应的JavaBean :<强>

  
 <代码>公共类部门{
  私人整数id;
  私人字符串deptName;//获取、设置tostring ()……
  
  } 
  

写上相应的<>强映射器:

  
 <代码> & lt;映射器命名空间=癱om.zgz.MyBatis.dao.DeptMapper”比;
  & lt;选择id=" getDeptById " resultType=癱om.zgz.MyBatis.bean.Dept”比;
  选择id, dept_name deptName从tbl_dept id=# {id}
  & lt;/select>
  & lt;/mapper>  
  

在<强> SQL映射文件中进行配置:

  
 <代码> & lt; ?xml version=" 1.0 " encoding=" utf - 8 " ?比;
  & lt; !文档类型映射器
  公众”——//mybatis.org//DTD Mapper 3.0//EN”
  “http://mybatis.org/dtd/mybatis-3-mapper.dtd”在
  & lt;映射器命名空间=癱om.zgz.MyBatis.dao.EmployeeMapperPlus”比;
  
  & lt; !
  测试resultMap(自定义某个javabean的封装规则)
  类型:自定义规则的java类型
  id:方便引用,唯一
  ——比;
  & lt; resultMap类型=癱om.zgz.MyBatis.bean。员工" id=" MyEmp”比;
  & lt; !
  id:指定主键的封装规则,底层会有优化
  专栏:指定哪一列
  财产:指定对应的javabean属性
  ——比;
  & lt; id列=癷d”属性=" id "/比;
  & lt; !——结果是指定普通列的封装规则——比;
  & lt;结果列=發ast_name”属性="姓"/比;
  & lt; !——其他的不指定会默认封装,最好指定一下——比;
  & lt;结果列=暗缱佑始笔粜?"电子邮件"/比;
  & lt;结果列=靶员稹笔粜?"性别"/比;
  & lt;/resultMap>
  
  & lt; !——resultMap:自定义结果集映射规则——比;
  & lt;选择id=" getEmployeeByGender " resultMap=癕yEmp”比;
  select * from tbl_employee性别=#{性别}
  & lt;/select>
  
  & lt; !——resultMap级联查询——比;
  & lt; !——第一种方法:使用级联属性封装结果集——比;
  & lt; resultMap类型=癱om.zgz.MyBatis.bean。员工" id=" MySecond”比;
  & lt; id列=癷d”属性=" id "/比;
  & lt;结果列=發ast_name”属性="姓"/比;
  & lt;结果列=靶员稹笔粜?"性别"/比;
  & lt;结果列=暗缱佑始笔粜?"电子邮件"/比;
  
  & lt;结果列=啊笔粜?" dept.id "/比;
  & lt;结果列=癲ept_name”属性=" dept.deptName "/比;
  & lt;/resultMap>
  & lt; !——第二种方法:使用协会定义单个对象的封装——比;
  & lt; resultMap类型=癱om.zgz.MyBatis.bean。员工" id=" MyThird”比;
  & lt; id列=癷d”属性=" id "/比;
  & lt;结果列=發ast_name”属性="姓"/比;
  & lt;结果列=靶员稹笔粜?"性别"/比;
  & lt;结果列=暗缱佑始笔粜?"电子邮件"/比;
  
  & lt; !
  协会:可以指定联合的javabean对象
  财产:指定哪个属性是联合的对象
  将javaType:指定这个属性的类型(不能省略)
  ——比;
  & lt;协会财产="部门"将javaType=癱om.zgz.MyBatis.bean.Dept”比;
  & lt; id列=啊笔粜?" id "/比;
  & lt;结果列=癲ept_name”属性=" deptName "/比;
  & lt;/association>
  & lt;/resultMap>
  & lt; !——第三种方法:分步查询——比;
  & lt; resultMap类型=癱om.zgz.MyBatis.bean。员工" id=" MyFourth”比;
  & lt; id列=癷d”属性=" id "/比;
  & lt;结果列=發ast_name”属性="姓"/比;
  & lt;结果列=靶员稹笔粜?"性别"/比;
  & lt;结果列=暗缱佑始笔粜?"电子邮件"/比;
  
  & lt; !
  使用协会进行分步查询:
  1. 先按照员工id查询员工信息
  2. 根据查询到的员工信息的d_id值去查出部门信息
  3.部门设置到员工里面
  协会定义关联对象的封装规则
  选择:表明当前属性是调用选择指定的方法查出的结果
  专栏:指定将哪一列的值传给这个方法
  流程:(理解)
  使用选择制定的方法,传入列指定的这列参数的值查出对象,并封装给财产指定的属性
  ——比;
  & lt;协会财产="部门"
  select=" com.zgz.MyBatis.dao.DeptMapper。getDeptById d_id“列=比;
  & lt;/association>
  & lt;/resultMap>
  
  & lt; !——场景一:查询员工的同时查询出员工对应的部门——比;
  & lt;选择id=" getEmpAndDept " resultMap=癕yThird”比;
  选择e。id id, e。last_name last_name e。电子邮件电子邮件,e。性别性别、e。d_id d_id d。id, d.dept_name dept_name
  从tbl_employee e, tbl_dept d
  在e。d_id=d。id和e。id=# {id}
  & lt;/select>
  
  & lt; !——分步查询——比;
  & lt;选择id=" getEmpByIdStep " resultMap=癕yFourth”比;
  select *从tbl_employee id=# {id}
  & lt;/select>
  & lt; !
  分步查询可以使用延迟加载(按需加载)(懒加载):
  员工===?
  要查询部门,我们每次查询员工时都将一起查询出来
  为了达到部门信息在我们使用的时候在查询出来的要求,我们可以在分步查询的基础上加两个配置(在mybatis中的主配置文件中)
  ——比;
  
  & lt;/mapper> 

MyBatis测试resultMap,分步查询以及延迟加载