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 中,本文的代码见附件
分享到:
相关推荐
`lazy="true"` 的使用场景通常是,当一个大型实体类中包含了很多关联的对象,而这些关联对象在大多数情况下并不需要立即加载。例如,一个用户对象可能关联了多个地址、订单等,如果在加载用户时一并加载所有关联数据...
在Hibernate中,当设置关联属性的`fetch`或`lazy`属性为`true`时,表示该关联属性采用懒加载方式。这意味着,在获取主对象时,Hibernate不会立即加载与其关联的子对象。例如,在用户(User)与帖子(Post)之间的多...
在Flex中使用Gilead和Hibernate的懒加载,首先需要确保在Hibernate配置文件中对关联实体设置了懒加载属性。例如,如果有一个`User`类和一个`Address`类,`User`中包含一个`List<Address>`,那么在`User`的映射文件中...
当我们将一个类或集合的`lazy`属性设置为`true`时,Hibernate会在需要时才去加载关联的对象,而不是在加载主对象时一并加载。这样可以避免不必要的数据库查询,提高性能。 **3. 错误和注意事项** 延迟加载可能导致...
3. 集合延迟加载:对于一对多(、)和多对一关系,可以设置`lazy="true"`、`lazy="false"`或`lazy="extra"`。`lazy="true"`会在集合被访问时加载,`lazy="false"`会在加载实体时同时加载集合,而`lazy="extra"`提供...
当我们声明一个集合为懒加载时,Hibernate会在映射文件(如.hbm.xml或使用注解)中配置`lazy="true"`。这样,Hibernate不会在初始化实体时加载整个集合,而是生成一个代理对象来代替真实的集合。当尝试访问这个代理...
比如,当设置`lazy=true`时,只有在首次访问集合时才会触发加载,而在此之前不会执行任何数据库查询操作。同时,如果集合已经被初始化,则在后续的操作中,如添加、删除元素等,将不会导致额外的数据库操作。 #### ...
要在Hibernate中启用实体对象的延迟加载,需要在映射文件中为相应的类添加`lazy="true"`属性,例如: ```xml <class name="com.neusoft.entity.User" table="user" lazy="true"> ... ``` **工作原理:** 当执行...
开发过程中,可以使用如Hibernate Profiler这样的工具来监控和分析Hibernate的执行行为,帮助识别潜在的懒加载问题和性能瓶颈。 总之,Hibernate的懒加载机制是数据库访问优化的重要手段,但需要谨慎使用,以免引入...
当使用Hibernate的`Session.load()`方法或在映射文件中设置了`lazy="true"`时,Hibernate并不会立即从数据库中获取关联对象的所有数据,而是创建一个代理对象。这个代理对象在需要访问其属性时才会执行实际的数据库...
当我们定义这些关系时,如果不希望在加载父对象时立即加载子对象,可以设置`fetch`属性为` FetchType.LAZY`。例如: ```java @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType....
当使用 `session.load()` 方法加载实体时,Hibernate 并不会立即查询数据库,而是返回一个代理对象。这个代理对象包含必要的信息,以便在真正需要访问实体属性时再进行数据库查询。 ##### 示例代码 ```java User ...
在描述中提到的问题是,当使用DWR调用Hibernate查询方法时,控制台显示了大量的SQL语句,导致性能下降。这通常是由Hibernate的延迟加载机制失效引起的。延迟加载意味着关联的对象或集合只在真正需要时才进行数据库...
在Hibernate中,实体对象的延迟加载可以通过在映射文件中设置`lazy="true"`来启用。例如,对于名为`com.neusoft.entity.User`的实体类,映射配置如下: ```xml <Hibernate-mapping> <class name=...
- **Hibernate中的n+1查询问题**:当使用默认的立即检索策略时,Hibernate会在检索一个对象的同时检索其关联的所有对象。例如,在一个`Customer`与多个`Order`的关联关系中,如果数据库中有`n`个客户,则Hibernate将...
在这个例子中,当我们调用`user.getAddresses()`时,由于`@OneToMany(lazy = true)`,Hibernate会执行额外的SQL来获取`Address`列表。 然而,需要注意的是,如果在事物之外访问懒加载属性,可能会抛出`...
在Hibernate中,可以通过在实体的映射配置文件中设置`lazy="true"`来启用实体对象的延迟加载。 例如,对于一个User实体: ```xml <hibernate-mapping> <class name=...
当我们在 Hibernate 中使用懒加载特性时,可能会遇到 LazyInitializationException 异常,这是因为 Hibernate 的 Session 生命周期太短,导致了懒加载失败。 为了解决这个问题,我们可以使用 Spring 提供的一个支持...
在Hibernate中启用实体对象的延迟加载,需在实体的映射配置文件中设置`lazy="true"`属性。例如: ```xml <hibernate-mapping> <class name="net.ftng.entity.user" table="user" lazy="true"> ... </hibernate-...