`

ibatis resultclass "java.util.hashmap" 缓存问题

阅读更多

在做ibatis项目过程中遇到如下样式动态查询

<select id="searchByKW"      resultClass="java.util.HashMap"   
        parameterClass="java.util.HashMap">   
        <![CDATA[ 
     select * from $username$.$tablename$ where contains($username$.$tablename$.$colname$,'$kw$')>0 
     ]]>   
</select>  

 

这样的可以对不同表进行查询,返回结果映射到HashMap中,但是使用中发现当第一次使用这个语句时是可以的,但是当使用这个语句再查询别的表时报错了,这个问题是因为你查询的sql的列是变化的,但是ibatis默认的会缓存RS中的meta信息,如果你第一次查询的列和第二次查询的列不一样的话,那么第二次ibatis还会以第一次查询的列为key从RS里面获取数据,但是你的列是变化的,所以第二次取数据的时候,RS里面已经没有了你第一次的那个列了,所以会出错。 错误原因是从结果集到HashMap的映射时还按照上个表的字段进行装载,说明ibatis对上个表的结构进行了映射缓存。

使用remapResults这个属性,可以重新映射结果集。

配置文件修改如下

<select id="searchByKW"  remapResults="true"   resultClass="java.util.HashMap"    parameterClass="java.util.HashMap">   
    <![CDATA[ 
         select * from $username$.$tablename$ where contains($username$.$tablename$.$colname$,'$kw$')>0 
     ]]>   
</select>   
 

 

 

 

分享到:
评论

相关推荐

    ibatis 用HashMap解决resultClass映射

    &lt;select id="getDynamicTable" resultClass="java.util.HashMap" remapResults="true" parameterClass="java.lang.Integer"&gt; select t.* from some_table t where t.status = #{status} ``` 这里需要注意的是,`#...

    ibatis-2.3.4.726.jar,ibatis-2.3.0.677.jar,ibatis-2.3.3.720.jar下载

    iBATIS,全称为“Infrastructure for Binding Applications To SQL Maps”,是一个优秀的开源持久层框架,它允许Java开发者将SQL语句与Java代码分离,提供了一种简单但强大的在Java应用中映射SQL和结果集的方式。...

    IBatis.DataMapper.1.6.2.bin.zip

    本篇文章将围绕"IBatis.DataMapper.1.6.2.bin.zip"和"IBatis.DataMapper.1.9"这两个开发包,深入探讨其核心概念、功能特性以及版本间的差异,帮助开发者更好地理解和应用这一框架。 1. **IBatis DataMapper简介** ...

    ibatis.util包

    1. **Logger**: Ibatis提供了一个日志接口`org.apache.ibatis.logging.Log`,而`ibatis.util.LogFactory`则负责根据用户配置的实现(如Log4j、SLF4J或Java内置的日志系统)创建对应的日志实例,用于记录SQL执行和...

    ibatis-2.3.3.720.jar

    ibatis-2.3.3.720.jar

    ibatis2.3.4.8.jar 和 ibatis-2.3.4.726.jar两个版本的下载

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责简化数据库操作,将SQL语句与Java代码分离,使得开发人员能够更加专注于业务逻辑。在本主题中,我们将深入探讨Ibatis的两个特定版本:ibatis2.3.4.8....

    ibatis-core-3.0.jar org.apache.ibatis.annotations.Param

    `org.apache.ibatis.annotations.Param`是MyBatis中的一个重要注解,用于处理方法参数映射。 `@Param`注解主要用于SQL查询中的动态参数绑定,尤其是在动态SQL语句中。在MyBatis的映射文件或者Mapper接口中,当我们...

    ibatis-2.3.4.732.jar

    ibatis-2.3.4.732.jar

    ibatis-2.3.0.677.jar

    描述 "ibatis jar src ibatis 2 3 0 677" 暗示这个压缩包可能包含了 iBATIS 框架源代码的副本,这对于开发者来说非常有价值,因为他们可以直接查看和理解框架内部的工作原理,进行定制化开发或者调试问题。...

    IBatis.DataMapper.1.6.2

    标题 "IBatis.DataMapper.1.6.2" 指的是 IBatis 数据映射器的一个特定版本,即 1.6.2 版本。IBatis 是一个流行且广泛使用的开源持久层框架,它允许开发者将 SQL 查询与.NET 应用程序中的对象模型进行解耦,提供了一...

    ibatis-2.3.2.715.jar

    6. 缓存机制:为了提升性能,Ibatis提供了一级缓存和二级缓存。一级缓存是SqlSession级别的,对于同一个SqlSession内的多次查询,如果查询条件相同,会直接返回缓存的结果。二级缓存则是Mapper级别的,允许跨...

    iBATIS内置别名列表

    12. **map/hashmap**:`java.util.Map/java.util.HashMap` - `map` 和 `hashmap` 是同义词,表示映射类型。 13. **list/arraylist**:`java.util.List/java.util.ArrayList` - `list` 和 `arraylist` 是同义词,...

    ibatis-2.3.3.7.jar

    ibatis-2.3.3.7.jar

    IBatisNet.Common.1.6.2、IBatis.DataAccess.1.9.2、IBatis.DataMapper.1.6.2

    标题和描述中提到的"IBatisNet.Common.1.6.2、IBatis.DataAccess.1.9.2、IBatis.DataMapper.1.6.2"是针对一个名为IBatisNet的框架的不同组件的版本号。IBatisNet是一个在.NET平台上实现的开源持久层框架,它源于Java...

    ibatis-2.3.4.726最新API chm格式

    ibatis-2.3.4.726最新API chm格式 非常好用

    ibatis-2.3.4.726官方最新开发包

    - **ibatis.jar**:这是Ibatis的主库,包含了所有必需的类和接口。 - **sqlmapconfig.xml**:这是Ibatis的全局配置文件,用于配置数据源、事务管理器、日志工厂等。 - **mapper.xml**:这些文件是SQL映射文件,每个...

    ibatis-2.3.2.715

    iBatis,作为一款轻量级的Java持久层框架,以其灵活、高效的特点,在许多项目中得到了广泛应用。本文将针对iBatis的2.3.2.715版本的源代码进行深入剖析,旨在帮助开发者更好地理解和运用这一强大的数据访问工具。 ...

    Manning.iBATIS.in.Action.Jan.2007.eBook-BBL.pdf

    iBATIS提供了一种灵活的方式来处理这些问题,比如通过自定义SQL查询来满足特定的需求,或者结合其他工具和技术(如Spring框架)来增强其功能性和易用性。 综上所述,《Manning iBATIS in Action Jan. 2007 eBook-...

    ibatis-2.3.4.726-src-源代码

    通过深入学习和分析iBatis 2.3.4.726的源代码,开发者可以更好地理解其工作原理,从而优化SQL执行效率,解决框架使用中遇到的问题,提升开发效率。同时,这也为转向MyBatis的学习提供了坚实的基础。

    IBatis.net-IBatis.DataAccess.1.9.2/IBatis.DataMapper.1.6.2

    本篇将深入探讨IBatis.Net的核心组件——IBatis.DataAccess.1.9.2和IBatis.DataMapper.1.6.2,以及它们在数据访问中的关键作用。 **一、IBatis.DataAccess** IBatis.DataAccess是IBatis.net框架的一部分,主要负责...

Global site tag (gtag.js) - Google Analytics