mybatis处理多对一映射关系3- 分步查询和延迟加载
本节我们将学习用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- 分步查询和延迟加载相关推荐
- association 实现MyBatis分步查询与延迟加载
一.分步查询 1.1什么时候可以用到分步查询 有的时候需要我们对数据库进行关联查询,比如Employee 持有另一个Department对象的一个引用,我们希望在查询Employee 的时候把Depa ...
- Mybatis使用Association解决多对一映射关系
association :处理多对一的映射关系 property:需要处理的映射关系的属性名 javatype:该属性的类名 <resultMap id="empAndDeptResu ...
- Mybatis之表之间映射关系总结
1.什么是表之间映射关系 就是多张表进行关联,如果查询等操作不只是与一张表有关系,同时其他表也要进行操作. 2.数据库中的连接查询 表结构: 顾客表:customers ...
- Hibernate(五)多对多映射关系
Many to Many 映射关系(没尝试映射hibernate支持的java类型) 双向多对多外键关联(XML/Annotation) (xml和annotation都实现了) 单向多对多外键关联( ...
- MyBatis学习——分步查询与延迟加载
声明:面试是遇到延迟加载问题,在网页搜索到此篇文章,感觉很有帮助,留此学习之用! 一.分步查询 分步查询通常应用于关联表查询,如:电商平台,查询订单信息时需要查询部分的用户信息:OA系统查询个人信息时 ...
- mybatis分步查询与延迟加载
参考地址:https://blog.csdn.net/postersxu/article/details/79053916 本篇博客的主题是如何实现MyBatis的延迟加载(也叫懒加载),因为延迟加载 ...
- JavaEE——Mybatis(6)--association的分步查询与延迟加载 以及Collection和鉴别器discriminator...
使用association进行分步查询:(一般,部门什么的会有自己的Mappper,所以直接利用就好,不用再重新自己写) 1.先按照学生id查询学生信息 2.根据查询学生信息中的grade_id值去班 ...
- java中的多对多关系解析_Java中多对多映射关系(转)
多对对的映射,可以用学生和课程进行演示.一个学生可以选择多个课程,一个课程又对应了多个学生 定义学生类 class Stu{ private String name; private String n ...
- java中的多对多关系解析_Java中多对多映射关系
多对对的映射,可以用学生和课程进行演示.一个学生可以选择多个课程,一个课程又对应了多个学生 定义学生类 class Stu{ private String name; private String n ...
- SpringJpa多对多映射关系
1.菜单表 @Entity @Table(name="t_menus") public class Menus { @Id @GeneratedValue(strategy ...
最新文章
- 预测过去?DeepMind用AI复原古希腊铭文,登Nature封面
- 希尔排序的理解和实现(Java)
- codeigniter中创建自己的类库
- Java笔记-异常机制中try(...)中括号的用法
- php 数组改成索引数组_PHP 自定义集合与数组规范
- js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
- 发送邮件 ajax,使用Ajax发送电子邮件
- 基于实验数据的轮胎模型
- 岁月的脚步,被时间冲刷——如何修复EM ?
- 超级P2P搜索引擎使用教程和下载地址
- 使用python正则表达式筛选txt文本并重新写入txt文件
- 计算机专业学不学画法几何,高数难呀,学不懂不只从哪下手,还有画法几何
- Python无法打开.xlsx文件:xlrd.biffh.XLRDError: Excel xlsx file; not supported
- 国内哪里培训python比较好-最好的Python培训机构是哪家?
- 屏幕保护程序Aerial Mac
- 【GPS周-周内秒、BDS周-周内秒转换与逆转换】
- Python实现手机和电脑之间的文件传输
- 浅谈软件定制开发与软件外包的区别
- 如何免费体验腾讯云虚拟主机(云服务器)
- 训练ChatGPT的必备资源:语料、模型和代码库完全指南
热门文章
- 串口协议和RS-232标准,RS232电平与TTL电平的区别,以及USB/TTL转232“模块(CH340芯片为例)的工作原理
- 立锜1.2V~5.5V稳压芯片RT9078-33GJ5
- china-pub第3波免费赠书正式推出,精品赠书20册,抢楼得书!
- 手机b站封面提取网站_B端网站SEO优化思路:外链SEO与站内SEO优化结合才有效
- 苹果手机计算机怎么放桌面,苹果手机桌面图标怎么随意摆放 iPhone桌面图标随意摆放教程 (全文)...
- MySQL高级SQL语句(二)
- HDUOJ_2567_寻梦
- OSChina 周日乱弹 —— 这二叉树长得,标致!
- Cannot forward after response has been committe
- OA办公——SwebUI开源应用解决方案