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

延迟加载技术及其在iBATIS中的实现

    博客分类:
  • Java
阅读更多
O/R映射框架的延迟加载技术实现大体上有这么4种(参看Martin Fowler的意见):
(http://www.martinfowler.com/eaaCatalog/lazyLoad.html)

There are four main varieties of lazy load. Lazy Initialization uses a special marker value (usually null) to indicate a field isn't loaded. Every access to the field checks the field for the marker value and if unloaded, loads it. Virtual Proxy is an object with the same interface as the real object. The first time one of its methods are called it loads the real the object and then delegates. Value Holder is an object with a getValue method. Clients call getValue to get the real object, the first call triggers the load. A ghost is the real object without any data. The first time you call a method the ghost loads the full data into its fields.

通过阅读源代码,发现iBATIS中的延迟加载是用上述方式中的虚拟代理实现的.

在动态代理的实现上, iBATIS有Java动态代理和CGLIB两种实现方案,iBATIS把用CGLIB实现的方案称为Enhanced的方案,可见CGLIB的效率会比java的动态代理效率要高.
在iBATIS首先判断是否定义了延迟加载,如果定义了,则利用Lazy的Loader来提取数据(返回一个Proxy).如没有执行对这个的任何操作,或者只是不再使用(finalize),则不做处理,否者就加载真正的对象.

可以通过阅读类
com.ibatis.sqlmap.engine.mapping.result.loader.LazyResultLoader
的源码获取更多的细节.
分享到:
评论

相关推荐

    ibatis 配置文件详解

    SQL映射文件,如`User.xml`,是ibatis中最重要的组成部分之一,用于定义SQL语句和结果映射规则。映射文件的结构通常包括以下元素: - **typeAlias**:定义类型别名,简化SQL语句中的类型引用。 - **resultMap**:...

    ibatis资料大全

    - **延迟加载**:延迟加载是在需要时才加载关联对象的数据,从而减少初始查询时的数据量。 - **动态映射**:支持在运行时动态构建SQL语句,提高了代码的灵活性。 - **事务管理**: - **基于JDBC的事务管理机制**:...

    ibatis 一对多

    在实际应用中,我们还可以通过动态SQL来灵活控制一对多的加载,例如延迟加载(lazy loading)或按需加载。`<if>` 和 `<choose>` 等标签可以用来条件性地执行不同的SQL片段,以优化性能。 总的来说,`iBatis` 的一对...

    ibatis配置文件

    在本文中,我们将深入探讨ibatis配置文件的关键组成部分及其如何影响ibatis框架的运行机制。ibatis(现在通常称为MyBatis)是一个优秀的持久层框架,它将SQL语句与Java代码分离,允许开发者直接编写SQL语句并映射到...

    IBATIS参考文档

    ### IBATIS参考文档知识点详述 #### 一、IBATIS简介 ...通过对IBATIS的基本原理、优点、缺点及其安装配置流程的学习,开发者可以更好地评估是否适合在自己的项目中采用这一框架,并掌握其实现方法。

    iBatis2.0文档

    - **延迟加载**:通过配置文件中的 `<autoMapping>` 或 `<lazyLoading>` 标签来启用。 #### 七、iBatis高级特性 - **数据关联**:用于处理一对多或一对一的数据关系。 - **动态映射**:支持 SQL 语句的动态构建,...

    ibatis调用oracle存储过程

    在`SqlMapConfig.xml`文件中,我们配置了ibatis的基本设置,包括缓存模型、增强功能、延迟加载等,并指定了事务管理器和数据源的信息。数据源部分包含了连接数据库所需的驱动、URL、用户名和密码等信息。 #### 步骤...

    ibatis2.0开发指南

    - **延迟加载**:通过配置实现懒加载,提高应用性能。 2. **动态映射** - **动态SQL**:支持if、choose、when、otherwise等标签构造动态SQL语句。 - **参数传递**:通过`#{}`语法传递参数值,支持类型转换和空值...

    ibatis 开发指南

    - **半自动化**: 在ibatis中,程序员需要编写SQL语句,并明确地指定结果集如何映射到Java对象。这使得ibatis非常适合那些需要精细控制SQL执行的应用场景。 - **灵活性**: 由于ibatis不完全封装数据库访问细节,因此...

    ibatis开发

    在ibatis中,可以通过配置文件定义一对多的关系,例如一个用户可以有多个订单。通常采用嵌套查询的方式实现。 - **一对一关联** 类似地,一对一的关联也可以通过嵌套查询或嵌套结果的方式来实现。 #### 六、高级...

    ibatis简单实现与配置

    - `lazyLoadingEnabled`: 是否启用延迟加载,默认为`true`。 - `enhancementEnabled`: 是否开启运行时字节码增强,默认为`false`,主要用于AOP代理。 - `useStatementNamespaces`: 是否使用命名空间来引用...

    ibatis 使用简单配置

    在此配置文件中,我们定义了数据库连接的属性、缓存设置以及其他一些高级特性,如延迟加载等。其中,`<sqlMap>`元素用于引入具体的SQL映射文件。 3. **创建SqlMapClient实例** - **SqlMapUtil类** 下面是创建`...

Global site tag (gtag.js) - Google Analytics