延迟加载

hibernate lazy(延迟加载)

故事扮演 提交于 2019-12-04 10:08:57
hibernate lazy策略可以使用在: * <class>标签上,可以取值:true/false ,在hibernate3以上版本,默认是true * <property>标签上,可以取值:true/false需要类增强工具 * <set><list>标签上,可以取值:true/false/extra * <one-to-one><many-to-one>单端关联上,可以取值:false/proxy/no-proxy lazy概念:只有真正使用该对象时,才会创建,对于hibernate而言,正真使用的时候才会发出sql hibernate支持lazy策略只有在session打开状态下有效 ===================================================== 1. <class>标签上: hbm group.hbm.xml <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd "> <hibernate-mapping package=

4、Hibernate的查询方式

痞子三分冷 提交于 2019-12-04 04:52:55
一、Hibernate的查询方式:OID查询 1、OID检索:Hibernate根据对象的OID(主键)进行检索 1-1、使用get方法 Customer customer = session.get(Customer.class,1L); 1-2、使用load方法 Customer customer = session.load(Customer.class,1L); 3、对象导航检索:Hibernate根据一个已经查询到的对象,获得其关联的对象的一种查询方式。 Customer customer = session.get(Customer.class,1L); Set<LinkMan> linkManSet = customer.getLinkMans(); 4-1、HQL查询 Hibernate Query Language,Hibernate的查询语言,是一种面向对象的方式的查询语言,语法类似SQL。通过session.createQuery(),用于接收一个HQL进行查询方式。 package com.turtle.test; import java.util.Arrays; import java.util.List; import com.turtle.dao.Customer; import com.turtle.dao.LinkMan; import com

Mybatis的延迟加载

家住魔仙堡 提交于 2019-12-04 01:39:28
定义: 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作 Mybatis中的延迟加载 当代码执行到查询语句时候,并不是直接到DB中执行select查询语句,而是根据配置好的延迟策略,将查询延迟;来减轻DB服务器的压力; Mybatis中使用规则: 只能对关联对象进行查询时使用延迟加载策略;对于主对象直接加载即可; 只能使用多表单独查询,不能使用多表连接查询(多表连接查询直接可以查询到全部信息) Mybatis中延迟加载策略分为三种: 直接加载:执行到查询语句,马上到DB中去执行查询; 侵入式延迟加载:将关联对象详情侵入到主加载对象中,作为主加载对象的一部分,需要访问主加载对象时,关联对象也会被加载; 深入延迟加载:访问主加载对象,只会查询主表,不会查询关联表,用到关联对象时才到DB中查询; 配置 在Mybatis中可以在配置文件中进行配置: <configuration> <!--在此标签下面--> <settings> <!--延迟加载的总开关,默认是深度延迟加载--> <setting name="lazyLoadingEnabled" value="true"/> <!--侵入式延迟加载的开关,在总开关打开时才起作用--> <!--<setting name="aggressiveLazyLoading"

HT for Web的HTML5树组件延迟加载技术实现

做~自己de王妃 提交于 2019-12-04 00:19:29
HT for Web 的 HTML5树组件 有延迟加载的功能,这个功能对于那些需要从服务器读取具有层级依赖关系数据时非常有用,需要获取数据的时候再向服务器发起请求,这样可减轻服务器压力,同时也减少了浏览器的等待时间,让页面的加载更加流畅,增强用户体验。 进入正题,今天用来做演示的Demo是,客户端请求服务器读取系统文件目录结构,通过 HT for Web 的 HTML5树组件 显示系统文件目录结构。 首先,我们先来设计下服务器,这次Demo的服务器采用 Node.js ,用到了Node.js的 express 、 socket.io 、fs和http这四个模块, Node.js 的相关知识,我在这里就不阐述了,网上的教材一堆,这里推荐下 socket.io 的相关入门 http://socket.io/get-started/chat/ 。 服务端代码代码: var fs = require('fs'), express = require('express'), app = express(), server = require('http').createServer(app), io = require('socket.io')(server), root = ‘/Users/admin/Projects/ht-for-web/guide‘; io.on(

查询延迟加载/查询

会有一股神秘感。 提交于 2019-12-03 05:29:51
存在联表查询中;联表查询必须是多表单独查询 概念:将查询的时机推迟 单表查询:不存在延迟查询 联表查询: 多表一次查询:不存在延迟查询 多表单独查询:会执行多条sql语句,才会存在延迟查询。 目的:只立马执行需要的数据的sql语句 比如:用户和地址数据 两条sql语句 select * from tuser where id = ? 需要立马执行的 select * from taddress where aid = ? 可以延迟执行,在获取用户的地址的时候才执行 好处:减小数据库的压力 Mybatis的延迟加载方式: 直接加载 执行完主对象的sql语句之后,立马执行关联对象的sql语句 配置 配置Mybatis的主配置文件: 主配置文件中在proerties标签和typeAliaes标签之间可以配置settings的标签,用来配置全局配置的。 开启延迟加载的属性: lazyLoadingEnabled:全局性设置懒加载。如果设为‘false’,则所有相关联的sql都会立即执行。默认为false aggressiveLazyLoading:当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。默认为true 侵入式延迟加载 执行完主对象的sql语句之后,不会立即执行关联对象的sql语句,当访问主对象中的数据时才会执行关联对象的sql语句。

图片延迟加载3种实现方式

