zoukankan      html  css  js  c++  java
  • Mybatis--级联(一)

    级联是resultMap中的配置。

    级联分为3种

    • 鉴别器(discrimination):根据某些条件采用具体实现具体实现类级联,如体检表根据性别去区分
    • 一对一:学生和学生证
    • 一对多:班主任和学生。

     

    bean:
    public class Employee {
    
        private Long id;
        private String realName;
        private SexEnum sex = null;
        private Date birthday;
        private String mobile;
        private String email;
        private String position;
        private String note;
        //工牌按一对一级联
        private WorkCard workCard;
        //雇员任务,一对多级联
        private List<EmployeeTask> employeeTaskList = null;
        
        public Long getId() {
            return id;
        }
        public void setId(Long id) {
            this.id = id;
        }
        public String getRealName() {
            return realName;
        }
        public void setRealName(String realName) {
            this.realName = realName;
        }
        public SexEnum getSex() {
            return sex;
        }
        public void setSex(SexEnum sex) {
            this.sex = sex;
        }
        public Date getBirthday() {
            return birthday;
        }
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
        public String getMobile() {
            return mobile;
        }
        public void setMobile(String mobile) {
            this.mobile = mobile;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
        public String getPosition() {
            return position;
        }
        public void setPosition(String position) {
            this.position = position;
        }
        public String getNote() {
            return note;
        }
        public void setNote(String note) {
            this.note = note;
        }
        public WorkCard getWorkCard() {
            return workCard;
        }
        public void setWorkCard(WorkCard workCard) {
            this.workCard = workCard;
        }
        public List<EmployeeTask> getEmployeeTaskList() {
            return employeeTaskList;
        }
        public void setEmployeeTaskList(List<EmployeeTask> employeeTaskList) {
            this.employeeTaskList = employeeTaskList;
        }
    }
    
    public class FemaleEmployee extends Employee {
    
        private FemaleHealthForm femaleHealthForm = null;
    
        public FemaleHealthForm getFemaleHealthForm() {
            return femaleHealthForm;
        }
    
        public void setFemaleHealthForm(FemaleHealthForm femaleHealthForm) {
            this.femaleHealthForm = femaleHealthForm;
        }
    }
    
    public class MaleEmployee extends Employee {
    
        private MaleHealthForm maleHealthForm = null;
    
        public MaleHealthForm getMaleHealthForm() {
            return maleHealthForm;
        }
    
        public void setMaleHealthForm(MaleHealthForm maleHealthForm) {
            this.maleHealthForm = maleHealthForm;
        }
    }
    
    public class WorkCard {
        private Long id;
        private Long empId;
        private String realName;
        private String department;
        private String mobile;
        private String position;
        private String note;
    
    }
    
    public class EmployeeTask {
        private Long id;
        private Long empId;
        private Task task = null;
        private String taskName;
        private String note;
    }
    
    mapper:
    public interface EmployeeMapper {
    
        public Employee getEmployee(Long id);
        
        public Employee getEmployee2(Long id);
    }
    
    XML:
    <mapper namespace="com.ssm.chapter5.mapper.EmployeeMapper">
        <resultMap type="com.ssm.chapter5.pojo.Employee" id="employee">
            <id column="id" property="id" />
            <result column="real_name" property="realName" />
            <result column="sex" property="sex"
                typeHandler="com.ssm.chapter5.typeHandler.SexTypeHandler" />
            <result column="birthday" property="birthday" />
            <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.ssm.chapter5.mapper.WorkCardMapper.getWorkCardByEmpId" /> //应用另外一个 xml map中 id为"getWorkCardByEmpId"的select
            <collection property="employeeTaskList" column="id"//一对多
                fetchType="eager"
                select="com.ssm.chapter5.mapper.EmployeeTaskMapper.getEmployeeTaskByEmpId" />
            <discriminator javaType="long" column="sex">
                <case value="1" resultMap="maleHealthFormMapper" />//鉴别器级联
                <case value="2" resultMap="femaleHealthFormMapper" />
            </discriminator>
        </resultMap>
    
        <resultMap type="com.ssm.chapter5.pojo.FemaleEmployee" id="femaleHealthFormMapper"
            extends="employee">
            <association property="femaleHealthForm" column="id"
                select="com.ssm.chapter5.mapper.FemaleHealthFormMapper.getFemaleHealthForm" />
        </resultMap>
    
        <resultMap type="com.ssm.chapter5.pojo.MaleEmployee" id="maleHealthFormMapper"
            extends="employee">
            <association property="maleHealthForm" column="id"
                select="com.ssm.chapter5.mapper.MaleHealthFormMapper.getMaleHealthForm" />
        </resultMap>
    
        <select id="getEmployee" parameterType="long" resultMap="employee">
            select
            id, real_name as realName, sex, birthday, mobile, email, position,
            note from t_employee where id = #{id}
        </select>
    
        <resultMap id="employee2" type="com.ssm.chapter5.pojo.Employee">
            <id column="id" property="id" />
            <result column="real_name" property="realName" />
            <result column="sex" property="sex"
                typeHandler="com.ssm.chapter5.typeHandler.SexTypeHandler" />
            <result column="birthday" property="birthday" />
            <result column="mobile" property="mobile" />
            <result column="email" property="email" />
            <result column="position" property="position" />
            <association property="workCard" javaType="com.ssm.chapter5.pojo.WorkCard"/一对一级联
                column="id">
                <id column="wc_id" property="id" />
                <result column="id" property="empId" />
                <result column="wc_real_name" property="realName" />
                <result column="wc_department" property="department" />
                <result column="wc_mobile" property="mobile" />
                <result column="wc_position" property="position" />
                <result column="wc_note" property="note" />
            </association>
            <collection property="employeeTaskList" ofType="com.ssm.chapter5.pojo.EmployeeTask"//一对多级联
                column="id">
                <id column="et_id" property="id" />
                <result column="id" property="empId" />
                <result column="task_name" property="taskName" />
                <result column="note" property="note" />
                <association property="task" javaType="com.ssm.chapter5.pojo.Task"
                    column="et_task_id">
                    <id column="t_id" property="id" />
                    <result column="t_title" property="title" />
                    <result column="t_context" property="context" />
                    <result column="t_note" property="note" />
                </association>
            </collection>
            <discriminator javaType="int" column="sex"> //sex鉴别器级联male/female
                <case value="1" resultMap="maleHealthFormMapper2" />
                <case value="2" resultMap="femaleHealthFormMapper2" />
            </discriminator>
        </resultMap>
    
    
        <resultMap type="com.ssm.chapter5.pojo.MaleEmployee" id="maleHealthFormMapper2"
            extends="employee2">
            <association property="maleHealthForm" column="id"
                javaType="com.ssm.chapter5.pojo.MaleHealthForm">
                <id column="h_id" property="id" />
                <result column="h_heart" property="heart" />
                <result column="h_liver" property="liver" />
                <result column="h_spleen" property="spleen" />
                <result column="h_lung" property="lung" />
                <result column="h_kidney" property="kidney" />
                <result column="h_prostate" property="prostate" />
                <result column="h_note" property="note" />
            </association>
        </resultMap>
    
        <resultMap type="com.ssm.chapter5.pojo.FemaleEmployee" id="femaleHealthFormMapper2"
            extends="employee2">
            <association property="femaleHealthForm" column="id"
                javaType="com.ssm.chapter5.pojo.FemaleHealthForm">
                <id column="h_id" property="id" />
                <result column="h_heart" property="heart" />
                <result column="h_liver" property="liver" />
                <result column="h_spleen" property="spleen" />
                <result column="h_lung" property="lung" />
                <result column="h_kidney" property="kidney" />
                <result column="h_uterus" property="uterus" />
                <result column="h_note" property="note" />
            </association>
        </resultMap>
    
        <select id="getEmployee2" parameterType="long" resultMap="employee2">
            select
            emp.id, emp.real_name, emp.sex, emp.birthday,
            emp.mobile, emp.email,
            emp.position, emp.note,
            et.id as et_id, et.task_id as et_task_id,
            et.task_name as et_task_name,
            et.note as et_note,
            if (emp.sex = 1,
            mhf.id, fhf.id) as h_id,
            if (emp.sex = 1, mhf.heart, fhf.heart) as
            h_heart,
            if (emp.sex = 1, mhf.liver, fhf.liver) as h_liver,
            if (emp.sex
            = 1, mhf.spleen, fhf.spleen) as h_spleen,
            if (emp.sex = 1, mhf.lung,
            fhf.lung) as h_lung,
            if (emp.sex = 1, mhf.kidney, fhf.kidney) as
            h_kidney,
            if (emp.sex = 1, mhf.note, fhf.note) as h_note,
            mhf.prostate
            as h_prostate, fhf.uterus as h_uterus,
            wc.id wc_id, wc.real_name
            wc_real_name, wc.department wc_department,
            wc.mobile wc_mobile,
            wc.position wc_position, wc.note as wc_note,
            t.id as t_id, t.title as
            t_title, t.context as t_context, t.note as t_note
            from t_employee emp
            left join t_employee_task et on emp.id = et.emp_id
            left join
            t_female_health_form fhf on emp.id = fhf.emp_id
            left join
            t_male_health_form mhf on emp.id = mhf.emp_id
            left join t_work_card wc
            on emp.id = wc.emp_id
            left join t_task t on et.task_id = t.id
            where
            emp.id = #{id}
        </select>
    </mapper>

       test:

    public static void testGetEmployee() {
            SqlSession sqlSession = null;
            try {
                sqlSession = SqlSessionFactoryUtils.openSqlSession();
                EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
                Employee employee = employeeMapper.getEmployee(1L);
                System.out.println(employee.getWorkCard().getPosition());
            } catch(Exception ex) {
                ex.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
        
        public static void testGetEmployee2() {
            SqlSession sqlSession = null;
            try {
                sqlSession = SqlSessionFactoryUtils.openSqlSession();
                EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
                Employee employee = employeeMapper.getEmployee2(1L);
                System.out.println(employee.getWorkCard().getPosition());
            } catch(Exception ex) {
                ex.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
        
  • 相关阅读:
    【Java EE 学习 81】【CXF框架】【CXF整合Spring】
    【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
    【Java EE 学习 80 上】【WebService】
    【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
    【Java EE 学习 79 上】【mybatis 基本使用方法】
    【Java EE 学习 78 下】【数据采集系统第十天】【数据采集系统完成】
    【Java EE 学习 78 中】【数据采集系统第十天】【Spring远程调用】
    【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】
    【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】
    【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】
  • 原文地址:https://www.cnblogs.com/daxiong225/p/9902267.html
Copyright © 2011-2022 走看看