- 浏览: 179688 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
lst923:
...
【转】Java 高性能Web 开发(2)-图像合并实现 CSS Sprites -
静静-黑夜:
离开
jquery uploadify 实现批量上传,带进度显示,判断文件大小 -
lizhao6210126.com:
确认一下这3个参数'multi': true, //是否支持多 ...
jquery uploadify 实现批量上传,带进度显示,判断文件大小 -
hpuyancy:
请问,出问题了,每次仅能上传一个文件,是不是设置的问题呢?
jquery uploadify 实现批量上传,带进度显示,判断文件大小 -
许助云:
例子很好很强大,只不过在调试的时候遇到一个小问题,需要修改to ...
jquery uploadify 实现批量上传,带进度显示,判断文件大小
Hibernate lazy策略:延迟加载、懒加载。
代理的概念:只有真正使用该对象的时候才会创建。
Lazy在hibernate上:在真正使用的时候才会发出sql查询。
实现原理:采用第三方库cglib,对类生成代理类。代理可以控制源对象,并且可以对源对象的功能进行增强。
Cglib和jdk动态代理的区别:
1,cglib能够对类进行代理,jdk动态代理只能对实现了接口的类进行代理。
2,Jdk动态代理类和原类实现相同的接口
3,Cglib 代理类继承原类,生成一个子类。
Lazy在hibernate中的使用地方:可以取值true或false。
* <class>标签,可以取值true或false。默认为true。
* <property> 标签,可以取值true或false。很少用。
* 集合<set><list>,可以取值true、fasle或extra。默认为true。
* <one-to-one> 、<many-to-one> 单端关联上,可以取值false、proxy或noproxy。默认proxy
Load支持lazy,get不支持lazy。并且Load的时候只会加载普通属性,集合不会加载
Lazy的生命周期跟session一样,session关闭,lazy也失效。
Class上的lazy策略:影响的范围是普通属性的加载,对集合不起作用。
session.beginTransaction();
//不会发出sql
Group group = (Group)session.load(Group.class, 1);
//不会发出sql
System.out.println("group.id=" + group.getId());
//会发出sql
System.out.println("group.name=" + group.getName());
session.getTransaction().commit();
Group group = null;
try {
session = HibernateUtils.getSession();
session.beginTransaction();
group = (Group)session.load(Group.class, 1);
session.getTransaction().commit();
}catch(Exception e) {
e.printStackTrace();
session.getTransaction().rollback();
}finally {
HibernateUtils.closeSession(session);
}
//不能正确输出,抛出LazyInitializationException 异常,因为session已经关闭
//hibernate支持lazy策略只有在session打开状态下有效
System.out.println("group.name=" + group.getName());
集合上的lazy:建议使用extra,因为会发出智能sql。
session.beginTransaction();
//不会发出sql
Classes classes = (Classes)session.load(Classes.class, 1);
//会发出sql
System.out.println("classes.name=" + classes.getName());
//不会发出sql
Set students = classes.getStudents();
//会发出sql
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
session.getTransaction().commit();
设置<class>标签上的lazy=false
session.beginTransaction();
//会发出sql
Classes classes = (Classes)session.load(Classes.class, 1);
//不会发出sql
System.out.println("classes.name=" + classes.getName());
//不会发出sql,class上的lazy不影响集合
Set students = classes.getStudents();
//会发出sql
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
session.getTransaction().commit();
设置集合上的lazy=false,默认为true。
session.beginTransaction();
//不会发出sql
Classes classes = (Classes)session.load(Classes.class, 1);
//会发出sql,会发出两条sql分别加载Classes和Student
System.out.println("classes.name=" + classes.getName());
//不会发出sql
Set students = classes.getStudents();
//不会发出sql
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
session.getTransaction().commit();
设置集合上的lazy=extra
1,跟lazy=true效果一样。
session.beginTransaction();
//不会发出sql
Classes classes = (Classes)session.load(Classes.class, 1);
//会发出sql
System.out.println("classes.name=" + classes.getName());
//不会发出sql
Set students = classes.getStudents();
//会发出sql
for (Iterator iter=students.iterator(); iter.hasNext();) {
Student student = (Student)iter.next();
System.out.println("student.name=" + student.getName());
}
session.getTransaction().commit();
2,发出智能sql
session.beginTransaction();
//不会发出sql
Classes classes = (Classes)session.load(Classes.class, 1);
//会发出sql
System.out.println("classes.name=" + classes.getName());
//不会发出sql
Set students = classes.getStudents();
//会发出sql,发出一条比较智能的sql,直接发出count()sql
System.out.println("student.count=" + students.size());
session.getTransaction().commit();
单端关联上的lazy:可以取值false,proxy,noproxy,默认proxy,noproxy采用字节码,需要增强工具支持。
单端关联上默认lazy属性:跟集合一样
session.beginTransaction();
//不会发出sql
User user = (User)session.load(User.class, 1);
//会发出sql
System.out.println("user.name=" + user.getName());
//不会发出sql
Group group = user.getGroup();
//会发出sql
System.out.println("group.name=" + group.getName());
session.getTransaction().commit();
单端关联上lazy=false:跟集合一样
session.beginTransaction();
//不会发出sql
User user = (User)session.load(User.class, 1);
//会发出sql,发出两条sql分别加载User和Group
System.out.println("user.name=" + user.getName());
//不会发出sql
Group group = user.getGroup();
//不会发出sql
System.out.println("group.name=" + group.getName());
session.getTransaction().commit();
class上lazy=fasle,单端关联上lazy=proxy
class上的lazy 不会影响到单端关联上的lazy。
session.beginTransaction();
//会发出sql
User user = (User)session.load(User.class, 1);
//不会发出sql
System.out.println("user.name=" + user.getName());
//不会发出sql
Group group = user.getGroup();
//会发出sql
System.out.println("group.name=" + group.getName());
session.getTransaction().commit();
发表评论
-
hibernate映射mysql text类型字段,报Data too long错误
2013-05-06 11:36 5646hibernate映射mysql text类型字段 ... -
Open_Session_In_View详解
2012-12-11 10:32 771在没有使用Spring提供的Open Session I ... -
Could not initialize proxy - the owning Session was closed
2012-12-11 09:35 6003Could not initialize proxy - ... -
hibernate学习笔记第22讲-抓取策略
2012-10-19 09:15 972抓取策略:抓取关联对象。 1单端代理的批量抓取: ... -
hibernate学习笔记第21讲-查询缓存
2012-10-19 09:15 909hibernate查询缓存 查询缓存是针对普通属 ... -
hibernate学习笔记第20讲-二级缓存
2012-10-18 08:27 896sessionFactory可以管理二级缓存。 Hib ... -
hibernate学习笔记第19讲-一级缓存
2012-10-18 08:27 717hibernate一级缓存 一级缓存很短和se ... -
hibernate学习笔记第18讲-悲观锁-乐观锁
2012-10-18 08:27 797Hibernate对悲观锁和乐观锁的支持,主要解决并发问 ... -
hibernate学习笔记第17讲-其他Set-List-Array-Map等映射
2012-10-18 08:27 7951,set映射:set是无序的 2,List映射,l ... -
hibernate学习笔记第16讲-复合主键映射
2012-10-18 08:26 965复合(联合)主键映射: 复合主键映射一般采用把主键相关 ... -
hibernate学习笔记第15讲-component映射
2012-10-17 09:08 755Component组件映射:对象模型细粒度划分,复用率提 ... -
hibernate学习笔记第14讲-继承映射
2012-10-17 09:08 835继承映射: 1,一个类继承树映射到一张表。一般采用第一 ... -
hibernate学习笔记第13讲-jdk动态代理和CGLib
2012-10-17 09:07 1496Jdk动态代理,CGLib字节码生成 如果目标对象实现 ... -
hibernate学习笔记第11讲-多对多关联映射many-to-many
2012-10-17 09:07 868单向映射 hibernate多对多关联映射( ... -
hibernate学习笔记第10讲-一对多关联映射one-to-many双向
2012-10-16 11:18 894hihernate一对多关联映射(双向Classes&l ... -
hibernate学习笔记第9讲-一对多关联映射one-to-many单向
2012-10-16 11:18 732一对多关联映射利用了多对一关联映射的原理。 ... -
hibernate学习笔记第8讲-session_flush-数据库隔离级别
2012-10-16 11:18 955Session flush: 默认在commit之前 ... -
hibernate学习笔记第7讲-一对一唯一外键关联映射one-to-one
2012-10-16 11:18 877Hibernate一对一唯一外键关联: 就是多对一的特 ... -
hibernate学习笔记第6讲-一对一主键关联映射one-to-one
2012-10-16 11:18 875Hibernate一对一主键关联: 1,单向主键关联: ... -
hibernate学习笔记第5讲-多对一关联映射many-to-one
2012-10-15 14:00 1012Hibernate 多对一映射: 关联映射 ...
相关推荐
Vue-lazyload 就是一个专为 Vue.js 应用程序设计的插件,它允许我们按需加载图片,从而提高应用性能。 Vue-lazyload 插件主要解决了以下问题: 1. **减少网络资源请求**:传统方式下,所有图片都会在页面加载时...
Markdown-it-Lazy-Headers是前端开发领域的一个开源库,专门针对Markdown解析器Markdown-it设计的一款插件。这个插件的主要功能是实现"懒惰式"的ATX风格标题处理,也就是所谓的"Lazy ATX Headers"。在Markdown语法中...
前端项目-vanilla-lazyload,Lazyload是一个快速、轻量级和灵活的脚本,仅在图像即将进入可滚动区域的视区时才加载图像,并对渐进式JPEG图像格式提供了极好的支持。类型脚本模块定义可用。
《前端项目中的jQuery LazyLoad Any技术详解》 在前端开发中,优化网页加载速度和用户体验是至关重要的。jQuery LazyLoad Any是一个高效的插件,专为延迟加载图像、iframe或者其他任何元素而设计,它大大提升了页面...
Mocha-Lazy-BDD则是一个针对Mocha的扩展,它引入了RSpec(Ruby测试框架)的风格,特别是"let"和"subject"这两个宏,旨在为使用ES5语法的项目提供更加便捷的测试体验。 1. **Mocha框架基础** Mocha是一款灵活的、...
这是react-lazy-load-image-component NPM 包的演示。 它既不打算在现实生活中使用,也不是好的编程实践的一个例子,而是要给出一个如何使用包react-lazy-load-image-component及其道具的例子。 观看现场演示: : ...
这种策略显著减少了首次加载页面所需的时间,提高了用户体验,尤其是在处理大型或资源密集型应用时。 二、依赖解析 在JavaScript中,依赖管理是组织代码和确保正确执行顺序的关键部分。lazy-dependable 库提供了一...
2. 检查Vue-Lazyload的配置,如占位符设置、错误处理策略等。 3. 如果有其他插件也监听滚动事件,可能需要调整事件处理的顺序或使用Vue的`nextTick`方法确保Vue-Lazyload在适当的时间执行。 总的来说,Vue-Lazyload...
vue-lazy-hydration是一个无渲染的Vue.js组件,用于改善服务器端渲染的Vue.js应用程序的估计输入延迟和交互时间。 这可以通过使用惰性水合延迟预渲染HTML的水合来实现。 安装 npm install vue-lazy-hydration ...
react-lazy-load, 当子元素进入viewport时,响应它们呈现子元素 延迟加载 组件反应 延迟加载 很容易使用响应组件,它帮助你以可以预测的方式延迟加载内容。 速度快,工作在 IE8+,6KB 缩小,在默认情况下使用去抖...
Hibernate 是一个开源的对象关系映射框架,它允许开发者将Java对象和关系数据库的数据进行映射,从而简化数据库操作。在本篇文章中,我们将深入探讨 Hibernate 的核心概念和使用方法。 首先,创建 Hibernate 项目的...
hqy-lazyload 一个轻量级的纯JavaScript脚本,用于延迟加载和多服务图像。 它可以在包括IE7 +在内的所有现代浏览器中使用。 它是用纯JavaScript编写的,因此它不依赖于jQuery之类的第三方库。 它使您可以延迟加载...
本篇学习笔记将深入探讨Hibernate3.2的核心概念,包括环境搭建、主要接口、映射方式以及性能优化策略。 首先,让我们从搭建Hibernate3.2开发环境开始。在创建一个新的Java项目后,我们需要添加必要的库文件,主要...
本笔记将聚焦于Hibernate中的类级别检索策略以及`lazy`、`fetch`和`batch-size`这三个属性的使用,帮助开发者更高效地管理数据库查询。 1. **懒加载(Lazy Loading)** `lazy`属性是Hibernate的懒加载机制,用于...
pytest-lazy-fixture是Python测试框架pytest的一个插件,它主要解决了在使用`pytest.mark.parametrize`装饰器时,如何方便地引入和使用固定装置(fixture)的问题。在pytest中,固定装置是一种重用测试环境的方法,...
在Java的持久化框架Hibernate中,懒加载(Lazy Loading)是一种优化策略,它允许我们推迟对关联对象的加载,直到真正需要它们的时候。标题“hibernate在集合上的lazy策略”指的是Hibernate如何处理与实体相关的集合...
在Laravel框架中,"laravel-lazy-mysql"是一个关于使用懒加载(Lazy Loading)技术来优化MySQL数据库操作的实践。懒加载是一种延迟加载策略,它只在真正需要数据时才执行数据库查询,以此提高应用程序的性能和效率。...
标题:“Node.js-一个组件实现lazyload图片当在视窗内(或附近)时才加载” 在Web开发中,性能优化是一项至关重要的任务。随着网站内容的丰富,图片资源占据了很大一部分,如果不加以优化,可能会导致页面加载速度慢...
$ npm i vue-lazyload -S CDN CDN: : < script src =" https://unpkg.com/vue-lazyload/vue-lazyload.js " > </ script > < script > Vue . use ( VueLazyload ) . . . </ script > ...