- 浏览: 172095 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
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 5579hibernate映射mysql text类型字段 ... -
Open_Session_In_View详解
2012-12-11 10:32 683在没有使用Spring提供的Open Session I ... -
Could not initialize proxy - the owning Session was closed
2012-12-11 09:35 5969Could not initialize proxy - ... -
hibernate学习笔记第22讲-抓取策略
2012-10-19 09:15 875抓取策略:抓取关联对象。 1单端代理的批量抓取: ... -
hibernate学习笔记第21讲-查询缓存
2012-10-19 09:15 772hibernate查询缓存 查询缓存是针对普通属 ... -
hibernate学习笔记第20讲-二级缓存
2012-10-18 08:27 811sessionFactory可以管理二级缓存。 Hib ... -
hibernate学习笔记第19讲-一级缓存
2012-10-18 08:27 650hibernate一级缓存 一级缓存很短和se ... -
hibernate学习笔记第18讲-悲观锁-乐观锁
2012-10-18 08:27 768Hibernate对悲观锁和乐观锁的支持,主要解决并发问 ... -
hibernate学习笔记第17讲-其他Set-List-Array-Map等映射
2012-10-18 08:27 7541,set映射:set是无序的 2,List映射,l ... -
hibernate学习笔记第16讲-复合主键映射
2012-10-18 08:26 933复合(联合)主键映射: 复合主键映射一般采用把主键相关 ... -
hibernate学习笔记第15讲-component映射
2012-10-17 09:08 707Component组件映射:对象模型细粒度划分,复用率提 ... -
hibernate学习笔记第14讲-继承映射
2012-10-17 09:08 766继承映射: 1,一个类继承树映射到一张表。一般采用第一 ... -
hibernate学习笔记第13讲-jdk动态代理和CGLib
2012-10-17 09:07 1451Jdk动态代理,CGLib字节码生成 如果目标对象实现 ... -
hibernate学习笔记第11讲-多对多关联映射many-to-many
2012-10-17 09:07 833单向映射 hibernate多对多关联映射( ... -
hibernate学习笔记第10讲-一对多关联映射one-to-many双向
2012-10-16 11:18 862hihernate一对多关联映射(双向Classes&l ... -
hibernate学习笔记第9讲-一对多关联映射one-to-many单向
2012-10-16 11:18 700一对多关联映射利用了多对一关联映射的原理。 ... -
hibernate学习笔记第8讲-session_flush-数据库隔离级别
2012-10-16 11:18 874Session flush: 默认在commit之前 ... -
hibernate学习笔记第7讲-一对一唯一外键关联映射one-to-one
2012-10-16 11:18 839Hibernate一对一唯一外键关联: 就是多对一的特 ... -
hibernate学习笔记第6讲-一对一主键关联映射one-to-one
2012-10-16 11:18 830Hibernate一对一主键关联: 1,单向主键关联: ... -
hibernate学习笔记第5讲-多对一关联映射many-to-one
2012-10-15 14:00 970Hibernate 多对一映射: 关联映射 ...
相关推荐
前端开源库-markdown-it-lazy-headersMarkdown it Lazy Headers,Lazy ATX Headers插件用于Markdown it
前端项目-vanilla-lazyload,Lazyload是一个快速、轻量级和灵活的脚本,仅在图像即将进入可滚动区域的视区时才加载图像,并对渐进式JPEG图像格式提供了极好的支持。类型脚本模块定义可用。
前端项目-vue-lazyload,用于在Vue.js应用程序中延迟加载图像的Vue模块。
前端项目-jquery-lazyload-any,jquery插件为图像、iframe或任何东西提供了lazyload函数。
前端开源库-lazy-dependable懒惰可靠,通过懒惰依赖解析实现可靠
ng2-image-lazy-load, Angular2图像迟缓加载程序库 当前未维护现在,你可以尝试使用这个伟大的延迟加载 库来实现。 上面的库唯一没有的是Web工作支持- 我希望在未来的某个时候循环,或者者为tjoskar提供辅助。 ng2-...
这是react-lazy-load-image-component NPM 包的演示。 它既不打算在现实生活中使用,也不是好的编程实践的一个例子,而是要给出一个如何使用包react-lazy-load-image-component及其道具的例子。 观看现场演示: : ...
hexo-lazyload-image hexo-lazyload-image是一个hexo插件,用于使所有图像自动支持lazyload。 借助此功能,它将改善很多加载性能。 所有延迟加载图像仅在它们位于当前视口内时显示。 不必担心lazyload SEO问题,因为...
第12讲-Scala编程详解:面向对象编程之类 共12页 第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-...
Laravel开发-laravel-lazy-mysql Laravel基于懒惰MySQL的雄辩模型和查询生成器
react-lazy-load, 当子元素进入viewport时,响应它们呈现子元素 延迟加载 组件反应 延迟加载 很容易使用响应组件,它帮助你以可以预测的方式延迟加载内容。 速度快,工作在 IE8+,6KB 缩小,在默认情况下使用去抖...
第12讲-Scala编程详解:面向对象编程之类 共12页 第13讲-Scala编程详解:面向对象编程之对象 共9页 第14讲-Scala编程详解:面向对象编程之继承 共13页 第15讲-Scala编程详解:面向对象编程之Trait 共14页 第16讲-...
hqy-lazyload 一个轻量级的纯JavaScript脚本,用于延迟加载和多服务图像。 它可以在包括IE7 +在内的所有现代浏览器中使用。 它是用纯JavaScript编写的,因此它不依赖于jQuery之类的第三方库。 它使您可以延迟加载...
$ npm i vue-lazyload -S CDN CDN: : < script src =" https://unpkg.com/vue-lazyload/vue-lazyload.js " > </ script > < script > Vue . use ( VueLazyload ) . . . </ script > ...
安装npm install vue-lazy-container或者yarn add vue-lazy-container用法在mian.js中编写以下内容: import VueLazyContainer from "vue-lazy-container" ;Vue . use ( VueLazyContainer ) ; 例子: < template> &...
Q.lazy() 懒散地兑现诺言。 npm install q-lazy 关于这是的简单插件,可让您创建懒惰的Promise。 这样的承诺只有在对它们调用.then()之后才开始解决。用法 var Q = require ( 'q' ) ;require ( 'q-lazy' ) ; // ...
vue-lazyload, 在你的应用程序中,你的图像或者组件的一个 Vue.js 插件 lazyload 用于应用程序中lazyloading图像的Vue模块。 这个项目的一些目标值得注意:轻巧,功能强大,易于使用处理任何图像类型加载图像时添加...
hibernate的类级别检索策略和检索策略的lazy、fetch、batch-size属性使用
本文介绍了浅谈vue-lazyload实现的详细过程,分享给大家,也给自己留个笔记 首先 ,在命令行输入npm install vue-lazyload&&cnpm install vue-lazyload 然后,在main.js里引入这个模块。 import 'VueLazyload' from ...
前端开源库-mocha-lazy-bddMocha Lazy BDD,Mocha的Lazy BDD接口,为ES5 项目提供rspec风格的let/subject宏。