本节我们将学习用sql语句分步查询数据库表信息,顾名思义。分步骤,多步查询。

目录

1.mapper接口

2.mapper映射文件

2.1 emp映射文件

2.2 Dept映射文件

3.测试类

4.结果

5.原理

6.总结


1.mapper接口

emp mapper

此处是emp mapper接口,第一个sql的接口设置。

    /*** 通过分步查询, 查询员工及员工对应的部门信息* 分步查询第一步, 查询员工信息* 不需要两表联查*/Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);

dept mapper

分步查询第二步接口设置

    /*** 通过分步查询,查询员工及员工对应的部门* 分布查询第二步: 通过did查询对应的部门*/Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);

2.mapper映射文件

2.1 emp映射文件

此处是第一步执行之后调用第二部,在select处调用下一步。

 <!--        Emp getEmpAndDeptByStepOne(@Param("eid") Integer eid);--><select id="getEmpAndDeptByStepOne" resultMap="empAndDeptByStepResultMap">select * from t_emp where eid = #{eid}</select>
 <resultMap id="empAndDeptByStepResultMap" type="Emp"><id property="eid" column="eid"></id><result property="age" column="age"></result><result property="empName" column="emp_name"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><association property="dept" select="com.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo" column="did"><!--此处column是分步查询的条件--></association></resultMap>

2.2 Dept映射文件

<resultMap id="empAndDeptByStepResultMap" type="Dept"><id property="did" column="did"></id><result property="deptName" column="dept_name"></result></resultMap><!--        Dept getEmpAndDeptByStepTwo(@Param("did") Integer did);--><select id="getEmpAndDeptByStepTwo" resultMap="empAndDeptByStepResultMap">select * from t_dept where did = #{did}</select>

3.测试类

    @Testpublic void testGetOneEmpAndDeptByStep(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);Emp empAndDept = mapper.getEmpAndDeptByStepOne(1);System.out.println(empAndDept);}

4.结果

Emp{eid=1, empName='张三', age=32, sex='男', email='123@qq.com', dept=Dept{did=1, deptName='A部门'}}

5.原理

从此处我们可以看到sql执行了两步,有两个sql

20:02:24:113 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger 137 - ==>  Preparing: select * from t_emp where eid = ?
20:02:24:173 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger 137 - ==> Parameters: 1(Integer)
20:02:24:218 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger 137 - ====>  Preparing: select * from t_dept where did = ?
20:02:24:218 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger 137 - ====> Parameters: 1(Integer)
20:02:24:224 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger 137 - <====      Total: 1
20:02:24:228 [main] DEBUG org.apache.ibatis.logging.jdbc.BaseJdbcLogger 137 - <==      Total: 1

6.总结

select: 设置sql分步的唯一标识

com.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo

column:设置分步查询的条件

property:分步查询实体类的属性

7.延迟加载

当在mybatis-config文件设置延迟加载时候,我们分步查询的第二步就不会执行。

        <setting name="lazyLoadingEnabled" value="true"/>

或者 映射文件添加 fetchType="lazy"

<resultMap id="empAndDeptByStepResultMap" type="Emp"><id property="eid" column="eid"></id><result property="age" column="age"></result><result property="empName" column="emp_name"></result><result property="sex" column="sex"></result><result property="email" column="email"></result><association property="dept"select="com.mybatis.mapper.DeptMapper.getEmpAndDeptByStepTwo"column="did"fetchType="lazy"><!--此处column是分步查询的条件--></association>
</resultMap>

