11-Mybatis 延迟加载策略
一、何为延迟加载
二、实现需求
三、使用 assocation 实现延迟加载
1.账户的持久层 DAO 接口
/**
* 查询所有账户,同时获取账户的所属用户名称以及它的地址信息
* @return
*/
List<Account> findAll();
2.账户的持久层映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.oesoft.mybatis01.dao.IAccountDao"><!-- 建立对应关系 --><resultMap type="account" id="accountMap"><id column="id" property="id"/><result column="uid" property="uid"/><result column="money" property="money"/><!-- 它是用于指定从一方表引用实体属性 --><!--select: 填写我们要调用的 select 映射的 id, column : 填写我们要传递给 select 映射的参数--><association property="user" javaType="user"select="cn.oesoft.mybatis01.dao.IUserDao.findById"column="uid"></association></resultMap><select id="findAll" resultMap="accountMap">select *from account</select>
</mapper>
3.用户的持久层接口和映射文件
/*** 根据 id 查询* @param userId* @return*/User findById(int userId);
<!-- 根据 id 查询 --><select id="findById" resultType="cn.oesoft.mybatis01.domain.User" parameterType="_int">select *from userwhere id = #{uid}</select>
4.开启 Mybatis 的延迟加载策略
<!-- mybatis的主配置文件 -->
<configuration><!-- 开启延迟加载的支持 --><settings><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/></settings>
5.编写测试只查账户信息不查用户信息
@Testpublic void testFindAll() {List<Account> accounts = accountDao.findAll();}
四、使用 Collection 实现延迟加载
1.在 User 实体类中加入 List<Account>属性
2.编写用户和账户持久层接口的方法
/*** 查询所有用户,同时获取出每个用户下的所有账户信息* @return*/List<User> findAllByLazy();
/*** 根据用户 id 查询账户信息* @param uid* @return*/List<Account> findByUid(Integer uid);
3.编写用户持久层映射配置
<resultMap type="user" id="userMapByLazy"><id column="id" property="id"></id><result column="username" property="username"/><result column="address" property="address"/><result column="sex" property="sex"/><result column="birthday" property="birthday"/><!-- collection 是用于建立一对多中集合属性的对应关系ofType 用于指定集合元素的数据类型select 用于指定查询 account 列表的 sql 语句,所以填写的是该 sql 映射的 id(账户的 dao 全限定类名加上方法名称)column 用于指定 select 属性的 sql 语句的参数来源,下面的参数来自于 user 的 id 列,所以就写成 id 这一个字段名了--><collection property="accounts" ofType="account"select="cn.oesoft.mybatis01.dao.IAccountDao.findByUid"column="id"></collection></resultMap><!-- 配置查询所有操作 --><select id="findAllByLazy" resultMap="userMapByLazy">select *from user</select>
4.编写账户持久层映射配置
<!-- 根据用户 id 查询账户信息 --><select id="findByUid" resultType="account" parameterType="int">select *from accountwhere uid = #{uid}</select>
5.测试只加载用户信息
@Testpublic void testFindAllByLazy() {List<User> users = userDao.findAllByLazy();for (User user : users) {System.out.println(user.getSex());}}
11-Mybatis 延迟加载策略相关推荐
- java day56【 Mybatis 延迟加载策略 、 Mybatis 缓存、Mybatis 注解开发 】
第1章 Mybatis 延迟加载策略 1.1 何为延迟加载? 1.2 实现需求 1.3 使用 assocation 实现延迟加载 1.3.1 账户的持久层 DAO 接口 1.3.2 账户的持久层映射文 ...
- mybatis延迟加载策略
1.1 概述 我们已经知道mybatis中的一对一,一对多,多对多关系的配置及实现,可以实现对象的关联查询.实际开发过程中,我们并不需要加载用户信息时,就加载它的账户信息,而是在使用用户账号的时候,再 ...
- MyBatis-学习笔记11【11.Mybatis的缓存】
Java后端 学习路线 笔记汇总表[黑马程序员] MyBatis-学习笔记01[01.Mybatis课程介绍及环境搭建][day01] MyBatis-学习笔记02[02.Mybatis入门案例] M ...
- 10【Mybatis延迟加载】
文章目录 一.Mybatis 延迟加载 1.1 延迟加载介绍 1.1.1 搭建项目工程 1)SQL脚本: 2)引入依赖: 3)MyBatis核心配置文件: 4)实体类: 5)dao接口: 6)mapp ...
- mybatis延迟加载、缓存(一级、二级)
一.mybatis的延迟加载 问题:在一对多中,当一个用户有100个账户. 1.在查询用户的时候,要不要把关联的账户查出来? 答:在查询用户时,用户下的账户信息应该是:什么时候使用,什么时候查询 2. ...
- Mybatis延迟加载机制
Mybatis延迟加载机制--à 效率蛮高 @Test public void testFindById() { OrderType ot = new OrderType(); try { ot = ...
- Hibernate延迟加载策略
所谓懒加载(lazy)就是延时加载,就是当在真正需要数据的时候,才真正执行数据加载操作 至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适,因为内存容量有限 ,为了减少并发量, ...
- 小天带你轻松解决Mybatis延迟加载原理源码问题
Mybatis延迟加载原理源码解析 Mybatis基本结构图 由上图可以知道MyBatis延迟加载主要使⽤:JavassistProxyFactory,CgliProxyFactoryb实现类.这两种 ...
- MyBatis延迟加载和缓存(4)
一.项目创建 1.项目目录结构 2.数据库配置和上一篇的一样,这里不再描述.下面创建mybatis配置文件SqlMapConfig.xml 1 <?xml version="1.0&q ...
最新文章
- 使用PHPExcel将数据导出至Excel
- java 8 永久代_Java8内存结构—永久代(PermGen)和元空间(Metaspace)
- adfs服务器获取信息失败,在ADFS服务器上SAML LogOutRequest处理失败
- 七个小技巧保护无线网络安全
- [导入]屏蔽相应键盘按钮
- imx226_IMX226CQJ-海思网络摄像芯片
- 【愚公系列】2022年10月 微信小程序-电商项目-商品详情页面说明和商品导航
- 一些U盘启动盘电脑热键的对应关系
- IDEA learn 快捷键使用记录 --自用
- 低功耗MCU的选择方法
- python关键字参数必须位于位置参数之前_python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)...
- Router中如何设置光标以全屏十字架显示
- 深度卷积网络:第二课
- Oracle11g新特性密码延迟验证的坑
- 正确使用 protobuf 的姿势
- 【随笔】2022的一些想法,关于多巴胺戒断
- 分析一个Auto.js写的抖音抢福袋脚本源码
- 一键分享功能ShareSDK
- 3.7V升压9V方案对比---万用表改装
- 我的安卓日程管理软件
热门文章
- 【Elasticsearch】Elasticsearch 集群健康值黄色 解决方案 或者 分片 未分配
- 95-080-046-源码-启动-flink-daemon.sh
- 95-140-110-源码-transform-算子keyBy
- 95-30-030-java.util-hashMap
- 【MySQL】MySQL删除数据库的时候卡死
- 【CDH】ClouderaManager集群报警,堆转储目录/tmp 或日志目录/var/log 可用空间小于 5.0 吉字节
- 几款炫酷的IDEA皮肤主题,大爱!
- 教你用纯Java实现一个即时通讯系统(附源码)
- php写的注册登录系统吗,php注册登录系统简化版_php技巧
- leetcode题解677-键值映射