mybatis 大家常用的持久性框架,昨天无聊挖挖屎山,发现关联查询和不同的使用场景,遂做点笔记,怕老了自己不顶用就忘了。
mybatis 1:N (collection)、1:1(association),分别有两种实现方法 集合嵌套查询(select)、集合嵌套结果(resultMap)。两种方式分别有它们适用的使用场景。
集合嵌套查询(select)属于每次发出的请求sql 都是1+N(主表数据条数)条,一条主表sql,N条子表查询sql,主表sql数据拉大的这时候你感觉效率有点让人头疼,这时候就不得不说一个 fetchType(默认值 true/开启 false) 标签 “按需查询” ,意思说他不会主动去执行第二条子查询语句,只有你在对象时候触发字表对象get属性请求的时候它才会执行子查询sql,这是让我喜欢的它原因之一。
集合嵌套结果(resultMap)属于那种直接处理查询结果集的,查询出一批数据,它会自动帮我自动归类打包装箱。比较适合一次性查询所有关联数据,执行一次sql。
集合嵌套查询(select)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xyc.cloud.dao.IIndicatorTaskDao">
<resultMap id="BaseResultMap" type="com.xyc.cloud.bean.IndicatorTask" >
<result column="task_id" property="taskId" jdbcType="VARCHAR" />
<result column="dept_code" property="deptCode" jdbcType="VARCHAR" />
<result column="dept_name" property="deptName" jdbcType="VARCHAR" />
<result column="type_code" property="typeCode" jdbcType="VARCHAR" />
<result column="type_name" property="typeName" jdbcType="VARCHAR" />
<re