Mybatis懒加载

news2024/11/26 21:31:41

懒加载是什么?

        按需加载所需内容,当调用到关联的数据时才与数据库交互否则不交互,能大大提高数据库性能,并不是所有场景下使用懒加载都能提高效率。

        Mybatis懒加载:resultMap里面的association、collection有延迟加载功能

懒加载针对什么使用?为什么要用懒加载?

        懒加载针对级联使用的,懒加载的目的是减少内存的浪费和减轻系统负担


举例:

查询所有用户信息(其下有多个收货地址)

select b.id ,b.userName,b.userCode,a.*
from smbms_address a right join smbms_user b on a.userId = b.id

进行分步查询:当我需要查看地址的时候加载收货地址信息

-- 查询所有用户信息
select * from smbms_user
-- 查询地址信息
select * from smbms_address where userId = #{id}

以上为单表查询,效率相对于大数据量的关联查询要高

Mybatis懒加载实例

1、在 Mybatis 主配置文件中开启懒加载

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--引入properties文件-->
    <properties resource="database.properties"></properties>
    <!--配置打印sql语句-->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>

        <!--在mybatis主配置文件中关闭自动映射-->
        <!--NONE  FULL全映射-->
        <setting name="autoMappingBehavior" value="FULL"/>
        <!-- 开启懒加载(延迟加载) -->
        <setting name="lazyLoadingEnabled" value="true"/>

    </settings>

    <!--起别名-->
    <typeAliases>
        <package name="com.hz.pojo"/>
    </typeAliases>
    
    <!--可以起多个environments-->
    <environments default="smbms">
        <environment id="smbms">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mappers/AddressMapper.xml"/>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>

</configuration>

2、创建实体类等

package com.hz.pojo;

import lombok.Data;

import java.io.Serializable;
import java.util.List;

@Data
public class User implements Serializable {
	private Long id; //id
	private String userCode; //用户编码
	private String userName; //用户名称
	private String userPassword; //用户密码
	private Integer gender;  //性别
	private String birthday;  //出生日期
	private String phone;   //电话
	private String address; //地址
	private Integer userRole;    //用户角色
	private Integer createdBy;   //创建者
	private String creationDate; //创建时间
	private Integer modifyBy;     //更新者
	private String modifyDate;   //更新时间

	private  Role role;	//用户角色对象

	private List<Address> addressList; //收货地址集合


}
package com.hz.pojo;

import lombok.*;

@Setter
@Getter
@NoArgsConstructor //无参构造方法
@AllArgsConstructor //有参构造方法
@ToString
public class Address {
	private Long id;				//主键ID
	private String postCode; 		//邮编
	private String contact;			//联系人
	private String addressDesc;		//地址
	private String tel;				//联系电话
	private Integer createdBy; 		//创建者
	private String creationDate; 	//创建时间
	private Integer modifyBy; 		//更新者
	private String modifyDate;		//更新时间
	private User user;  			//所属用户对象

}

3、创建Dao接口和XML文件

   <!--懒加载-->

    <resultMap id="userMap1" type="User">
        <id property="id" column="id"/>
        <!-- 一对多  对象套集合 -->
        <collection property="addressList" column="id" ofType="Address" select="getAdd" fetchType="lazy">
            <id property="id" column="id"/>
        </collection>
    </resultMap>
    <select id="findUserList1" resultMap="userMap1">
        select * from smbms_user
    </select>
    <select id="getAdd" resultType="Address">
        select * from smbms_address where userId = #{id}
    </select>

因为 User表与 Address表 是一对多关联,所以使用resultMap的collection映射,在collection标签中,添加属性fetchType,属性值为lazy,表示懒加载。

4、测试

    @Test
    public void findUserList1() {
        SqlSession sqlSession = MyBatisUtil.createSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.findUserList1();
        for (User u :userList) {
            System.out.println("userName:"+u.getUserName());
        }
        //调用地址
//        List<User> userList = userDao.findUserList1();
//        for (User u :userList) {
//            List<Address> addressList = u.getAddressList();
//            System.out.println("userName:"+u.getUserName());
//            for (Address address :addressList) {
//                System.out.println("addressName:"+address.getContact());
//            }
//        }
    }