匿名 (未验证) 提交于 2019-12-03 00:37:01
定义:延迟加载也称为惰性加载,即在长网页中延迟加载图像。用户滚动到它们之前,视口外的图像不会加载。这与图像预加载相反,在长网页上使用延迟加载将使网页加载更快。在某些情况下,它还可以帮助减少服务器负载。 举个例子来说明,当打开淘宝首页的时候,只有在浏览器窗口里的图片才会被加载,当你滚动首页向下滑的时候,进入视口内的图片才会被加载,而其它从未进入视口的图像不会也不会加载。 那么延迟加载有什么好处: 首先它能提升用户的体验,试想一下,如果打开页面的时候就将页面上所有的图片全部获取加载,如果图片数量较大,对于用户来说简直就是灾难,会出现卡顿现象,影响用户体验。 有选择性地请求图片,这样能明显减少了服务器的压力和流量,也能够减小浏览器的负担。 那么下面就介绍延迟加载的三种实现方式: 第一种: 首先将页面上的图片的 src 属性设为 loading.gif,而图片的真实路径则设置在 data-src 属性中,页面滚动的时候计算图片的位置与滚动的位置,当图片出现在浏览器视口内时,将图片的 src 属性设置为 data-src 的值,这样,就可以实现延迟加载。 下面是具体的实现代码: <!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < title > Lazyload 1 </ title > <

Mybatis之延迟加载

匿名 (未验证) 提交于 2019-12-03 00:22:01
延迟加载又叫懒加载,也叫按需加载。也就是说先加载主信息,在需要的时候,再去加载从信息。 . 在mybatis中,resultMap标签的association标签和collection标签具有延迟加载的功能。 查询订单信息,再按需查找关联的用户信息,即延迟查找关联的信息 1、 创建一个statement来查询订单信息 2、 创建一个statement来查询用户信息 订单映射文件 < resultMap type = "com.zyj.mybatis.dto.OrdersExt" id = "OrderRstMap" > <!-- 订单信息 --> < id column = "id" property = "id" /> < result column = "createtime" property = "createtime" /> <!-- 用户信息(一对一) --> <!-- select:指定关联查询的查询statement(即查询用户的statement的id),然后将查询结果,封装到property属性指定的变量中 --> <!-- column:通过column指定的列所查询出的结果,作为select指的statement的入参 --> <!-- 注意:如果select指定的statement,入参需要多个值,需要在column中{col1=prop1,col2

什么是hibernate懒加载?什么时候用懒加载?为什么要用懒加载?

岁酱吖の 提交于 2019-12-02 20:38:35
所谓懒加载(lazy)就是延时加载,延迟加载。 什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载。 至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,明显用缓存不太合适, 因为内存容量有限 ,为了减少并发量,减少系统资源的消耗, 我们让数据在需要的时候才进行加载,这时我们就用到了懒加载。 比如部门ENTITY和员工ENTITY,部门与员工1对多,如果lazy设置为 false,那么只要加载了一个部门的po,就会根据一对多配置的关系把所有员工的po也加载出来。但是实际上有时候只是需要用到部门的信息,不需要用到 员工的信息,这时员工po的加载就等于浪费资源。如果lazy设置为true,那么只有当你访问部门po的员工信息时候才回去加载员工的po的信息。 hibernate3.0中lazy有三个值,true,false,proxy,默认的是lazy="proxy". 具体设置成什么要看你的需求,并不是说哪个设置就是最好的。 假如在student对象中包含一个head对象 如果你确定在用student对象的时候就要用到head对象里的属性,那你就设置立即加载,因为设置立即加载那么在查询student的同时就会查询 student的head,hibernate就会在查询的时候关联两张表从而生成的sql就可能只有一条。而如果你设置的是延迟加载,那么肯定会要生成 1+N条sql语句

Hibernate延迟加载机制

别等时光非礼了梦想. 提交于 2019-12-02 20:38:18
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。下面我们就分别介绍这些种类的延迟加载的细节。 A、实体对象的延迟加载: 如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相应的配置,如下所示: <hibernate-mapping> <class name=”com.neusoft.entity.User” table=”user” lazy=”true”> …… </class> </hibernate-mapping> 通过将class的lazy属性设置为true,来开启实体的延迟加载特性。如果我们运行下面的代码: User user=(User)session.load(User.class,”1”);(1) System.out.println(user.getName());(2) 当运行到(1)处时,Hibernate并没有发起对数据的查询,如果我们此时通过一些调试工具(比如JBuilder2005的Debug工具),观察此时user对象的内存快照,我们会惊奇的发现,此时返回的可能是User$EnhancerByCGLIB$$bede8986类型的对象

hibernate 如何实现延迟加载

我怕爱的太早我们不能终老 提交于 2019-12-02 20:38:02
延迟加载: 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了 对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。下面我们就分别介绍这些种类的延迟加载的细节。 A、实体对象的延迟加载: 如果想对实体对象使用延迟加载,必须要在实体的映射配置文件中进行相应的配置,如下所示: <hibernate-mapping> <class name=”net.ftng.entity.user” table=”user” lazy=”true”> …… </class> </hibernate-mapping> 通过将class的lazy属性设置为true,来开启实体的延迟加载特性。如果我们运行下面的代码: User user=(User)session.load(User.class,”1”);(1) System.out.println(user.getName());(2) 当运行到(1)处时,Hibernate并没有发起对数据的查询,如果我们此时通过一些调试工具(比如JBuilder2005的Debug工 具),观察此时user对象的内存快照,我们会惊奇的发现,此时返回的可能是User$EnhancerByCGLIB$$bede8986类型的对象,