多对一
在员工实体类中加入实体类部门属性
Dept dept;
查询员工信息以及员工所对应的部门信息
方式一:级联方式处理映射关系
<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> <!--Emp getEmpAndDeptByEid(@Param("eid") int eid);--> <select id="getEmpAndDeptByEid" resultMap="empAndDeptResultMapOne"> select * from t_emp left join t_dept on t_emp.did=t_dept.did where t_emp.eid=#{eid} </select>
方式二:使用association处理映射关系
association专门处理多对一的映射关系
* property:表示需要处理的多对一关系的属性名
* javaType:表示该属性的类型
<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="dept" javaType="Dept"> <id property="did" column="did"></id> <result property="deptName" column="dept_name"></result> </association> </resultMap> <!--Emp getEmpAndDept(@Param("eid") int eid);--> <select id="getEmpAndDept" resultMap="empAndDeptResultMapTwo"> select * from t_emp left join t_dept on t_emp.eid=t_dept.did where t_emp.eid=#{eid} </select>
方式三:分步查询
通过分步查询(常用):必须在核心配置文件中配置核心配置信息(将下划线映射为驼峰的那个)
* 好处:
* 可以实现延迟加载,在mybatis中默认是不加载的
核心配置信息:
<settings> <!-- 将下划线自动映射为驼峰emp_name对应empName--> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings>
分为两步
第一步:查询员工信息
select:设置分布查询的sql的唯一标识(namespacesqlID或mapper接口的全类名.方法名
column:设置分步查询的条件
property:处理的实体中的多对一的属性
<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:设置分布查询的sql的唯一标识(namespacesqlID或mapper接口的全类名.方法名 column:设置分步查询的条件 property:处理的实体中的多对一的属性 --> <association property="dept" select="com.li.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo" column="did"></association> </resultMap> <!-- Emp getEmpAndDept(@Param("eid") Integer eid);--> <select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap"> select * from t_emp where eid=#{eid} </select>
第二步:查询部门信息
<!-- Dept getEmpAndDeptByStepTwo(@Param("did") Integer did); --> <select id="getEmpAndDeptByStepTwo" resultType="Dept"> select * from t_dept where did =#{did} </select>
一对多
在部门实体类中加入员工类构成的集合
private List<Emp> emps;
方式一:collection
collection:用来处理一对多的映射关系
property:处理一对多关系的属性
ofType:表示该属性对应的集合中存储的数据的类型
<resultMap id="deptAndEmpResultMap" type="Dept"> <id property="did" column="did"></id> <result property="deptName" column="dept_name"></result> <!-- collection:用来处理一对多的映射关系 property:处理一对多关系的属性 ofType:表示该属性对应的集合中存储的数据的类型 --> <collection property="emps" ofType="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> </collection> </resultMap> <!--Dept getDeptAndEmp(@Param("did") Integer did);--> <select id="getDeptAndEmp" resultMap="deptAndEmpResultMap"> select * from t_dept left join t_emp on t_dept.did=t_emp.did where t_dept.did=#{did} </select>
方式二:分步查询
第一步:查询部门信息
<resultMap id="deptAndEmpByStepResultMap" type="Dept"> <id property="did" column="did"></id> <result property="deptName" column="dept_name"></result> <collection property="emps" select="com.li.mybatis.mapper.EmpMapper.getDeptAndEmpByStepTwo" column="did"> </collection> </resultMap> <!-- Dept getDeptAndEmpByStepOne(@Param("did") Integer di);--> <select id="getDeptAndEmpByStepOne" resultMap="deptAndEmpByStepResultMap"> select * from t_dept where did=#{did} </select>
第二步:查询员工信息
<!-- List<Emp> getDeptAndEmpByStepTwo(@Param("did") Integer did); --> <select id="getDeptAndEmpByStepTwo" resultType="Emp"> select * from t_emp where did =#{did} </select>