mybatis处理多对一映射关系3- 分步查询和延迟加载相关推荐

  1. association 实现MyBatis分步查询与延迟加载

    一.分步查询 1.1什么时候可以用到分步查询 有的时候需要我们对数据库进行关联查询,比如Employee 持有另一个Department对象的一个引用,我们希望在查询Employee 的时候把Depa ...

  2. Mybatis使用Association解决多对一映射关系

    association :处理多对一的映射关系 property:需要处理的映射关系的属性名 javatype:该属性的类名 <resultMap id="empAndDeptResu ...

  3. Mybatis之表之间映射关系总结

    1.什么是表之间映射关系 就是多张表进行关联,如果查询等操作不只是与一张表有关系,同时其他表也要进行操作. 2.数据库中的连接查询 表结构: 顾客表:customers                 ...

  4. Hibernate(五)多对多映射关系

    Many to Many 映射关系(没尝试映射hibernate支持的java类型) 双向多对多外键关联(XML/Annotation) (xml和annotation都实现了) 单向多对多外键关联( ...

  5. MyBatis学习——分步查询与延迟加载

    声明:面试是遇到延迟加载问题,在网页搜索到此篇文章,感觉很有帮助,留此学习之用! 一.分步查询 分步查询通常应用于关联表查询,如:电商平台,查询订单信息时需要查询部分的用户信息:OA系统查询个人信息时 ...

  6. mybatis分步查询与延迟加载

    参考地址:https://blog.csdn.net/postersxu/article/details/79053916 本篇博客的主题是如何实现MyBatis的延迟加载(也叫懒加载),因为延迟加载 ...

  7. JavaEE——Mybatis(6)--association的分步查询与延迟加载 以及Collection和鉴别器discriminator...

    使用association进行分步查询:(一般,部门什么的会有自己的Mappper,所以直接利用就好,不用再重新自己写) 1.先按照学生id查询学生信息 2.根据查询学生信息中的grade_id值去班 ...

  8. java中的多对多关系解析_Java中多对多映射关系(转)

    多对对的映射,可以用学生和课程进行演示.一个学生可以选择多个课程,一个课程又对应了多个学生 定义学生类 class Stu{ private String name; private String n ...

  9. java中的多对多关系解析_Java中多对多映射关系

    多对对的映射,可以用学生和课程进行演示.一个学生可以选择多个课程,一个课程又对应了多个学生 定义学生类 class Stu{ private String name; private String n ...

  10. SpringJpa多对多映射关系

    1.菜单表 @Entity @Table(name="t_menus") public class Menus { @Id     @GeneratedValue(strategy ...

最新文章

  1. 预测过去?DeepMind用AI复原古希腊铭文,登Nature封面
  2. 希尔排序的理解和实现(Java)
  3. codeigniter中创建自己的类库
  4. Java笔记-异常机制中try(...)中括号的用法
  5. php 数组改成索引数组_PHP 自定义集合与数组规范
  6. js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
  7. 发送邮件 ajax,使用Ajax发送电子邮件
  8. 基于实验数据的轮胎模型
  9. 岁月的脚步,被时间冲刷——如何修复EM ?
  10. 超级P2P搜索引擎使用教程和下载地址
  11. 使用python正则表达式筛选txt文本并重新写入txt文件
  12. 计算机专业学不学画法几何,高数难呀,学不懂不只从哪下手,还有画法几何
  13. Python无法打开.xlsx文件:xlrd.biffh.XLRDError: Excel xlsx file; not supported
  14. 国内哪里培训python比较好-最好的Python培训机构是哪家?
  15. 屏幕保护程序Aerial Mac
  16. 【GPS周-周内秒、BDS周-周内秒转换与逆转换】
  17. Python实现手机和电脑之间的文件传输
  18. 浅谈软件定制开发与软件外包的区别
  19. 如何免费体验腾讯云虚拟主机(云服务器)
  20. 训练ChatGPT的必备资源:语料、模型和代码库完全指南

热门文章

  1. 串口协议和RS-232标准,RS232电平与TTL电平的区别,以及USB/TTL转232“模块(CH340芯片为例)的工作原理
  2. 立锜1.2V~5.5V稳压芯片RT9078-33GJ5
  3. china-pub第3波免费赠书正式推出,精品赠书20册,抢楼得书!
  4. 手机b站封面提取网站_B端网站SEO优化思路:外链SEO与站内SEO优化结合才有效
  5. 苹果手机计算机怎么放桌面,苹果手机桌面图标怎么随意摆放 iPhone桌面图标随意摆放教程 (全文)...
  6. MySQL高级SQL语句(二)
  7. HDUOJ_2567_寻梦
  8. OSChina 周日乱弹 —— 这二叉树长得,标致!
  9. Cannot forward after response has been committe
  10. OA办公——SwebUI开源应用解决方案