• Mybatis3.1-[tp_36-37]-_映射文件_select_resultMap关联查询__分步查询传递多列值&fetchType_discriminator鉴别器


    _分步查询传递多列值&fetchType_discriminator鉴别器

    笔记要点
    出错分析与总结

    Department.java  bean

    public class Department {
        private Integer id;
        private String departmentName;
        private List<Employee> emps;
    
    }

    DepartmentMapper.xml

    <?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.dao.DepartmentMapper">
        <!--public Department getDeptById(Integer id);-->
        <select id="getDeptById" resultType="com.bean.Department">
            select id,dept_name departmentName from tbl_dept
            where id=#{id}
        </select>
    <!--==========================================================================================-->
        <!--
        public class Department {
        private Integer id;
        private String departmentName;
        private List<Employee> emps;
        }
        JavaBean中:   did  dept_name   ||   eid  last_name   email          gender
     -->
        <!--public Department getDeptByIdPlus(Integer id);-->
        <!--进行collection的联合查询/ 分步查询和延迟查询 -->
        <resultMap id="MyDept" type="com.bean.Department">
            <id column="did" property="id"/>
            <result column="dept_name" property="departmentName"/>
    
            <!--
            collection 用于定义关联集合类型的属性的封装规则!
                ofType用于指定集合中的类型;-->
            <collection property="emps" ofType="com.bean.Employee">
                <id column="eid" property="id"/>
                <result column="last_name" property="lastName"/>
                <result column="email" property="email"/>
                <result column="gender" property="gender"/>
            </collection>
    
        </resultMap>
        <select id="getDeptByIdPlus" resultMap="MyDept">
             SELECT d.id did,d.dept_name dept_name,e.id eid,e.last_name last_name,e.email email,gender
            FROM tbl_dept d LEFT JOIN tbl_employee e ON d.id=e.d_id
            WHERE d.id=#{id};
    
        </select>
        <!--========================================-->
    
        <!--Department中有属性: private List<Employee> emps;
        public Department getDeptByIdStep(Integer id);  //执行Collection 的分步查询-->
    
        <resultMap id="MyDeptStep" type="com.bean.Department">
            <id column="id" property="id"/>
            <result column="detp_name" property="departmentName"/>
            <collection property="emps" select="com.dao.EmployeeMapperPlus.getEmpsByDeptId"
                column="{deptId=id}" fetchType="lazy">
            </collection>
        </resultMap>
    
        <select id="getDeptByIdStep" resultMap="MyDeptStep">
           select id,dept_name departmentName from tbl_dept
            where id=#{id}
        </select>
        <!--=======================================-->
        <!--扩展,将多列的值传递过去,封装成map进行传递!
            column="{key1=列1,key2=列2}"
            fetchType="lazy" ,标识使用延迟加载;
            -lazy: 延迟;
            -eager:立即;
        -->
    
    </mapper>

    测试

    public class test_tp36 {
        public SqlSessionFactory getSqlSessionFactory() throws IOException {
            String resource = "mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            return new SqlSessionFactoryBuilder().build(inputStream);
        }
        @Test
        public void test08() throws Exception {
            SqlSession openSession = getSqlSessionFactory().openSession();
            try {
                EmployeeMapperPlus mapper = openSession.getMapper(EmployeeMapperPlus.class);
                System.out.println("---tp_37-使用鉴别器-");
                Employee emp = mapper.getEmpByIdStep(1);  //测试为女生 ,gender=0
                System.out.println(emp);
    
                emp = mapper.getEmpByIdStep(4);  //测试为男生,gender=1
                 System.out.println(emp);
    
                openSession.commit();//默认是不自动提交数据的,需要我们自己手动提交
            } finally {
                openSession.close();
            }
        }
    }

    测试结果:

    ---tp_37-使用鉴别器-
    DEBUG 12-04 13:10:50,471 ==>  Preparing: select id,last_name,gender,email,d_id from tbl_employee where id = ?   (BaseJdbcLogger.java:145) 
    DEBUG 12-04 13:10:50,488 ==> Parameters: 1(Integer)  (BaseJdbcLogger.java:145) 
    DEBUG 12-04 13:10:50,498 <==      Total: 1  (BaseJdbcLogger.java:145) 
    Employee{id=1, lastName='jerry', email='jerry', gender='1', dept=null}
    DEBUG 12-04 13:10:50,499 ==>  Preparing: select id,last_name,gender,email,d_id from tbl_employee where id = ?   (BaseJdbcLogger.java:145) 
    DEBUG 12-04 13:10:50,499 ==> Parameters: 4(Integer)  (BaseJdbcLogger.java:145) 
    DEBUG 12-04 13:10:50,558 <==      Total: 1  (BaseJdbcLogger.java:145) 
    DEBUG 12-04 13:10:50,558 ==>  Preparing: select id,dept_name departmentName from tbl_dept where id=?   (BaseJdbcLogger.java:145) 
    DEBUG 12-04 13:10:50,558 ==> Parameters: 2(Integer)  (BaseJdbcLogger.java:145) 
    DEBUG 12-04 13:10:50,561 <==      Total: 1  (BaseJdbcLogger.java:145) 
    Employee{id=4, lastName='葫芦娃', email='葫芦娃@163.com', gender='0', dept=Department{id=2, departmentName='测试部'}}
  • 相关阅读:
    mysql 8安装
    MYSQL escape用法--转义
    为什么lombok不起作用
    zookeeper的作用
    限流的玩法汇总
    Golang程序调试工具介绍(gdb vs dlv)
    净化Git之rebase变基的使用
    深入linux下磁盘Disk,分区Partition,挂载Mount
    利用SSH(无密码)免登录来节省你的生命
    tcp_tw_reuse、tcp_tw_recycle注意事项
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/10063852.html
Copyright © 2020-2023  润新知