什么是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,分步查询以及延迟加载