延迟加载

Mybatis的延迟加载

夙愿已清 提交于 2019-12-28 02:41:29
在实际开发中,有的数据不需要立即加载,而是需要的时候再去加载,不需要用到的时候则不去加载,这就是 延时加载 ,也称为 按需加载(懒加载) 。 利 : 提高数据库性能 弊 : 需要时候在查询,存在大批量的数据查询。 assocation的延时加载 要求:查询账户信息,同时按需加载用户信息。 创建实体类 package com . liang . domain ; import java . io . Serializable ; /** * 账户实体类 */ public class Account implements Serializable { private int id ; private int uid ; private Double money ; private User user ; public User getUser ( ) { return user ; } public void setUser ( User user ) { this . user = user ; } public int getId ( ) { return id ; } public void setId ( int id ) { this . id = id ; } public int getUid ( ) { return uid ; } public void

Hibernate的查询优化策略

旧时模样 提交于 2019-12-27 07:48:34
文章目录 1. 延迟加载 1.1 类级别的延迟加载 1.2 关联级别的延迟加载 2. 抓取策略 2.1 在<set>标签上的fetch和lazy 2.1 在<many-to-one>标签上的fetch和lazy 3. 批量抓取 1. 延迟加载 延迟加载(也称为懒加载)是Hibernate关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的, 所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作 。 通常将延迟加载分为两类:一类叫做类级别延迟,另一类叫做关联级别的延迟。类级别的延迟指的是查询某个对象的时候,是否采用有延迟,这个通常在<class>标签上配置lazy属性。关联级别的延迟指的是,查询一个对象的关联对象的时候是否采用延迟加载,这个通常在<set>或<many-to-one>上配置lazy属性。 1.1 类级别的延迟加载 使用load方法检索某个对象的时候,这个类是否采用延迟加载的策略,就是类级别的延迟。类级别的延迟一般在<class>上配置lazy属性,lazy的默认值是true,默认是延迟加载的,所以使用load方法去查询的时候,不会马上发送SQL语句,当真正使用该对象的时候,才会发送SQL语句。 Customer customer = session . load ( Customer . class , 1 L ) ;

mybatis中resultMap配置细则

人走茶凉 提交于 2019-12-26 02:39:28
resultMap算是mybatis映射器中最复杂的一个节点了,能够配置的属性较多,我们在 mybatis映射器配置细则 这篇博客中已经简单介绍过resultMap的配置了,当时我们介绍了resultMap中的id和result节点,那么在resultMap中除了这两个之外,还有其他节点,今天我们就来详细说说resultMap中的这些节点。 如果小伙伴对mybatis尚不了解,建议先翻看博主前面几篇博客了解一下,否则本文你可能难以理解,老司机请略过。 概览 先来看看resultMap中都有那些属性: <resultMap> <constructor> <idArg/> <arg/> </constructor> <id/> <result/> <association property=""/> <collection property=""/> <discriminator javaType=""> <case value=""></case> </discriminator> </resultMap> 我们看到,resultMap中一共有六种不同的节点,除了id和result我们在 mybatis映射器配置细则 这篇博客中已经介绍过了之外,还剩三种,剩下的四个本文我们就来一个一个看一下。 constructor constructor主要是用来配置构造方法

System.Lazy<T>延迟加载

萝らか妹 提交于 2019-12-23 10:07:05
原文: System.Lazy<T>延迟加载 在很多情况下,有些对象需要在使用时加载或根据逻辑动态加载。有些情况如果不延迟加载,可能会影响效率甚至抛出Timeout Exception。如网络操作、数据库操作、文件IO操作 直接上代码,方便我们理解怎么通过Lazy类实现对象的延迟加载。 class Program { static void Main(string[] args) { foreach (var item in Product.GetProductListLazy()) { //下面的操作会执行Product类的构造函数 Product p = item.Value; //构造函数执行完成 int id = item.Value.Id; Console.WriteLine(id); } Console.ReadKey(); } } public class Product { public int Id { set; get; } public string Title { set; get; } public Product() { Thread.Sleep(5000); } public static IList<Lazy<Product>> GetProductListLazy() { try { Console.WriteLine("非LazyLoad加载")

jQuery延迟加载(懒加载)插件 – jquery.lazyload.js

荒凉一梦 提交于 2019-12-23 07:24:06
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 在包含很多大图片长页面中延迟加载图片可以加快页面加载速度. 浏览器将会在加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器负担. 如何使用 Lazy Load 依赖于 jQuery. 请将下列代码加入HTML的结尾,也就是 </body> 前: 1 2 < script type = "text/javascript" src = "jquery.js" ></ script > < script type = "text/javascript" src = "jquery.lazyload.js" ></ script > 你必须改变图片的标签。图像的地址必须放在 data-original 属性上。给懒加载图像一个特定的class(例如:lazy)。这样你可以很容易地进行图像插件捆绑。代码如下: 1 < img class = "lazy" alt = "" width = "640" height = "480" data-original = "img/example.jpg" /> 1 2 3 $( function () { $

jQuery延迟加载(懒加载)插件 – jquery.lazyload.js

怎甘沉沦 提交于 2019-12-23 07:23:35
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 在包含很多大图片长页面中延迟加载图片可以加快页面加载速度. 浏览器将会在加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器请求负担. Lazy Load 依赖于 jQuery. 请将下列代码加入HTML的结尾,也就是 </body> 前: Lazy Load 依赖于 jQuery. 请将下列代码加入HTML的结尾,也就是 </body> 前: 1 2 < script type = "text/javascript" src = "jquery.js" ></ script > < script type = "text/javascript" src = "jquery.lazyload.js" ></ script > 你必须改变图片的标签。图像的地址必须放在 data-original 属性上。给懒加载图像一个特定的class(例如:lazy)。这样你可以很容易地进行图像插件捆绑。代码如下: 1 < img class = "lazy" alt = "" width = "640" height = "480" data

jQuery延迟加载(懒加载)插件 – jquery.lazyload.js

佐手、 提交于 2019-12-23 07:22:07
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 在包含很多大图片长页面中延迟加载图片可以加快页面加载速度. 浏览器将会在加载可见图片之后即进入就绪状态. 在某些情况下还可以帮助降低服务器负担. Demo页面: 基本选项 淡入效果 对不支持JavaScript浏览器的降级处理 水平滚动 容器内水平滚动 容器内垂直滚动 页面内存在N多图片 经过五秒钟的延迟后加载图片 用 AJAX来加载图片 如何使用 Lazy Load 依赖于 jQuery. 请将下列代码加入HTML的结尾,也就是 </body> 前: 1 2 < script type = "text/javascript" src = "jquery.js" ></ script > < script type = "text/javascript" src = "jquery.lazyload.js" ></ script > 你必须改变图片的标签。图像的地址必须放在 data-original 属性上。给懒加载图像一个特定的class(例如:lazy)。这样你可以很容易地进行图像插件捆绑。代码如下: 1 < img class = "lazy"

Hibernate-04 延迟加载

a 夏天 提交于 2019-12-23 00:09:42
学习任务 延迟加载 Open Session In View模式 延迟加载 延迟加载(lazy load懒加载)是在真正需要数据时才执行SQL语句进行查询,避免了无谓的性能开销。 延迟加载策略的设置分为:类级别的查询策略、一对多和多对多关联的查询策略、多对一关联的查询策略。 Hibernate3.X以上的版本,默认都是采用延迟加载策略。 用于设定延迟加载特性的lazy属性如下表所示: 级别 lazy属性取值 类级别 <class>元素中lazy属性的可选值为true(延迟加载)和false(立即加载)。默认值为true。 一对多关联级别 <set>元素中lazy属性的可选值为true(延迟加载)、extra(增强延迟加载)和fasle(立即加载)。默认值为true。 多对一关联级别 <many-to-one>元素中的lazy属性的可选值为proxy(延迟加载)、no-proxy(无代理延迟加载)和false(立即加载)。默认为proxy。 类级别查询策略 类级别可选策略有:立即加载和延迟加载。默认为延迟加载。 一、立即加载 1.Dept.hbm.xml文件 <class name="com.etc.entity.Dept" table="`DEPT`" schema="scott" dynamic-update="true" lazy="false">    2.DAO代码

LINQ之延迟加载及其原理

末鹿安然 提交于 2019-12-18 18:46:10
这是 LINQ(集成化查询) 的继续及补充,在前面我已经介绍过,在LINQ中,一个重要的特性就是延迟加载,是指查询操作并不是在查询运算符定义的时候执行,而是在真正使用集合中的数据时才执行(如:在遍历集合时调用MoveNext方法时)。下面是一个简单的实例: var num = new List<int>(); num.Add(1); IEnumerable<int> query = num.Select(n => n * 10); num.Add(2); foreach (int n in query) Console.WriteLine(n); 结果输出10 20.在上面的例子中,在创建查询语句后又向集合中加入新元素,这个新元素最终也出现在查询结果中。这就是因为查询语句是在遇到foreach之后才真正执行的,再例如: Action a = () => Console.WriteLine("Foo"); //没有在控制台输出任何内容 a(); //延迟执行,输出Foo 绝大部分标准的LINQ查询运算符都具有延迟加载这种特性,但也有例外: 那些返回单个元素或返回一个数值的运算符,如First或Count。 转换运算符:ToArray,ToList,ToDictonnary,ToLookup。 以上这些运算符都会触发LINQ语句立即执行,因为它们的返回值类型不支持延迟加载。

改变DLL目录延迟加载DLL

会有一股神秘感。 提交于 2019-12-17 08:37:55
西北望长安,可怜无数山 ------------------------------------------------------ windows开发中,为了不想把exe和一堆dll放在一起,勤劳的程序员们使用了很多方法。这里罗列一下。 将dll拷贝到windows目录或system32目录中。方法可行。 挑剔的朋友不想干了,这不够绿色。不想“污染”系统盘。 手动添加系统环境变量。打开“系统”属性,添加dll目录到“PATH”系统变量(或用户变量)。测试方法可行。 程序员们很善良,不想给用户增加麻烦。 把方法2改成简单自动点。写一个bat或者再写简单exe只做上面的事。注册一下PATH变量。 程序员们很善良,不想添加PATH变量,而且觉得再写一个bat或exe,不是很友好。 使用显示加载dll方式,动态加载dll。方法当然可行。 程序会在需要的时候才去加载DLL文件,先获取到DLL文件中相关的函数入口地址,然后转换执行,执行完之后可以立即释放掉资源。显示加载具有更好的灵活性,能更加有效的使用内存,在编写大型程序时往往使用显示加载方式(如下)。 可是这样要自己实现加载dll、地址类型转换、卸载dll。好不累人。懒惰的程序员已经习惯了导入lib,include头文件了。 typedef int (*test) (int a, int b); int main(int argc