MyBatis 级联查询
来源:互联网 发布:cup tower软件下载 编辑:程序博客网 时间:2024/06/05 03:16
级联是在resultMap标签中配置。级联不是必须的,级联的好处是获取关联数据十分便捷,但是级联过多会增加系统的复杂度,同事降低系统的性能,次增彼减,所以记录超过3层时,就不要考虑使用级联了,因为这样会造成多个对象的关联,导致系统的耦合、负责和难以维护。
MyBatis中的级联分3种:
1.鉴别器(discriminator)它是一个根据某些条件决定采用具体实现类级联的方案,比如体检根据性别来区分检查项目。
2.一对一(association)
3.一对多(collection)
表模型:
关系:
以雇员表为中心。
雇员表和工牌表一对一关系。
雇员表和员工任务表是一对多关系。
员工任务表和任务表是一对一关系。
每个雇员都会有一个体检表,随着雇员性别不同,会有不同的关联表。
1、实体类:
忽略getter、setter
(1)体检表-父类
public class HealthForm { private Long id; private Long empId; private String heart; private String liver; private String spleen; private String lung; private String kidney; private String note; }
(2)女性体检表
public class FemaleHealthForm extends HealthForm{ private String uterus;}
(3) 男性体检表
public class MaleHealthForm extends HealthForm{ private String prostate;}
(4) 工牌表
public class Employee { private Long id; private String realName; private SexEnum sex=null; private Date brithday; private String mobile; private String email; private String position; private String note; //一对一 private WorkCard workCard; //一对多 private List<EmployeeTask> employeeTaskList=null; }
(5) 任务表
public class Task { private Long id; private String title; private String context; private String note;}
(6) 雇员任务表
public class EmployeeTask { private Long id; private Long empId; private Task task=null; private String taskName; private String note;}
(7) 雇员父类
public class Employee { private Long id; private String realName; private SexEnum sex=null; private Date brithday; private String mobile; private String email; private String position; private String note; //一对一 private WorkCard workCard; //一对多 private List<EmployeeTask> employeeTaskList=null;}
(8) 男雇员
public class MaleEmployee extends Employee{ private MaleHealthForm maleHealthForm=null;}
(9) 女雇员
public class FemaleEmployee extends Employee{ private FemaleHealthForm femaleHealthForm=null;}
2、配置映射文件
<mapper namespace="com.bob.analyst.dao.TaskMapper"> <select id="getTask" parameterMap="long" resultType="com.bob.analyst.model.Task"> select id,title,context,note from tbl_task where id=#{id} </select></mapper>
<mapper namespace="com.bob.analyst.model.WorkCard"> <select id="getWorkCardByEmpId" parameterType="long" resultType="com.bob.analyst.model.WorkCard"> select id,emp_id as empId,real_name as realName, department,mobile,position,note from tbl_work_card where id = #{id} </select></mapper>
<mapper namespace="com.bob.analyst.dao.EmployeeTaskMapper"> <resultMap type="com.bob.analyst.model.EmployeeTask" id="EmployeeTaskMap"> <id column="id" property="id"/> <result column="emp_id" property="empId"/> <result column="task_name" property="taskName"/> <result column="note" property="note"/> <!-- 一对一关联 --> <association property="task" column="task_id" select="com.bob.analyst.dao.getTask"/> </resultMap> <select id="getEmployeeTaskByEmpId" resultMap="EmployeeTaskMap"> select id,emp_id,task_name,note from tbl_employee_task where emp_id=#{empId} </select></mapper>
<mapper namespace="com.bob.analyst.dao.EmployeeTaskMapper"> <select id="getMaleHealthForm" parameterType="long" resultMap=" com.bob.analyst.model.MaleHealthForm"> select id,heart,liver,spleen,lung,kidney,prostate,note from tbl_male_health_from where emp_id=#{id} </select></mapper>
<mapper namespace="com.bob.analyst.dao.FemaleHealthFormMapper"> <select id="getFemaleHealthForm" parameterType="long" resultMap="com.bob.analyst.model.FemaleHealthForm"> select id,heart,liver,spleen,lung,kidney,uterus,note from tbl_female_health_from where emp_id=#{id} </select></mapper>
<mapper namespace="com.bob.analyst.dao.EmployeeMapper"> <resultMap type="com.bob.analyst.model.Employee" id="employee"> <id column="id" property="id"/> <result column="real_name" property="realName"/> <result column="sex" property="sex" typeHandler="com.bob.analyst.util.SexEnum"/> <result column="brithday" property="brithday"/> <result column="mobile" property="mobile"/> <result column="email" property="email"/> <result column="position" property="position"/> <result column="note" property="note"/> <!-- 一对一关联 --> <association property="workCard" column="id" select="com.bob.analyst.dao.WorkCardMapper.getWorkCardByEmpId"/> <!-- 一对多 --> <collection property="employeeTaskList" column="id" select="com.bob.analyst.dao.EmployeeTaskMapper.getEmployeeTaskByEmpId"></collection> <!-- 鉴别器 --> <discriminator javaType="long" column="sex"> <case value="1" resultMap="maleHealthFormMapper"></case> <case value="2" resultMap="femaleHealthFormMapper"></case> </discriminator> </resultMap> <resultMap type="com.bob.analyst.model.FemaleEmployee" id="femaleHealthFormMapper" extends="employee"> <association property="femaleHealthForm" column="id" select="com.bob.analyst.dao.FemaleHealthFormMapper.getFemaleHealthForm"></association> </resultMap> <resultMap type="com.bob.analyst.model.MaleEmployee" id="maleHealthFormMapper" extends="employee"> <association property="maleHealthForm" column="id" select="com.bob.analyst.dao.MaleHealthFormMapper.getMaleHealthForm"></association> </resultMap> <select id="getEmployee" parameterType="long" resultMap="employee"> select id,real_name as realName,sex,birthday,mobile,email,position,note from tbl_employee where id=#{id} </select></mapper>
阅读全文
0 0
- mybatis 级联查询
- mybatis特性--- 级联查询
- MyBatis 的级联查询
- mybatis级联查询
- Mybatis级联查询
- mybatis级联查询
- mybatis级联查询
- MyBatis 级联查询
- mybatis级联查询
- Mybatis 中级联查询方式
- mybatis同表级联查询
- Mybatis级联查询和缓存
- MyBatis总结(2)--级联查询
- MyBatis 级联查询,一对一,一对多
- mybatis级联查询的新写法
- Mybatis级联删除、修改、查询问题
- mybatis学习-- 级联查询 注解式写法
- Mybatis级联查询对象为null
- 苹果官方承认iPhone8有重大瑕疵,买到就坑了!
- 扎心海报被疯传!支付宝:这锅不背 不是我做的!
- Android的init过程(二):初始化语言(init.rc)解析
- Mybatis-Generator
- VC windows 执行进程的方法 源码
- MyBatis 级联查询
- inline内联函数(声明前加inline还是定义前加inline)
- 微信开放平台 解密component_verify_ticket 交流 学习
- English in September(2017)
- Moto X Force公布系统源代码:ROM开发者可以动工了
- java 中返回状态码
- java 生成动态word文档
- [S3-E429]CSS布局说——可能是最全的
- [S3-E422]你不知道的CSS(二)