`
afuer
  • 浏览: 8896 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

当设置lazy=true时,怎样使用extjs和Hibernate

 
阅读更多
   extjs是早期富客户用的比较多的框架,目前大家也都在使用。Hibernate是目前大部分公司都在使用的ORM映射工具。本来他们之间没有什么联系,但当他们结合在一起时就会出现各式各样的问题。如果你正在使用Hibernate和extjs,关注一下这篇文章应该对你大有益处。
    
    1)从http://code.google.com/p/rich-hibernate-lazy/downloads/list 下载相关的文档和jar文件。
注:后台如何搭建,请参照里面的中文文档,如果还不明白,请参照demo,这里只介绍前台extjs如何搭建。
    2)下载extjs,并放在相应的目录,同时把css和js文件添加到相应的目录,如下所示:
<link href="../js/extjs/resources/css/ext-all.css" rel="stylesheet"
			type="text/css" />
		<script src="../js/extjs/ext-all.js" type="text/javascript">
</script>

   3)添加lazyHibernate,开源并且没有添加版权的的js文件,代码如下所示:
    
	<script type="text/javascript"
			src="../js/afuer/lazyHibernate_js_base.js">
</script>

		<script type="text/javascript"
			src="../js/afuer/lazyHibernate_extjs_base.js">
</script>

  4)添加跟后台对应的model类:
   
Ext.define('User', {
		extend : 'Ext.data.Model',
		fields : [ {
			name : 'id',
			type : 'int'
		}, {
			name : 'username',
			type : 'string'
		}, {
			name : 'roles<0>_name',
			type : 'string'
		}, {
			name : 'organization_name',
			type : 'string'
		} ]
	});

  注: roles<0>_name 表达的是关联关系,roles[0].name

   5)添加extjs的特殊的store存储类:
   
var store1 = Ext.create('Ext.data.Store', {
			model : 'User',
			autoLoad : true,
			proxy : Ext.create('LazyHibernate.LazyAjax', {
				url : "listForExtjs"
			})

		});

   注: 'LazyHibernate.LazyAjax' 为lazyHibernate创建。

  6)把store给datagrid panel即可:
   
var grid = Ext.create('Ext.grid.Panel', {
			renderTo : Ext.getBody(),
			store : store1,
			width : 1000,
			height : 200,
			title : 'Show users with Lazy Hibernate in ExtJS',
			columns : [ {
				text : 'Name',
				width : 100,
				sortable : false,
				hideable : false,
				dataIndex : 'username'
			}, {
				text : 'ID ',
				flex : 1,
				dataIndex : 'id'
			}, {
				text : 'roleName, field base on  roles<0>_name ',
				flex : 1,
				dataIndex : 'roles<0>_name'
			}, {
				text : 'roleName, field base on roles[0].name',
				flex : 1,
				dataIndex : 'roles[0].name'
			}, {
				text : 'Org Name, field base on organization_name',
				flex : 1,
				dataIndex : 'organization_name'
			}

			]
		});


注:这样extjs不但可以使用懒加载,而且datagrid可以直接使用关联关系的属性。甚至1对多都可以用。因为RichLazyHibernate为顶端架构,所以看起来好像步骤有些多,如果你对Hibernate和extjs很熟悉,则觉得这部分代码异常简单,只需要配置一下就可以使用。代码位于demo的/userview/base_extjs_test1.jsp 中,本文的代码见附件

   
分享到:
评论
1 楼 li1989a 2015-12-10  
lazyHibernate_extjs_base.js 是什么啊

相关推荐

    spring中lazy=“true”的正常读取关联表(用opensessioninview)

    `lazy="true"` 的使用场景通常是,当一个大型实体类中包含了很多关联的对象,而这些关联对象在大多数情况下并不需要立即加载。例如,一个用户对象可能关联了多个地址、订单等,如果在加载用户时一并加载所有关联数据...

    hibernate 中的lazy属性祥解.txt

    在Hibernate中,当设置关联属性的`fetch`或`lazy`属性为`true`时,表示该关联属性采用懒加载方式。这意味着,在获取主对象时,Hibernate不会立即加载与其关联的子对象。例如,在用户(User)与帖子(Post)之间的多...

    gilead hibernate lazyload例子

    在Flex中使用Gilead和Hibernate的懒加载,首先需要确保在Hibernate配置文件中对关联实体设置了懒加载属性。例如,如果有一个`User`类和一个`Address`类,`User`中包含一个`List&lt;Address&gt;`,那么在`User`的映射文件中...

    Hibernate延时加载与lazy机制.doc

    当我们将一个类或集合的`lazy`属性设置为`true`时,Hibernate会在需要时才去加载关联的对象,而不是在加载主对象时一并加载。这样可以避免不必要的数据库查询,提高性能。 **3. 错误和注意事项** 延迟加载可能导致...

    Hibernate延迟加载

    3. 集合延迟加载:对于一对多(、)和多对一关系,可以设置`lazy="true"`、`lazy="false"`或`lazy="extra"`。`lazy="true"`会在集合被访问时加载,`lazy="false"`会在加载实体时同时加载集合,而`lazy="extra"`提供...

    hibernate在集合上的lazy策略

    当我们声明一个集合为懒加载时,Hibernate会在映射文件(如.hbm.xml或使用注解)中配置`lazy="true"`。这样,Hibernate不会在初始化实体时加载整个集合,而是生成一个代理对象来代替真实的集合。当尝试访问这个代理...

    hibernate

    比如,当设置`lazy=true`时,只有在首次访问集合时才会触发加载,而在此之前不会执行任何数据库查询操作。同时,如果集合已经被初始化,则在后续的操作中,如添加、删除元素等,将不会导致额外的数据库操作。 #### ...

    hibernate延迟加载解决

    要在Hibernate中启用实体对象的延迟加载,需要在映射文件中为相应的类添加`lazy="true"`属性,例如: ```xml &lt;class name="com.neusoft.entity.User" table="user" lazy="true"&gt; ... ``` **工作原理:** 当执行...

    Hibernate lazy延迟加载

    开发过程中,可以使用如Hibernate Profiler这样的工具来监控和分析Hibernate的执行行为,帮助识别潜在的懒加载问题和性能瓶颈。 总之,Hibernate的懒加载机制是数据库访问优化的重要手段,但需要谨慎使用,以免引入...

    hibernate 延迟加载.docx

    当使用Hibernate的`Session.load()`方法或在映射文件中设置了`lazy="true"`时,Hibernate并不会立即从数据库中获取关联对象的所有数据,而是创建一个代理对象。这个代理对象在需要访问其属性时才会执行实际的数据库...

    hibernate的lazy策略forClass

    当我们定义这些关系时,如果不希望在加载父对象时立即加载子对象,可以设置`fetch`属性为` FetchType.LAZY`。例如: ```java @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType....

    hibernate延迟加载

    当使用 `session.load()` 方法加载实体时,Hibernate 并不会立即查询数据库,而是返回一个代理对象。这个代理对象包含必要的信息,以便在真正需要访问实体属性时再进行数据库查询。 ##### 示例代码 ```java User ...

    Dwr+Hibernate的Lazy问题

    在描述中提到的问题是,当使用DWR调用Hibernate查询方法时,控制台显示了大量的SQL语句,导致性能下降。这通常是由Hibernate的延迟加载机制失效引起的。延迟加载意味着关联的对象或集合只在真正需要时才进行数据库...

    Hibernate延迟加载介绍.doc

    在Hibernate中,实体对象的延迟加载可以通过在映射文件中设置`lazy="true"`来启用。例如,对于名为`com.neusoft.entity.User`的实体类,映射配置如下: ```xml &lt;Hibernate-mapping&gt; &lt;class name=...

    Hibernate实战笔记

    - **Hibernate中的n+1查询问题**:当使用默认的立即检索策略时,Hibernate会在检索一个对象的同时检索其关联的所有对象。例如,在一个`Customer`与多个`Order`的关联关系中,如果数据库中有`n`个客户,则Hibernate将...

    hibernate抓取策略和懒加载案例

    在这个例子中,当我们调用`user.getAddresses()`时,由于`@OneToMany(lazy = true)`,Hibernate会执行额外的SQL来获取`Address`列表。 然而,需要注意的是,如果在事物之外访问懒加载属性,可能会抛出`...

    Hibernate的延迟加载

    在Hibernate中启用实体对象的延迟加载,需在实体的映射配置文件中设置`lazy="true"`属性。例如: ```xml &lt;hibernate-mapping&gt; &lt;class name="net.ftng.entity.user" table="user" lazy="true"&gt; ... &lt;/hibernate-...

    Spring IOC Bean标签属性介绍(教学视频+源代码)

    1.4 当 Scope="singleton" 且 lazy-init="true" 时 1.5 当scope="prototype"时 1.6 当scope="prototype" 且 lazy-init="true" 时 1.7 小结 1.8 depends-on 1.8.0 实体类JavaBean 1.8.0.1 Student类 1.8.1 配置文件都...

Global site tag (gtag.js) - Google Analytics