笔记要点
出错分析与总结
工程组织

1.定义接口

  1. interface DepartmentMapper
  1. package com.dao;
  2.  
  3. import com.bean.Department;
  4.  
  5. public interface DepartmentMapper {
  6.  
  7. public Department getDeptByIdStep(Integer id); //使用Collection,执行分步查询
  8.  
  9. }
  1. interface EmployeeMapperPlus
  1. package com.dao;
  2. import com.bean.*;
  3.  
  4. import java.util.List;
  5.  
  6. public interface EmployeeMapperPlus {
  7.  
  8. public List<Employee> getEmpsByDeptId(Integer deptId); //按照部门的id,返回employee一个列表
  9. }

2.定义XML映射文件

  1. DepartmentMapper.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.dao.DepartmentMapper">
  5. <!--public Department getDeptById(Integer id);-->
  6. <select id="getDeptById" resultType="com.bean.Department">
  7. select id,dept_name departmentName from tbl_dept
  8. where id=#{id}
  9. </select>
  10. <!--==========================================================================================-->
  11. <!--
  12. public class Department {
  13. private Integer id;
  14. private String departmentName;
  15. private List<Employee> emps;
  16. }
  17. JavaBean中: did dept_name || eid last_name email gender
  18. -->
  19. <!--public Department getDeptByIdPlus(Integer id);-->
  20. <!--进行collection的联合查询/ 分步查询和延迟查询 -->
  21. <resultMap id="MyDept" type="com.bean.Department">
  22. <id column="did" property="id"/>
  23. <result column="dept_name" property="departmentName"/>
  24.  
  25. <!--collection 用于定义关联集合类型的属性的封装规则!
  26. ofType用于指定集合中的类型;-->
  27. <collection property="emps" ofType="com.bean.Employee">
  28. <id column="eid" property="id"/>
  29. <result column="last_name" property="lastName"/>
  30. <result column="email" property="email"/>
  31. <result column="gender" property="gender"/>
  32. </collection>
  33.  
  34. </resultMap>
  35. <select id="getDeptByIdPlus" resultMap="MyDept">
  36. SELECT d.id did,d.dept_name dept_name,e.id eid,e.last_name last_name,e.email email,gender
  37. FROM tbl_dept d LEFT JOIN tbl_employee e ON d.id=e.d_id
  38. WHERE d.id=#{id};
  39.  
  40. </select>
  41. <!--========================================-->
  42.  
  43. <!--Department中有属性: private List<Employee> emps;
  44. public Department getDeptByIdStep(Integer id); //执行Collection 的分步查询-->
  45.  
  46. <resultMap id="MyDeptStep" type="com.bean.Department">
  47. <id column="id" property="id"/>
  48. <result column="detp_name" property="departmentName"/>
  49. <collection property="emps" select="com.dao.EmployeeMapperPlus.getEmpsByDeptId"
  50. column="id">
  51. </collection>
  52. </resultMap>
  53.  
  54. <select id="getDeptByIdStep" resultMap="MyDeptStep">
  55. select id,dept_name departmentName from tbl_dept
  56. where id=#{id}
  57. </select>
  58.  
  59. </mapper>

  EmployeeMapperPlus.xml c新增内容

  1. <select id="getEmpsByDeptId" resultType="com.bean.Employee">
  2. select * from tbl_employee where d_id = #{DeptId}
  3. </select>

3.编写测试代码

  1. @Test
  2. public void test07() throws Exception{
  3. SqlSession openSession = getSqlSessionFactory().openSession();
  4. try{
  5. DepartmentMapper mapper = openSession.getMapper(DepartmentMapper.class);
  6. // System.out.println("---tp_34---多表关联查询,使用collection 定义关联集合封装规则-----");
  7. // Department department = mapper.getDeptByIdPlus(1);
  8. // List<Employee> emps = department.getEmps();
  9. // for(Employee e:emps)
  10. // System.out.println(e);
  11.  
  12. System.out.println("---tp_35---多表关联查询,使用collection分步查询&延迟加载--");
  13. Department dept = mapper.getDeptByIdStep(1);
  14. System.out.println(dept.getDepartmentName()); //只有一行时,进行按需加载
  15. // System.out.println(dept); //当要加载全部的时候,就不会延迟加载了
  16.  
  17. openSession.commit();//默认是不自动提交数据的,需要我们自己手动提交
  18. }finally {
  19. openSession.close();
  20. }
  21. }

测试结果   (全部调用时的结果)

  1. ---tp_35---多表关联查询,使用collection分步查询&延迟加载--
  2. DEBUG 12-04 12:01:58,977 ==> Preparing: select id,dept_name departmentName from tbl_dept where id=? (BaseJdbcLogger.java:145)
  3. DEBUG 12-04 12:01:58,997 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
  4. DEBUG 12-04 12:01:59,069 <== Total: 1 (BaseJdbcLogger.java:145)
  5. 开发部
  6. DEBUG 12-04 12:01:59,069 ==> Preparing: select * from tbl_employee where d_id = ? (BaseJdbcLogger.java:145)
  7. DEBUG 12-04 12:01:59,070 ==> Parameters: 1(Integer) (BaseJdbcLogger.java:145)
  8. DEBUG 12-04 12:01:59,072 <== Total: 2 (BaseJdbcLogger.java:145)
  9. Department{id=1, departmentName='开发部'}

