`
xiexd
  • 浏览: 248619 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

深入iBatis的Cache[转载自javaeye---NetBus 的心得体会]

阅读更多


关键字: ibatis cache

概述
  • iBatis对查询结果集进行本地缓存。
  • Cache 的key由haskcode、checksum、查询参数、sqlmap Id、sql语句、调用方法名等构成。由此可以看出,不同的参数会有不同的Key。注意,他不是以查询参数的Class的hashcode或 toString方法作为key的一部分,而是以在sqlmap使用的变量的集合。
  • queryForObject和queryForList都可以缓存。其它片断不支持。
  • 可以设定为定时刷新或受条件触发刷新Key。如:在执行Update的时候,可以刷新Cache。
    刷新Cache时,无法手动控制刷新单条记录。只能刷新该Cache ID的全部Cache。
  • 目前有4种Cache实现,但是无法自定义扩展Cache。
  • Cache的数量可以指定。
  • Cache的put和get方法内有同步,外部无。所以同一参数同时查询时,Cache是不能命中的。在有一个结果put到Cache后,后续查询才能命中。
相关示例代码如下: Xml代码
  • <cachemodel< font=""> id ="lruCache" type ="LRU" serialize ="true" readOnly ="false" >
  • <property< font=""> name ="reference-type" value ="WEAK" />
  • <flushonexecute< font=""> statement ="insertAccount" />
  • <flushonexecute< font=""> statement ="updateAccount" />
  • <flushonexecute< font=""> statement ="deleteAccountById" />
  • </cachemodel>
  • <select< font=""> id ="selectAccountById" parameterClass ="int" resultClass ="Account" cacheModel ="lruCache" >
  • select ACC_ID as id, ACC_FIRST_NAME as firstName,
  • ACC_LAST_NAME as lastName, ACC_EMAIL as emailAddress from ACCOUNT where ACC_ID = #id#
  • <update< font=""> id ="updateAccount" parameterClass ="Account" >
  • update ACCOUNT set ACC_FIRST_NAME =#firstName# , ACC_LAST_NAME = #lastName# , ACC_EMAIL =#emailAddress# where ACC_ID = #id#
  • </update>
  • <cachemodel id="lruCache" type="LRU" serialize="true" readonly="false"> <property name="reference-type" value="WEAK"> <flushonexecute statement="insertAccount"> <flushonexecute statement="updateAccount"> <flushonexecute statement="deleteAccountById"> </cachemodel> <update id="updateAccount" parameterclass="Account"> update ACCOUNT set ACC_FIRST_NAME=#firstName# , ACC_LAST_NAME = #lastName# , ACC_EMAIL =#emailAddress# where ACC_ID = #id# </update>

    Cache规则
    • Type 目前有4种实现。建议用LRU或者OsCache
    • readOnly,表示Cache对象是否只读。False,表示外部更改cache内容无效。
    • Serialize,是否序列化。true,表示存贮到cache中的是系列化后的对象。
    • 组合:
      • readOnly=false, Serialize=false:Cache Session有效。如:1+n时,下次1+n将会失效。 不系列化,外部更改有效。
      • readOnly=true, Serialize=false:所有session共享Cache,取出时实例是同一个。不系列化,外部更改有效。默认的
      • readOnly=false, Serialize=true:所有session共享Cache,取出时实例不一样,但是内容一样。 系列化,外部更改无效
      • readOnly=true, Serialize=true: 同默认效果一样。
      • 看得出,主要是通过系列化来保证外部更改属性后不影响其它session的取出的结果。
    4种Cache实现
    1. LRU,最后使用的排到前面。Cache溢出时,最远被使用的就被clear。
    2. FIFO,先进先出。
    3. Memory,内存引用。该实现无数量限制。前两种是基于jvm实现。
      • WEAK,产生内存回收动作时,失效。
      • SOFT,内存不足时,失效。
      • STRONG,显式刷新时,失效。
    4. OsCache(支持分布式)。通过oscahce.properties控制。
    适应范围
    1. 频繁查询,很少更改的内容。如:分类等。
    2. 1+n查询。n是父类,数据量较少。如:查询Spu信息时,同意需要获得其品类信息。
    3. 效率低,执行频率高的SQL。如统计一类的SQL。
    4. 有了Cache机制后,1+n不再可怕。
    分享到:
    评论

    相关推荐

      apache开源项目源码ibatis-3-core-src-3.0.0.227(ibatis框架java源程序)

      apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...

      ibatis-3-core-3.0.0.242.jar.zip

      ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip

      ibatis-3-core-3.0.0.242.zip

      ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip

      ibatis-3-core-3.0.0.200

      ibatis-3-core-3.0.0.200

      iBATIS-SqlMaps-2-Tutorial_cn.pdf

      iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf

      Ibatis基本配置---[环境搭建

      Ibatis基本配置---[环境搭建

      ibatis-3-core-3.0.0.227.z

      本文将围绕"ibatis-3-core-3.0.0.227.z"这个压缩包,详细介绍其包含的元素以及相关的知识要点。 首先,"ibatis-3-core-3.0.0.227.jar"是iBatis的核心库文件,包含了iBatis框架的主要功能。这个JAR文件包含了所有...

      ibatis-3-core-3.0.0.204

      ibatis-3-core-3.0.0.204 最新官方下载版

      ibatis-sqlmap-2.3.4.741-sources.zip_4 3 2 1_ibatis-sqlm_ibatis-s

      标题 "ibatis-sqlmap-2.3.4.741-sources.zip_4 3 2 1_ibatis-sqlm_ibatis-s" 暗示了这是一个关于iBATIS SQLMap的源码包,版本号为2.3.4.741,可能是一个增强或修改后的版本,具有特定的优化和改进。描述中提到了针对...

      Ibatis源代码(ibatis-src.zip)

      在"Ibatis源代码(ibatis-src.zip)"中,我们可以深入理解其内部机制和设计思想。 首先,`release.txt`通常包含项目发布的信息,如版本号、发布日期以及可能的更新日志。这为我们提供了Ibatis当前版本的详细背景信息...

      ibatis 开发指南 和 iBATIS-SqlMaps两本图书

      《iBATIS 开发指南》和《iBATIS-SqlMaps》是两本关于Java开发领域中的重要框架——iBATIS的权威指南。这两本书详细介绍了如何使用iBATIS进行数据库交互,帮助开发者深入理解并熟练掌握这一持久层框架。 iBATIS,...

      ibatis-common包

      ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包ibatis-common包

      iBATIS-SqlMaps-2-Tutorial_cn

      《iBATIS-SqlMaps-2-Tutorial_cn》是一本针对初学者的优秀教程,它深入浅出地介绍了iBATIS这一流行的数据访问框架。iBATIS,作为Java世界中的一个轻量级持久层框架,它提供了一种将SQL查询与Java代码解耦合的方法,...

      flex 整合 spring+struts2+ibatis - 乐的日志 - 网易博客.htm

      flex 整合 spring+struts2+ibatis - 乐的日志 - 网易博客.htm flex 整合 spring+struts2+ibatis - 乐的日志 - 网易博客.htm

      ibatis-3-core-3.0.0.240.jar

      ibatic框架最新驱动--------------------

      ibatis-2-mybatis-2.3.5.zip

      《深入剖析iBatis 2.3.5:源码解析与应用实践》 iBatis,作为一款经典的Java持久层框架,曾广泛应用于各种项目之中。它的2.3.5版本更是许多开发者熟悉的里程碑。本文将围绕iBatis 2.3.5的核心特性、设计理念、源码...

      iBATIS-SqlMaps-2-快速入门教程.docx

      iBATIS-SqlMaps-2-快速入门教程 iBATIS-SqlMaps-2 是一个 Java 持久层框架,用于简化 Java 应用程序中的数据库交互。快速入门教程旨在帮助开发者快速了解 iBATIS-SqlMaps-2 的使用和配置。 知识点1:iBATIS-Sql...

      iBATIS-3-User-Guide

      ### iBATIS 3 用户指南知识点总结 #### 一、简介 - **iBATIS**:iBATIS 是一个开放源代码的框架,用于简化 Java 应用程序中的数据库访问层(DAO)开发工作。它将 SQL 命令与 Java 代码分离,并通过 XML 配置文件来...

      spring+struts2+ibatis简单登录实例--特别适新人学习

      一个简单的spring+struts+ibatis整合的实例,实现了用户登录,用户登录成功则显示欢迎信息,失败则显示用户名或密码错误,该实例非常简单基础,特别适合新人学习,工程包含了必要的资源包,部署到服务器中及可运行,...

    Global site tag (gtag.js) - Google Analytics