只查询 UserName :结果如下

 

组合查询时 :结果如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宋浩概率论笔记(八)假设检验

宋浩系列全系列的最后一更&#xff01; 本章考察频率很低&#xff0c;核心在于记忆检验不同参数时用到的分布~

定积分的应用:几何应用与物理应用

目录 几何应用 计算平面图形的面积 计算旋转体的面积 计算曲线弧长 物理应用 几何应用 计算平面图形的面积 定积分在平面图形的面积计算中具有广泛的应用。通过定积分&#xff0c;你可以计算出曲线图形下的面积&#xff0c;从而求解各种复杂形状的区域面积。以下是一些常…

80端口被占用

winR输入&#xff1a;services.msc进入服务窗口 找到SQL Server Reporting Services &#xff0c;右键“属性”停止服务

“哪李贵了”主播带货电商被喷,说到底还是服务问题

近日&#xff0c;李佳琦在带货某品牌眉笔时发表的相关言论引发争议。 9月10日晚&#xff0c;李佳琦在直播间带货国货美妆品牌花西子眉笔时&#xff0c;有网友质疑79元一支的眉笔涨价&#xff0c;李佳琦先是解释花西子有多不容易&#xff0c;“哪里贵了&#xff1f;这么多年都是…

到底适不适合报考浙大MPA项目?这个角度评估比较客观

现今的浙大mpa项目招生可以说是如日中天&#xff0c;2023年1900报考量创造历史最高&#xff0c;也把浙大mpa招生复试自划线顶的老高&#xff0c;200的分数只能碰得到复试资格&#xff0c;距离录取结果还有不少悬念&#xff0c;因此报考浙大mpa项目目前最好的办法是提面冲击A资格…

【力扣每日一题】2023.9.14 可以攻击国王的王后

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们皇后和国王的坐标&#xff0c;问我们哪些皇后可以攻击到国王。 这个应该是国际象棋的走子规则&#xff0c;皇后的攻击范围在跟皇后…

阿里云CDN缓存配置及优化

参考阿里云官网文档&#xff1a;https://help.aliyun.com/practice_detail/603170 缓存时间配置 在缓存管理中&#xff0c;可以方便地指定目录和文件后缀名在CDN节点上的缓存时间&#xff0c;缓存时长配置的长短&#xff0c;取决于源站对该文件的变更频率。我们需要分析下业务中…

存储创新靠软件?

IT产业在经历10多年的狂飙后&#xff0c;近两年在创新速度上看似开始"乏力"&#xff0c;即使iPhone&#xff0c;每一次发布会后也被吐槽缺乏创新。 其实&#xff0c;IT产品在过去十多年的快速发展后&#xff0c;的确在硬件发展方面遇到了一些瓶颈。但一个产品创新能…

【论文阅读】MARS:用于自动驾驶的实例感知、模块化和现实模拟器

【论文阅读】MARS&#xff1a;用于自动驾驶的实例感知、模块化和现实模拟器 Abstract1 Introduction2 Method2.1 Scene Representation2.3 Towards Realistic Rendering2.4 Optimization3.1 Photorealistic Rendering3.2 Instance-wise Editing3.3 The blessing of moduler des…

怎么压缩视频?视频过大跟我这样压缩

在日常生活中&#xff0c;我们常常会遇到需要上传或者发送视频的情况&#xff0c;然而&#xff0c;有时候视频文件过大&#xff0c;无法顺利上传或发送&#xff0c;这时候就需要对视频进行压缩。那么&#xff0c;如何有效地压缩视频呢&#xff1f;看完下面三个方法你就明白了。…

在四维轻云中,能够上传哪些地理空间数据?

四维轻云是一款地理空间数据在线管理软件&#xff0c;支持各类地理空间数据的在线管理、浏览及分享&#xff0c;用户可不受时间地点限制&#xff0c;随时随地上传、管理、查看及分享各类地理空间数据。软件还具有项目管理、场景搭建、素材库等功能模块&#xff0c;支持在线协作…

