mybatis中的延迟查询思想
1、一对一延迟加载
延迟加载:
就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载.
好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速
度要快。
坏处:
因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗
时间,所以可能造成用户等待时间变长,造成用户体验下降。
进入 Mybaits 的官方文档,找到 settings 的说明信息:

我们需要在 Mybatis 的配置文件 SqlMapConfig.xml 文件中添加延迟加载的配置。
<settings> <setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
配置
<resultMap id="accountMap" type="com.itheim.domain.Account">
        <id property="id" column="aid"></id>
        <result property="money" column="money"></result>
        <result property="uid" column="uid"></result>
        <!-- 一对一的关系映射 封装user的内容
         select 属性指定的内容,查询用户的唯一标识
         column 属性指定的内容,用户根据id查询时,所需要的参数的值
         -->
        <association property="user" column="uid" javaType="user" select="com.itheim.dao.IUserDao.findByid"><!-- javatype用于提示封装到那个对象 --></association>
</resultMap>
 sql语句
<!--一对一的查询-->
    <select id="findAccount" resultMap="accountMap"> <!--指定包装类型 -->
        select * from account;
    </select>
   <select id="findByid" resultType="user" parameterType="INT">
        select * from user where id=#{id};
    </select>
 @Test
    public void findAccoutUser(){
        List<Account> accountUser = userDao.findAccount();
        for (Account account : accountUser) {
            System.out.println(account);
            System.out.println(account.getUser());
        }
    }
一对多查询
<!--一对多查询 -->
    <resultMap id="resultaccountMap" type="user">
        <id property="id" column="id"></id>
        <result property="username" column="username"></result>
        <result property="address" column="address"></result>
        <result property="sex" column="sex"></result>
        <result property="birthday" column="birthday"></result>
        <collection property="account" ofType="account" column="id" select="com.itheim.dao.IUserDao.findByidaccount"> <!-- ofType每个元素的类型 -->
        </collection>
    </resultMap>
    <!--一对多查询 延迟方法-->
    <select id="findAccountByUser" resultMap="resultaccountMap">
          select * from user ;
    </select>
<!--一对多延迟方法根据id查询account表-->
    <select id="findByidaccount" resultType="account">
        select * from account where uid=#{id};
    </select>
、//测试类
   @Test
    public void findAccountByUser(){
        List<User> accountByUser = userDao.findAccountByUser();
        for (User user : accountByUser) {
            System.out.println(user);
            List<Account> accounts = user.getAccount();
//            for (Account account : accounts) {
//                System.out.println(account);
            }
        }
mybatis中的延迟查询思想的更多相关文章
- mybatis中的高级查询
		Mybatis作为一个ORM框架,肯定是支持sql高级查询的. 下面的一个案例来为大家详细讲解mybatis中的高级查询. 案例说明: 此案例的业务关系是用户,订单,订单详情与商品之间的关系. 以订单 ... 
- LINQ中的"延迟查询"特性【转】
		本文转载自:LINQ中的"延迟查询"特性 详细了解“延迟查询”:C#学习笔记(八)—–LINQ查询之延迟执行 很多标准查询操作符的设计原型都是返回一个IEnumerable< ... 
- Mybatis中的in查询和foreach标签
		Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ... 
- SSM-MyBatis-13:Mybatis中多条件查询
		------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 实体类 public class Book { private Integer bookID; private ... 
- 【mybatis】mybatis中放置IN查询拼接sql过长,IN查询进行分批次查询的处理
		需要使用的切割list集合的工具类,链接:https://www.cnblogs.com/sxdcgaq8080/p/9376947.html 处理逻辑,原本的一个LIst,进行切割,循环进行myba ... 
- Mybatis中使用级联查询,一对多的查询
		一.需求描述 自己在开发一个小程序的过程中,需要做的一个查询是稍微比较复杂的查询,根据用户信息去查询用户所对应的宠物信息. 一个用户可能对应多个宠物,所以在用户和宠物信息的对应关系就是一对多的关系. ... 
- Mybatis中的模糊查询
		今天下午做的一个功能,要用到模糊查询,字段是description,刚开始我的写法用的是sql中的模糊查询语句, 但是这个有问题,只有将字段的全部值传入其中,才能查询,所以不是迷糊查询. 后来经过搜索 ... 
- java使用插件pagehelper在mybatis中实现分页查询
		摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件 PageHelper是国内牛人的一个开源项目,有兴趣的可以去看源码,都有 ... 
- MyBatis中的条件查询(动态sql)
		本文将介绍使用MyBatis框架,编写DAO层接口类和接口类对应的sql映射文件,使用动态sql查询满足条件的用户集合. 首先,需要创建一个实体类User,供封装数据使用: package com.x ... 
随机推荐
- Android屏幕适配技巧
			屏幕适配一直是困扰 Android 开发工程师的一大问题,但是随着近几年各种屏幕适配方案的诞生,以及谷歌各种适配控件的推出,屏幕适配也显得越来越容易,这节课我们就来总结一下关于屏幕适配的那些技巧. C ... 
- CSRF攻击原理以及防御方法(写的很好)
			转载地址:http://www.phpddt.com/reprint/csrf.html CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟 ... 
- web notification api
			Web Notifications API 使页面可以发出通知,通知将被显示在页面之外的系统层面上(通常使用操作系统的标准通知机制,但是在不同的平台和浏览器上的表现会有差异) 要显示一条通知,你需要先 ... 
- 数据可视化之powerBI技巧(六)在PowerBI中简单的操作,实现复杂的预测分析
			时间序列预测就是利用过去一段时间内的数据来预测未来一段时间内该数据的走势,比如根据过去5年的销售数据进行来年的收入增长预测,根据上个季度的股票走势推测未来一周的股价变化等等. 对于大部分人来说,这是个 ... 
- Flask 基础组件(四):模板
			1.模板的使用 1.1 语法 1.1.1 流程控制 逻辑语法 Jinja2模板语言中的 for {% for foo in g %} {% endfor %} Jinja2模板语言中的 if {% ... 
- Mysql and ORM
			本节内容 数据库介绍 mysql 数据库安装使用 mysql管理 mysql 数据类型 常用mysql命令 创建数据库 外键 增删改查表 权限 事务 索引 python 操作mysql ORM sql ... 
- Jsonp处理跨域请求
			Jsonp的使用需要前端和后端共同配合来完成 服务端设置(ASP.NET MVC实现): 在将返回的Json数据包在一个方法名称的内部,如上 客户端设置: 同时要加上一个回调函数用于处理请求的数据 在 ... 
- bzoj3062[Usaco2013 Feb]Taxi*
			bzoj3062[Usaco2013 Feb]Taxi 题意: Bessie在农场上为其他奶牛提供出租车服务,她必须赶到这些奶牛的起始位置,并把他们带到它们的目的地.Bessie的车很小,所以她只能一 ... 
- 计算机网络学习socket--day3
			1.REUSEADDR(地址重复利用) 1.REUSEADDR解决服务器关闭后重新绑定地址,在day3中知道服务器端必须绑定地址 2.服务器端尽可能使用REUSEADDR 3.在绑定之前尽可能调用se ... 
- Java多线程详解总结
			一.基本概念 程序(program): 是为完成特定任务.用某种语言编写的一组指令的集合.即指一 段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是正在运行的一个程序.是一个 ... 
