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();
                }
            }
        }
        
  • 相关阅读:
    springboot使用war包部署到外部tomcat
    html只允许输入的数据校验,只允许输入字母汉字数字等
    转:执行ajax加载页面中的js
    php 解析xml 的四种方法(转)
    Php 获取xml中的节点值
    php中DOMDocument简单用法(XML创建、添加、删除、修改)
    PHP对XML文件操作详细
    转载 PHP 程序员学数据结构与算法之《栈》
    php读取二进制流(C语言结构体struct数据文件)的深入解析
    关于php和C语言接口的结构传递问题,udp,tcp通信
  • 原文地址:https://www.cnblogs.com/daxiong225/p/9902267.html
Copyright © 2011-2022 走看看