`

ibatis oscache 使用中miss cache

阅读更多
原始配置信息:
<cacheModel id="userCache" type="OSCACHE" readOnly="false">
  <flushInterval hours="24" />
  <flushOnExecute statement="User.insert" />
  <flushOnExecute statement="User.update" />
  <flushOnExecute statement="User.deleteByPrimaryKey" />
  <flushOnExecute statement="Role.deleteRUserRoleByUserId" />
  <flushOnExecute statement="Workgroup.deleteRUserWorkgroupByUserId" />
  <property name="size" value="2000" />
 </cacheModel>

<select id="select" parameterClass="int" resultMap="result" cacheModel="userCache"> 
 select    ID,   LOGIN_ID,   PASSWORD,   NAME,   EMAIL,   COMPANY_ID,   STATUS,   PHONE,   GMT_UPDATE_PWD,   CONTACT_TYPE,   MOBILE,   IDX_NUM   
from       USERS  
<dynamic prepend="where">  
 <isParameterPresent>    ID=#value#  
 </isParameterPresent> 
 </dynamic> 
</select>
cache使用出现问题:  在执行第一次查询的时候,cache miss,执行数据库查询,stored cache。(这是正确的执行)
  在执行第2次查询时,继续提示cache miss.

    设置log4j.logger.com.opensymphony.oscache=DEBUG,查看cache日志输出。结果同一条记录,stored cache与 miss cache使用的key居然不一致。跟踪底层的代码,发现在生成cache  key的时候,使用了对象的hashcode,故做如下的修正:

	public boolean equals(Object obj) {
		if (obj == null) {
			return false;
		}
		if (!(obj instanceof User)) {
			return false;
		}
		User u = (User) obj;
		if (u.getId() != null && getId() != null)
			return u.getId().equals(getId());
		return super.equals(obj);
	}

	public int hashCode() {
		if (getId() != null) {
			return getId().hashCode();
		}
		return super.hashCode();
	}

问题依然没有得到解决,郁闷 ~.~!

纠结了好久,终于找到问题的原因,在保证如上重写 hashcode的基础上,修改配置文件

<cacheModel id="userCache" type="OSCACHE" readOnly="true">

cache终于能正常使用。

分享到:
评论
2 楼 cn-done 2011-01-19  
JDK 1.5.0_14
ibatis-2.3.4.726.jar
oscache-2.4.1.jar
1 楼 guanhw 2011-01-13  
说说看 你的jdk 是什么版本, oscache,ibaits 是什么版本???

相关推荐

    ibatis的使用教程

    要开始使用 Ibatis,首先需要从官方网站下载最新版本的 ibatis jar 包,以及 log4j 日志框架的 jar 包。然后,在Java项目中添加这些库,配置log4j.properties以开启SQL日志输出。接着,新建主配置文件sqlMapConfig....

    ibatis 相关使用文档及安装包ibatis 相关使用文档及安装包

    使用iBATIS时,首先需要在项目中引入iBATIS库,然后创建数据库配置文件(如`sqlmap-config.xml`),在此文件中定义数据源和事务管理器。接着,编写SQL Map文件,其中包含具体的SQL查询和存储过程。在Java代码中,...

    iBATIS缓存的使用方法

    本文将详细介绍iBATIS中的缓存使用方法,包括缓存模型的配置、不同类型的缓存控制器以及如何在SQL映射文件中应用这些缓存设置。 #### 一、缓存的基本概念 缓存是存储数据的一种临时区域,目的是减少重复查询数据库...

    ibatis中使用安全的拼接语句,动态查询,大于、小于、等于.doc

    iBatis 中使用安全的拼接语句、动态查询、大于、小于、等于 iBatis 是一个流行的持久层框架,提供了许多强大的功能来帮助开发者构建高效、安全的数据库交互应用程序。本文将详细介绍 iBatis 中使用安全的拼接语句、...

    ibatis简易使用 ibatis简易使用 ibatis简易使用

    以下是对iBATIS简易使用的详细解释: 1. **环境准备**: - **jar文件**:iBATIS框架运行需要依赖一些库文件,包括`log4j`用于日志记录,`ibatis`核心库,以及`jdbc`驱动,这些都需要添加到项目的类路径中。 - **...

    Java_ibatis-cache.rar_cache

    本篇将深入探讨iBatis缓存技术,旨在帮助你理解并掌握如何在实际项目中有效应用iBatis缓存。 首先,我们要了解iBatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的,也称为本地缓存,它存储在...

    iBatis net版中文 1.6的

    iBatis 是一款著名的开源持久层框架,专为Java应用程序设计,它允许开发者将SQL语句直接嵌入到Java代码中,从而简化了数据访问层的开发。在.NET环境中,iBatis同样提供了相应的实现,即iBatis .NET版。这个版本与...

    ibatis 使用手册

    开发指南会深入讲解如何初始化iBatis环境,包括设置配置文件、创建SqlMap文件、设计Mapper接口以及如何在Java代码中使用这些组件。此外,还会介绍如何处理结果集、执行批量操作、使用缓存机制等高级特性。 **iBatis...

    ibatis官方中文文档

    对于那些想要了解或深入掌握iBATIS,特别是想在实际项目中使用iBATIS存储过程的开发者来说,这是一份非常宝贵的学习资料。 **iBATIS简介** iBATIS(现更名为MyBatis)是一个优秀的Java持久层框架,它简化了数据库...

    IBatis简单使用

    2. **动态SQL**: IBatis支持动态SQL,这意味着开发者可以在SQL语句中根据条件自由拼接,无需在代码中进行复杂的字符串拼接。 3. **结果映射**: IBatis可以自动将查询结果映射到Java对象,也可以自定义映射规则,...

    oscache处理

    osCache可以被集成到各种Java应用中,包括Web应用,如Struts2、Spring和iBatis。下面将详细解释这些框架与osCache的结合使用及其相关知识点: 1. **Struts2与osCache**: - 在Struts2中,osCache可以用于缓存...

    ibatis3.1官方中文帮助文档

    《iBatis 3.1 官方中文帮助文档》是开发者们学习和掌握iBatis框架的重要参考资料,尤其对于那些使用中文作为主要工作语言的程序员来说,这是一份非常实用的指南。iBatis是一个优秀的持久层框架,它允许开发者将SQL...

    ibatis-api中文(真的中文)

    总的来说,这些文档覆盖了iBATIS的关键概念和实践,包括SQL Maps的创建和使用、DAO层的构建以及如何在实际项目中应用iBATIS。通过深入学习和实践,开发者可以充分利用iBATIS的灵活性和效率,简化数据库访问,提高...

    iBATIS内置别名列表

    通过对iBATIS内置别名列表的学习,我们不仅能够更好地理解iBATIS的工作原理,还能在实际项目中更加高效地使用该框架。此外,掌握这些内置别名也有助于提高配置文件的可读性和可维护性,减少因错误配置导致的问题。...

    ibatis2.0中文API

    在iBATIS 2.0中文API中,我们可以深入理解这个框架的核心功能和用法,包括一对多、多对一的关系映射、属性设置以及解决方案的详细解析。 首先,一对多和多对一的关系映射是ORM(对象关系映射)中的关键概念。在...

    ibatis_数据缓存

    值得注意的是,iBatis并不是以查询参数的Class的hashcode或toString方法作为Key的一部分,而是使用在sqlmap中使用的变量集合。 **缓存功能** - iBatis 支持`queryForObject`和`queryForList`方法的结果缓存,但其他...

    iBatis详细使用手册(.net版)[收集].pdf

    iBatis详细使用手册(.net版) iBatis是一个基于.NET框架的持久层框架,提供了一种灵活、可控的方式来实现类ORM(Object-Relational Mapping)的解决方案。下面是对iBatis的详细使用手册的知识点总结: 1. iBatis...

    .net中使用iBATIS的小例子

    在.NET中使用iBATIS时,首先需要安装iBATIS.NET库。可以通过NuGet包管理器或者直接下载源码编译来获取。在VS2008项目中,添加对iBATIS.NET的引用,这样就可以开始配置和使用了。 接着,我们看压缩包内的"数据库.txt...

    ibatis使用及环境搭建文档

    Ibatis,又称为SQL Map,是一个优秀的持久层框架,它允许开发者将SQL语句直接写在配置文件中,与Java代码进行分离,使得数据库操作更加灵活、可维护。Ibatis的主要目标是简化Java应用与数据库之间的交互,提供一种...

Global site tag (gtag.js) - Google Analytics