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而言,正真使用的时候才会发出sqlhibernate支持lazy策略只有在session打开状态下有效
1 <class>标签上:
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="com.model">
<wbr><wbr><wbr><span style="color:#ed1c24; font-weight:bold"><class name="Group" table="group5" lazy="true" > //lazy,默认true,可不写</span><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <id name="id" column="id" type="java.lang.Integer"><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <generator class="native" /><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> </id><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <property name="name" column="name" length="50" type="java.lang.String" /><br><wbr><wbr><wbr> </class><br>
</hibernate-mapping><br><br><span style="font-weight:bold">测试用例:</span><br><br>
public class LazyTest extends TestCase<br><br>
{<br><br>
public void testLoad1(){<br><wbr><wbr> Session session = null;<br><wbr><wbr> Transaction ta = null;<br><wbr><wbr> try{<br><wbr><wbr><wbr> session = HibernateUtil.getSession();<br><wbr><wbr><wbr> ta = session.beginTransaction();<br><br><wbr><wbr><wbr> //还没发出sql,lazy起延迟作用,若lazy=false,则发出sql<br><br><wbr><wbr><wbr> Group g2 = (Group) session.load(Group.class, 1);<br><wbr><wbr><wbr> Group g3 = (Group) session.get(Group.class, 1);<wbr><wbr> //不支持lazy<br><wbr><wbr><wbr> System.out.println("group.id=" + g2.getId());<wbr><wbr><wbr><wbr> //还没发出sql,<br><wbr><wbr><wbr> System.out.println("group.name=" + g2.getName()); //发出sql<br><wbr><wbr><wbr> ta.commit();<br><wbr><wbr> }catch(Exception e){<br><wbr><wbr><wbr> e.printStackTrace();<br><wbr><wbr><wbr> if(ta != null){<br><wbr><wbr><wbr><wbr> ta.rollback();<br><wbr><wbr><wbr> }<br><wbr><wbr> }finally{<br><wbr><wbr><wbr> //关闭session, user变为detached离线对象<br><wbr><wbr><wbr> HibernateUtil.closeSession(session);<br><wbr><wbr> }<br><wbr><wbr> // System.out.println("group.name=" + g2.getName());<br><wbr><wbr> // <span style="font-weight:bold"><span style="color:#ed1c24">hibernate支持lazy策略只有在session打开状态下有效,所以此出Exception</span></span><br>
}<br><br>
}<br><br style="color:rgb(237,28,36); font-weight:bold"><span style="color:#ed1c24; font-weight:bold"><class>标签上的lazy特性只对普通属性起作用</span><br style="color:rgb(237,28,36); font-weight:bold"><br style="color:rgb(237,28,36); font-weight:bold"><span style="color:#ed1c24; font-weight:bold"><class>标签上的lazy不会影响到单端关联上的lazy特性</span><br><br><br><br><br><span style="color:#ed1c24; font-weight:bold">2.<set><list>标签上,可以取值:true/false/extra,默认是true</span><br><br><span style="font-weight:bold">Classes.hbm.xml</span><br><br>
<?xml version="1.0" encoding="utf-8"?><br>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br>
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><br>
<hibernate-mapping package="com.zd.model"><br><wbr><wbr><wbr> <class name="Classes" table="classes" ><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <id name="id" column="id" type="java.lang.Integer"><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <generator class="native" /><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> </id><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <property name="name" column="name" type="java.lang.String" /><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><span style="color:#ed1c24; font-weight:bold">
<set name="students" lazy="true"></span> <span style="color:#ed1c24; font-weight:bold">
//可不配lazy,因默认是true</span><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <key column="class_id" /><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> <one-to-many class="com.zd.model.Student" /><br><wbr><wbr><wbr><wbr><wbr><wbr><wbr> </set><br><wbr><wbr><wbr> </class><br><br>
</hibernate-mapping><br><br>
测试用例:<br><br>
public void testLoad1(){<br><wbr><wbr> Session session = null;<br><wbr><wbr> Transaction ta = null;<br><wbr><wbr> try{<br><wbr><wbr><wbr> session = HibernateUtil.getSession();<br><wbr><wbr><wbr> ta = session.beginTransaction();<br><wbr><wbr><wbr> Classes c = (Classes) session.load(Classes.class, new Integer(2));<wbr> //没有sql<br><wbr><wbr><wbr> System.out.println("Class.name=" + c.getName());<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr> //发出一条sql,但不查 set<br><wbr><wbr><wbr> Set stuSet = c.getStudents();<wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr><wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
分享到:
相关推荐
Lazyload是通过延迟加载来实现按需加载,达到节省资源,加快浏览速度的目的。 网上也有不少类似的效果,这个Lazyload主要特点是: 支持使用window(窗口)或元素作为容器对象; 对静态(位置大小不变)元素做了大量...
NULL 博文链接:https://xuwoool.iteye.com/blog/1306207
图片延迟加载,可以增加用户体验,jQuery图片延迟加载插件jQuery.lazyload,使用延迟加载在可提高网页下载速度。在某些情况下,它也能帮助减轻服务器负载。
Hibernate 的延迟加载(lazy load)是一个被广泛使用的技术。这种延迟加载保证了应用只有在需要时才去数据库中抓取相应的记录。通过延迟加载技术可以避免过多、过早地加载数据表里的数据,从而降低应用的内存开销。...
Hibernate 的 lazyload 在FLEX中的解决方法例子 用的是gilead 因为LIB包太大上传很慢所以被我删掉了。
LazyLoad 图片延迟加载效果示例 LazyLoad 图片延迟加载效果示例,这是由cloudgamer编写的一个封装插件,用它可以完成不少的效果,现在这个是图片延迟效果,也就是说,我们需要显示的图片会先加载,暂时用不上的也就...
深入理解hibernate懒加载技术,正确使用懒加载
源码包 博文链接:https://tree-161219.iteye.com/blog/599949
前端经典——lazyload懒加载
实现网页内容、图片延迟加载,没有浏览到的不显示,只有浏览器看到的才显示。
Lazyload图片延迟加载效果,很值得去学习的案例!
Lazyload图片延迟加载效果
Hibernate3开始增加了通过property节点的lazy属性,为特定的属性指定延迟加载策略,以避免实体整体加载可能带来的性能浪费,尤其是像长文本之类的大字段。那么实现属性延迟加载需要做两件事: 1.修改映射配置...
博客与文章作为例子,查询一个博客的时候并不是需要将其下面的文章都加载进来。把需要延迟加载的属性使用Lazy泛型,实例时候传入一个Fun委托。
LazyLoad图片延迟加载 密码111 这个其实是给mm看的,只是图片太多 做了一个延迟加载的动作
你必须修改 HTML 代码. 在 src 属性中设置展位符图片, demo 页面使用 1x1 像素灰色 GIF 图片.... 这里可以定义特定的 class 以获得需要延迟加载的图片对象. 通过这种方法你可以简单地控制插件绑定.
jquery.lazyload用JQ实现图片延迟加载,即在浏览器看到的地方才加载图片。
源码学习,压缩包解压密码:www.cqlsoft.com
图片延迟加载实例。在chrome network中查看效果。简单易用 无冗余代码