Mybatis3.1-[tp_34-35]-_映射文件_select_resultMap关联查询_collection定义关联集合封装规则_collection分步查询_延迟加载的更多相关文章

  1. Mybatis3.1-[tp_32-33]-_映射文件_select_resultMap关联查询_association分步查询_延迟加载

    笔记要点出错分析与总结 工程组织 1.定义接口 DepartmentMapper package com.dao; import com.bean.Department; public interfa ...

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

    _分步查询传递多列值&fetchType_discriminator鉴别器 笔记要点出错分析与总结 Department.java bean public class Department { ...

  3. mybatis3.1-[topic-18-20]-_映射文件_参数处理_单个参数&多个参数&命名参数 _POJO&Map&TO 三种方式及举例

    笔记要点出错分析与总结 /**MyBatis_映射文件_参数处理_单个参数&多个参数&命名参数 * _POJO&Map&TO 三种方式及举例 _ * 单个参数 : #{ ...

  4. mybatis映射文件_select_resultMap

    实体类: Employee.java类: package com.hand.mybatis.bean; public class Employee {        private Integer e ...

  5. MyBatis3_[tp-26-27]_映射文件_select_返回List_记录封装Map:返回单个元素的Map或者整体Map集合

    笔记要点出错分析与总结工程组织 1.定义接口 public interface EmployeeMapper { //多条记录封装到一个map中: Map<Integer,Employee> ...

  6. MyBatis 3.0_[tp-24-25]_映射文件_参数处理_#与$取值区别_#{}更丰富的用法

    笔记要点出错分析与总结 /**================Mybatis参数值的获取:#和$符号的区别=============== * #{}:可以获得map中的值或者pojo对象属性的值; * ...

  7. MyBatis映射文件的resultMap如何做表关联

    MyBatis的核心是其映射文件,SqlMap文件,里面配置了项目中用到了什么SQL语句,和数据库相关的逻辑都在这个映射文件里.顾名思义,映射文件就是对Java对象和SQL的映射.这里简单介绍一下映射 ...

  8. mybatis映射文件select_resultMap_关联查询_collection定义关联集合

    知识点:查询一个实体类,并查出这个类下面的集合 Employee.java实体类 package com.hand.mybatis.bean;public class Employee {    pr ...

  9. 5.20 mybatis反向生成的映射文件xml(如果需要自己定义其他sql语句时如下)

    解决mybatis-generator 生成的mapper.xml覆盖自定义sql的问题 mybatis-generator是个好工具,一建即可生成基本增删改成功能的mapper.xml.但这些是不够 ...

随机推荐

  1. WPF ComboBox(转)

    WPF ComboBox 创建一个ComboBox控件,并设置ComboBox控件的名称,高度,宽度.及设置ComboBox的垂直和水平对齐. <ComboBox Name="Comb ...

  2. java的ReentrantLock类详解

    ReentrantLock 能用于更精细化的加锁的Java类, 通过它能更清楚了解Java的锁机制 ReentrantLock 类的集成关系有点复杂, 既有内部类, 还有多重继承关系 类的定义 pub ...

  3. TCP/IP学习笔记8--数据链路之基本概念

    "在你生命的最初30年中,你养成习惯:在你生命的最后30年中,你的习惯决定了你."---- Steve Jobs TCP/IP对于OSI参考模型的数据链路成及以下部分(物理层)没有 ...

  4. Spring @Transactional 事务机制

    几个概念要清楚:事务的传播机制,事务的边界 工作原理 运行配置@Transactional注解的测试类的时候,具体会发生如下步骤 1)事务开始时,通过AOP机制,生成一个代理connection对象, ...

  5. [Oracle] - 使用 DBMS_UTILITY 查看异常详情

    DBMS_UTILITY.FORMAT_ERROR_BACKTRACE说明:这是在Oracle 10g数据库引入的,DBMS_UTILITY.FORMAT_ERROR_BACKTRACE内置函数返回一 ...

  6. [Xamarin] - 连接 Mac Agent 显示 "couldn't connect to xxxx, please try again" 之解决

    背景 在 VS 2017 的 Xamarin 项目中,配置 Mac Agent 连接到本地虚拟机中的 MacOS 失败. 1. MacOS 已启用远程登陆.2. SSH 可以登陆成功.3. 防火墙已关 ...

  7. c#序列化基类(包含派生类继承DynamicObject和 IXmlSerializable)对象

    直接上代码 using System.Diagnostics; using System.Text; using System.Xml; using System.Xml.Schema; using ...

  8. python 使用API调用和风天气获取天气情况并保存

    第一步.注册注册免费API和阅读技术文档: 注册地址:https://console.heweather.com 注册完成后,激活登录后,新建应用 .新建key KEY名称 密钥ID 密钥 类型下载城 ...

  9. MyBatis Generator 自动生成的POJO对象的使用(一)

    MyBatis Generator 会自动生成以下几种类型的对象(除非你使用MyBatis3DynamicSql 的运行环境): Java Model Objects(总是生成) SQL Map Fi ...

  10. js获取网页和屏幕高度

    获取浏览器窗口的可视区域高度和宽度 document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> BODY对象 ...