NHibernate 延迟加载与立即加载 (第七篇) 一.延迟加载 延迟加载可以理解为:当需要用的时候才加载. 假设我们数据库有一个Person对象,一个Country对象,其中Person属于Country,一对多关系.当我们Get()一个 Person对象的时候.并不立即把Country对象也加入来,而是当我们的代码执行到要通过Person调用Country对象的时 候,NHibernate才到数据库去查询对应的Country对象,这就叫延迟加载.相反,如果我们Get()一个Person对象…
本节内容 引入 立即加载 实例分析 1.一对多关系实例 2.多对多关系实例 结语 引入 通过上一篇的介绍,我们知道了NHibernate中默认的加载机制--延迟加载.其本质就是使用GoF23中代理模式实现,这节我们简单分析NHibernate另一种加载机制--立即加载.我用一张图片形象的展现立即加载机制. 立即加载 顾名思义,就是立刻加载相关联对象集合,与延迟加载相反.我们可以使用三种方法来立即加载,分别是:可选的lazy属性.NHibernate提供的实用类.HQL抓取策略.下面依次用实例分析…
ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模式,ViewState功不可没,通过的控件的拖拽和绑定,很快就可以搭建出来一个Web项目,其开发速度远胜Java.PHP,当年Web项目并不很重视体验,没有今天响应式,没有各种前端js框架,所以在当年的WebForm,微软是以引以为豪的. 该框架毕竟有时代局限性,随着前端的崛起,随着人们对项目体验…
假设现在有Book和Category两张表,表的关系为双向的一对多,表结构如下: 假设现在我想查询id为2的那本书的书名,使用session.get(...)方法: Session session=HibernateUtil.getSession(); Book book =(Book) session.get(Book.class,2); System.out.println(book.getName()); 当执行完第二行代码,还未执行第三行时,控制台已经打印出了sql语句,执行第三行时打印…
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过ObjectContext来操作数据库的,一看是Object打头的,自然相当庞大,方法也比较多.到了经典的4.1版本,EF小组推出了一些更简单好用的API,就是DbContext,它包括更常用的方法.看看EF小组是怎么说的,原话:The Entity Framework 4.1 release also…
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨延迟加载和预先加载 Entity Framework作为一个优秀的ORM框架,它使得操作数据库就像操作内存中的数据一样,但是这种抽象是有性能代价的,故鱼和熊掌不能兼得.但是,通过对EF的学习,可以避免不必要的性能损失.本篇只介绍关联实体的加载的相关知识,这在我之前的文章中都有介绍. 我们已经了解到EF的关联实体加载有三种方式:Lazy Loa…
数据加载分为延迟加载和预加载 EF的关联实体加载有三种方式:Lazy Loading,Eager Loading,Explicit Loading,其中Lazy Loading和Explicit Loading都是延迟加载. (一)Lazy Loading使用的是动态代理,关闭Lazy Loading,可以将LazyLoadingEnabled设为false,如果导航属性没有标记为virtual,Lazy Loading也是不起作用的. (二)Eager Loading使用Include方法关联…
EF如何操作内存中的数据和加载外键数据:延迟加载.贪婪加载.显示加载 之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的.这个系列讲讲如何使用EF操作数据库. 一.EF小试牛刀 系列文章开始的时候提示大家,必须学会且习惯使用sql Profiler(开始 - 程序 - Microsoft SQL Server 2008 - 性能工具 - Sql Server Profiler),它可以监控到ef生成的sql是什…
一. 简介 上一个章节中,也介绍了立即加载和延迟加载,但上一个章节是针对单表而言的,不含外键,立即也好,延迟也好,都是指单表中的数据.但本章节重点介绍的三种加载方式均是针对含(导航属性.外键)的情况下,查询主表,从表中的数据加载情况. 下面准备两张表:Student和StudentAddress两张表,一对一 or 零 的关系,实体结构如下,通过CodeFirst来反向生成数据库. /// <summary> /// 学生表(一个学生只能有一个地址或没有地址) /// </summary…
Mybatis的延迟加载和立即加载 示例:在一对多中,当我们有一个用户,他有100个帐户 问题1:在查询用户时,要不要把关联的账户查出来? 问题2:在查询账户时,要不要把关联的用户信息查出来? 问题1:在查询用户时,要不要把关联的账户查出来? 用户和帐户之间的关系应该是一对多的关系,一个用户对应多个账户,如果在查询用户时,同时查询到他关联的帐户,那么这些查询到的账户信息就会占据很大的内存,所以应该是是么时候使用,是么时候才查询帐户信息. 问题2:在查询账户时,要不要把关联的用户信息查出来? 帐户…
Listview异步加载之优化篇 关于listview的异步加载,网上其实很多示例了,总体思想差不多,不过很多版本或是有bug,或是有性能问题有待优化.有鉴于此,本人在网上找了个相对理想的版本并在此基础上进行改造,下面就让在下阐述其原理以探索个中奥秘,与诸君共赏… 贴张效果图先: 异步加载图片基本思想: 1.      先从内存缓存中获取图片显示(内存缓冲) 2.      获取不到的话从SD卡里获取(SD卡缓冲) 3.      都获取不到的话从网络下载图片并保存到SD卡同时加入内存并显示(视…
概念 什么是延迟加载:所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作.可以简单理解为,只有在使用的时候,才会发出sql语句进行查询,数据是分N次读取. 什么是立即加载:所谓立即加载既是所有的相关数据一次被读取出来,而不是分N次. 一.延迟加载:NHibernate延迟加载须有Session存在,且配置为Lazy=true(默认) DAL中编写方法如下: //延迟加载 public Order LazyLoad() { //返回order对象后ISession将继续存在 retur…
延迟加载:延迟加载(lazy load懒加载)是当在真正需要数据时,才执行SQL语句进行查询.避免了无谓的性能开销. 延迟加载分类:  1.类级别的查询策略 2.一对多和多对多关联的查询策略 3.多对一关联的查询策略 什么情况下使用延迟加载? 如果程序加载一个对象的目的是为了访问它的属性,可以采用立即加载.如果程序加载一个持久化对象的目的是仅仅为了获得它的引用,可以采用延迟加载. 如何配置延时加载? 在Hibernate中通过对.hbm的lazy属性来赋值,不同位置出现lazy的作用和取值也是不…
jquery-lazyload延迟加载图片   代码修改片段 function update() { var counter = 0; /**fix by weiyj start***/ elements.sort(function(a,b){ var value=$(a).offset().top-$(b).offset().top; if(value==0){ value=$(a).offset().left-$(b).offset().left; } return value; }); /…
defer为true:延迟加载脚本,在文档完成解析完成开始执行,并且在DOMContentLoaded事件之前执行完成. async(HTML5新增的属性)为true:异步加载脚本,下载完毕后再执行,在window的load事件之前执行完成…
我们什么时候使用了延迟加载呢? 先从hibernate引入这个概念吧. hibernate使用lazy属性设置延迟加载,load方法会使用延迟加载. 举个例子: 一个学生有多部手机,如果使用了延迟加载,只有在调用手机对象的方法或者属性的时候才会加载手机,这样可以节约资源.因为有些东西关系扯不清的. 预加载就是加载的时候就将与其有关的东西全部加载到内存. Servlet默认是采用延迟加载的,也就是在第一次调用该Servlet的时候才会加载该Servlet对象. 如何实现预加载呢? 在web.xml…
1.预先加载 预先加载:在对一种类型的实体进行查询时,将相关的实体作为查询的一部分一起加载.预先加载可以使用Include()方法实现. 1.加载一个相关实体类型 栗子:使用Include()方法从数据库中获取所有学生及成绩级别.导航属性实现预先加载: using (var ctx = new SchoolDBEntities()) { var stud1 = ctx.Students .Include("Standard") .Where(s => s.StudentName…
Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 如何使用 Lazy Load 依赖于 jQuery. 请将下列代码加入HTML的结尾,也就是</body>前: <script type="text/javascript" src="jquery.js"></…
EF默认是延迟加载的 延迟加载就是刚开始只会读取当前实体对应表的数据 关联表的数据不会读取 只有下面条件用到了才会再去读取 所以可能会造成N次读取数据库  需要在实体的属性加virtual关键字 延迟加载要搭配Include  加了include 会把关联表B的信息也查询出来 如果在where条件中已经用到了关联表B  那么可以不加include 懒加载就是一次性把所有的数据全部读取出来  包括关联表的所有数据…
## php自动加载 下面显示例子的文件目录结构图 一.没有使用命名空间的几种实现 test/oneClass.php class oneClass{ public function show(){ echo "这里是oneClass.php的show方法<br/>"; } } test/twoClass.php <?php class twoClass{ public function show(){ echo "这里是twoClass.php的show方…
概述 两种图片加载的效果:一种是遇到图片较多时,带读条效果的加载提示:另一种是根据滑块的位置进行预加载,用户不察觉的情况下,实现瀑布流的加载效果 详细 代码下载:http://www.demodashi.com/demo/10656.html 主要做了两种图片加载的效果 一种是遇到页面图片比较多的时候,带读条效果的加载提示(为了验证正确加载,设置了1秒钟的加载间隔时间) 另外一种是根据滑块的位置进行图片的预加载,在用户不察觉的情况下,实现瀑布流的加载效果 一.延迟加载 1.需要准备什么环境 2.…
还是以这两个表为例子 country包含零个或多个city, 这个外键关系是我后来加上去,原来没有. 然后再用Power Tool逆向, 产生如下代码 1: using System.ComponentModel.DataAnnotations.Schema; 2: using System.Data.Entity.ModelConfiguration; 3:   4: namespace EFEntity.Models.Mapping 5: { 6: public class cityMap…
1.集合常用扩展方法 Where.Max.Min.OrderBy. Select.//投影后的IEnumerable对象可以通过,AsQueryable转换数据类型 First.FirstOrDefault Single.SingleOrDefault Any():判断集合是否包含元素,返回值 bool,一般比 Coun()>0 效率高. Any 还可以指 定 条 件 表 达 式 . bool b = list.Any(p => p.Age > 50); 等 价 于 bool b =li…
用户关联的account信息,假设一个用户管理的account有100个.那么我们在查询用户的时候那100个关联的信息也被查询出来. 用的时候才去查关联的数据 这两个不同的地方就是查询的时机不同 什么是延迟加载         在真正使用数据时才发起查询,不用的时候不查询.按需加载(懒加载)     什么是立即加载         不管用不用,只要一调用方法,马上发起查询. 在对应的四种表关系中:一对多,多对一,一对一,多对多         一对多,多对多:通常情况下我们都是采用延迟加载.(用…
我是不太喜欢CNZZ的, 不过既然公司要用, 还是得加, 这个公司不知道为什么不好好优化一下, 这么多功能都做了, 难道不愿意多费几分钟优化一下这个特别影响用户体验的统计代码? 现在的移动站页面, 是有载入提示浮层的, 要在页面加载完毕后, 才会将浮层撤销, 结果CNZZ动不动加载超时, 导致浮层经常盖在那里好几分钟不动弹. 原来的代码是 <script type="text/javascript">var cnzz_protocol = (("https:&qu…
在上一章中,我们使用了Linq对Entity Framework进行了一个查询,但是通过学习我们却发现了懒加载给我来的性能上的开销是很到的,尤其是在循环中,如果数据量不是很多的情况下还可以接受,如果数据量一旦大气来,那么这个效率则是影响非常大的.那该怎么办呢?其实在Entity Framwork中,除了提供了懒加载技术还提供了一个“贪婪加载”.那么什么是贪婪加载呢?从名字上看,就是非常的粗鲁的,一次性的吧相关的数据全部查询出来,虽然在性能上说还是有点影响的,但是比起在循环中使用懒加载要强了不少了…
<script> //既视加载//var oBtn = document.getElementsByTagName('button')[0];var aImages = document.images;loadImg(aImages);window.onscroll = function () { loadImg(aImages);}; function loadImg(arr){ for (var i = 0, len = arr.length; i < len; i++) { //…
WebMvc自动配置: 搜索WebMvcAutoConfiguration自动装配类: 第一种方式通过webjars加载静态资源: https://www.webjars.org(通过maven加载依赖环境的方式) 比如:要载入jquery的环境: <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.4.1<…
异步加载图片基本思想: 1.      先从内存缓存中获取图片显示(内存缓冲) 2.      获取不到的话从SD卡里获取(SD卡缓冲) 3.      都获取不到的话从网络下载图片并保存到SD卡同时加入内存并显示(视情况看是否要显示) public class LoaderAdapter extends BaseAdapter{ private static final String TAG = "LoaderAdapter"; private boolean mBusy = fal…