软件测试/测试开发名企定向培养训练营,升职加薪快人一步!

测试人员如何提升核心竞争力 作为一个测试工程师&#xff0c;自动化测试已经是必须要掌握的技能了。学习自动化测试有两个难点&#xff0c;除了其本身拥有一定的技术门槛之外&#xff0c;实战经验才是学习自动化测试的最大难点。部分初中级测试工程师往往在掌握了基本的编程与…

jupyter notebook找不到python内核(kernel)的解决记录

文章来源&#xff1a;jupyter notebook找不到python内核(kernel)的解决记录 – WhiteNights Site 貌似导致这个问题的原因有非常多&#xff0c;这里只是说一个可能的解决方法。 前情提要&#xff1a;在费了九牛二虎之力&#xff0c;终于安装成功了jupyter notebook&#xff0c;…

ubuntu设置初始的root密码

在用vmware安装ubuntu的虚拟机后&#xff0c;只有初始设置的用户和密码&#xff0c;当进入系统后使用su切换成root账户后&#xff0c;要求输入密码&#xff0c;但输入安装时设置的用户密码不对&#xff0c;需要设置初始的root密码。 解决&#xff1a; 1、使用安装时候的用户登…

一份责任、一个意识、一种情怀,名酒担当剑南春擦亮公益品牌,连续8年助力“高考”!

海南八月&#xff0c;椰风海韵&#xff0c;青春飞扬。 来自全国各地的150余名准大学新生&#xff0c;齐聚南海之滨&#xff0c;开启“剑南春2023强国青年爱国之旅西沙群岛游”。 知名教育专家张雪峰启航致辞、三沙市银屿岛升旗仪式、西沙群岛特别课程《照见未来的一节课》、中…

Java“牵手”唯品会商品详情数据,唯品会商品详情接口,唯品会API接口申请指南

唯品会商城是中国最大的会员制特卖电商平台之一&#xff0c;于2008年创立。它以低至1折的深度折扣及充满乐趣的限时抢购模式&#xff0c;为消费者提供一站式优质购物体验。 唯品会定位于"一家专门做特卖的网站"&#xff0c;每天上新品。它与全球3000多家品牌及供应商…

SSL双向认证-SpringBoot项目

SSL双向认证需要CA证书&#xff0c;开发过程可以利用自签CA证书进行调试验证。 自签CA证书生成过程&#xff1a;SSL双向认证-自签CA证书生成 1.将server.p12证书和client.jks证书复制到项目resources目录下 2.修改配置文件&#xff0c;增加下述内容 #https端口 server.port…

华为云云耀云服务器L实例评测|基于宝塔部署SpringBoot后端+前端工程

目录 前言 一、云耀云服务器L实例购买 1.远程登录并重置密码 2. 第三方登录 二、宝塔Linux面板初始化 1.开放宝塔8888端口 2.初始化宝塔 3.登录宝塔后台 三、宝塔软件安装 1.安装ftp 2.配置JDK 四、Springboot工程部署 1.创建JDK管理 2.上传springboot工程jar包 3.新建Java项目…

【HarmonyOS】如何实现应用内引用HSP模块中ArkUI组件

【关键字】 HSP开发、引入HSP模块中ArkUI组件 【写在前面】 在使用ArkTS开发HarmonyOS应用时&#xff0c;通常会定义一些公共组件或公共接口功能&#xff0c;此时可以将这些功能封装到HSP模块中&#xff0c;然后通过在HSP模块中导出组件或接口方式在其他模块中引用&#xff0…

掌握Power Pages Power Apps 画布应用,创造无限可能!

在这个数字化时代&#xff0c;企业要保持竞争力&#xff0c;不仅需要紧跟科技的步伐&#xff0c;还需要拥有创新的工具和战略。为了帮助您的组织更好地适应变化&#xff0c;世达教育根据企业定制推出的“Power Pages & Power Apps 画布应用”课程&#xff0c;已经圆满结束&…