数据库中的结构:
实体类:
最终结果:
一:级联属性查询
自定义resultMap中可以这样设置:
<resultMap id="empAndDeptResultMapOne" type="Emp"><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><result property="dept.did" column="did"></result><result property="dept.deptName" column="dept_name"></result></resultMap>
二:association
在resultMap映射中增加association属性
<resultMap id="empAndDeptResultMapTwo" type="Emp"><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><!--association 处理多对一的映射关系property表示需要处理映射关系的属性名javaType表示该属性的类型--><association property="dept" javaType="Dept"><id property="did" column="did"></id><result property="deptName" column="dept_name"></result></association></resultMap>
三:分步查询
查询对应eid的信息
<select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap">select * from t_emp where eid = #{eid}</select>
根据在第一个sql语句中的did来查询t_dept中的信息
其中resultMap中为:
<resultMap id="empAndDeptByStepResultMap" type="Emp"><id property="eid" column="eid"></id><result property="empName" column="emp_name"></result><result property="age" column="age"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><!--select:设置分步查询的唯一标识(namespace)的全类名column:设置分步查询的条件<property:需要处理的实体类属性--><association property="dept"select="mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"column="did"></association></resultMap>
将从第一个sql语句中得到的did传入这个唯一标识
<!--Dept getEmpAndDeptByStepTwo(Integer did);--><select id="getEmpAndDeptByStepTwo" resultType="Dept">select * from t_dept where did = #{did}</select>
首先查找eid对应的信息其中包含did,然后在根据did来查询部门中的信息。共两个sql语句
在结构上需要注意的地方,第二步的sql语句如何找到:
在resultMap映射中这部分:<association property="dept"
select="mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"
column="did"></association>
来将第一步查询到的did传入到第二步的sql语句