关联查询
association 一对一,多对一
<!-- association
type:指定联合的javaBean对象
property:指定那个属性是联合对象
javaType:指定这个属性对象的类型
autoMapping:自动映射,如果不设置就需要自己手动写映射关系
-->
<resultMap type="bean.Emp" id="myEmp" autoMapping="true">
<association property="dept" javaType="bean.Dept" autoMapping="true">
<!--<id column="deptno" property="deptno"/>
<result column="dname" property="dname"/>
<result column="loc" property="d_loc"/> -->
</association>
</resultMap>
<select id="selectAll" resultMap="myEmp">
select * from emp e inner join
dept d on e.deptno = d.deptno
</select>
<!--
分步查询
select:表明当前属性是调用select指定方法查出的结果
column:指定将哪一列的值传给这个方法
流程:使用select指定的方法,传入column指定的这列参数的值,查出对象,
并封装给property指定的对象
-->
<resultMap type="bean.Emp" id="myEmpByStep" autoMapping="true">
<association property="dept" select="dao.DeptMapper.selectById" column="deptno">
</association>
</resultMap>
<select id="selectAll" resultMap="myEmpByStep">
select * from emp where empno = #{empno}
</select>
延迟加载(两种方式)
<settings>
<!-- 显示的指定每个我们需要更改的配置的值,
即使他是默认的。防止版本更替,带来的问题 -->
<setting name="lazyLoadingEnable" value="true"/>
<setting name="aggressiveLazyLoaing" value="false"/>
</settings>
collection 一对多、多对多
分布查询和延迟加载与association用法相似
<!--
collection:定义关联集合类型的属性的封装规则
ofType:指定集合里面元素的类型
-->
<resultMap type="bean.Dept" id="myDept">
<id column="did" property="deptno"/>
<result column="dname" property="dname"/>
<result column="loc" property="d_loc"/>
<collection property="emp" ofType="bean.Emp" autoMapping="true">
</collection>
</resultMap>
<select id="getDeptAndEmp" resultMap="myDept">
select d.deptno as did
,d.dname as dname
,d.loc as loc
,e.*
from dept d inner join emp e on d.deptno = e.deptno
where d.deptno = #{deptno}
</select>