`
liuhanjun
  • 浏览: 47784 次
  • 性别: Icon_minigender_1
  • 来自: 海口
社区版块
存档分类
最新评论

ibatis深度映射的bug及处理办法

    博客分类:
  • J2EE
阅读更多

    ibatis确实相当的优秀,跟hibernate的比较就不说了,容易引起口水。我是用了几年hibernate,后来转向ibatis,感觉是各有优缺点,只是自认sql功底比hql好,就懒得用hibernate了。

    一路用来顺风顺水,前些时碰到一个挠头的问题,当映射的对象层次超过4层时,会映射不上,如下:

<resultMap id="examUserPaperQTQRM" class="examUserPaperQTQ" extends="baseRM">
  <result column="quesType_name" property="paperQTQ.question.quesType.name" jdbcType="CHAR" />
</resultMap>

 

    对象层次如下:对象examUserPaperQTQ有paperQTQ对象属性,而paperQTQ对象有question对象属性,而question有quesType对象属性,而quesType有name属性,层次稍微深了点,没办法,多表关联。

    为了避免N+1的问题,就写了以上映射,结果映射失败,quesType的name属性为null,测试了几遍,层次在3层以内,一切正常。看来ibatis是有点bug,本来想去看看源代码,整明白点。时间很紧,懒得去理。不过我用的是ibatis2.3版本,现在都改名mybatis了,3.0以上了,不过懒得换了,无数的经验告诉我,盲目跟风刷新版本,往往得不偿失,没时间去折腾,boss整天盯着。

    问题出现了,解决一下吧,用定义一个resultMap如下:

<resultMap id="quesTypeRM" class="quesType" >
  <result column="quesTypeId" property="quesTypeId" jdbcType="CHAR" />
  <result column="name" property="name" jdbcType="CHAR" />
  <result column="quesTypeTempl" property="quesTypeTempl" jdbcType="TINYINT" />
</resultMap>

 然后使用:

<resultMap id="examUserPaperQTQRM" class="examUserPaperQTQ" extends="baseRM">
    <result property="paperQTQ.question.quesType" resultMap="quesTypeRM" />
</resultMap>

 这样子可以映射进去了。

是不是bug还不是太敢确定,有大拿出没的话,望不吝赐教!

分享到:
评论

相关推荐

    ibatis 的关系映射

    标题 "ibatis 的关系映射" 指的是在使用 iBATIS(一款优秀的Java持久层框架)时,如何处理数据库中的对象关系映射(ORM)问题。在Java应用程序中,iBATIS 提供了一种方便的方式来将数据库操作与业务逻辑解耦,使得...

    iBATIS-SqlMaps,ibatis映射文件

    在映射文件中,iBATIS提供了强大的映射机制,比如自动类型转换、结果集嵌套处理、自动生成主键等。例如,和可以将查询结果的列名映射到Java对象的属性上,元素可以根据特定列的值来决定如何映射结果集,实现多态查询...

    ibatis映射文件信息,接口对应

    标题和描述中提到的“ibatis映射文件信息,接口对应”是指Ibatis如何通过映射文件与Java接口进行关联,实现数据操作的封装和调用。 首先,我们需要了解Ibatis的核心组成部分:SqlMapConfig.xml配置文件、Mapper接口...

    ibatis配置文件、映射文件详解

    ### ibatis配置文件、映射文件详解 #### 1. SQL Map Config 文件详解 在ibatis框架中,`sqlMapConfig.xml`是一个非常重要的配置文件,它主要用于设置ibatis的全局配置信息,包括数据库连接信息、环境配置以及其它...

    ibatis SQL映射文件、DAO、model自动生成工具源码

    Ibatis 是一款轻量级的Java持久层框架,它提供了SQL映射文件和基于XML或注解的SQL语句配置,使得开发者可以更加灵活地控制SQL的编写,从而避免了传统的JDBC代码中的大量模板式代码。这个"ibatis SQL映射文件、DAO、...

    Ibatis一对一映射提示

    本篇将深入讲解iBATIS一对一映射的概念、配置及应用,帮助你更好地理解和运用这个功能。 一对一映射在数据库设计中是指两个表之间存在一对一的关系,例如,一个员工可能只有一个部门,一个部门也只对应一个员工。在...

    ibatis 一对多 多对多完整映射

    在IT行业中,数据库关系映射是开发Web应用时不可或缺的一部分,特别是对于ORM(对象关系映射)框架如iBATIS(现在称为MyBatis)。本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析...

    ibatis 一对多关系映射

    这样,当我们调用`SqlSession`的`selectList`方法执行这个查询时,Ibatis会自动将返回的多条记录按照一对多的关系映射成`User`对象,每个`User`对象都有一个包含所有关联订单的`orderList`。 此外,还可以通过使用`...

    ibatis总配置和映射配置.txt

    此文本主要是关于ibatis总配置和映射配置和一些需要主要的细节。

    IBatis: Discriminator Column Example – Inheritance Mapping(Ibatis中的继承映射)

    在iBATIS的映射文件中,我们需要定义一个`&lt;resultMap&gt;`来处理这种继承关系,并使用`&lt;discriminator&gt;`元素来根据`discriminator`列的值决定实例化哪个子类。 `&lt;resultMap&gt;`配置如下: ```xml &lt;!-- 其他公共...

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

    《iBATIS-SqlMaps-2.pdf》可能是关于iBATIS SQL映射器的详细指南,它会介绍如何编写SQL Map配置文件,这些文件定义了数据库查询和事务处理。SQL Maps是iBATIS的核心部分,它们将数据库查询与Java对象绑定,使得...

    深入分析 iBATIS 框架之系统架构与映射原理

    通过这个文件,iBATIS 可以知道如何连接到数据库、如何处理事务,以及如何加载 SQL 映射文件。 2. **SQL 映射文件**:每个 SQL 映射文件定义了一组 SQL 语句和相关的映射规则,通常以 `.xml` 格式存在。这些文件...

    iBATIS2.3.4 jar包及源码

    DAO接口定义了操作数据库的方法,而具体的实现则由iBATIS处理。 3. 映射器接口:开发者定义的接口,其方法对应SQL映射文件中的SQL语句。通过实现这个接口,开发者可以在业务逻辑中调用数据库操作。 4. 动态SQL:...

    ibatis 用HashMap解决resultClass映射

    在日常的软件开发过程中,尤其是在处理数据库查询时,我们经常面临一个问题:如何优雅地处理那些未知或动态变化的列名及列数的情况?在这种情况下,传统的实体类映射方式往往难以满足需求。本文将详细介绍如何利用 ...

    Mybatis/ibatiS多表映射 一对一 一对多 extjs前台取值 详细讲解

    总结来说,这个话题覆盖了Mybatis/iBatis中的多表映射,通过XML配置文件处理一对一和一对多关系,以及如何在ExtJS前端通过Model和Grid获取并展示这些数据。了解这些知识对于开发涉及多表交互的应用至关重要,能够...

    ibatis半自动化orm映射

    这包括了列名到字段名的映射,以及处理一对一、一对多、多对多等复杂关系的方法。 4. **动态SQL**:iBatis的一个强大特性是支持动态SQL,开发者可以在XML映射文件中使用条件语句、循环结构等,以适应不同情况下的...

    Ibatis 映射文件自动生成器

    功能:当你建立好数据库,写好javabean,就可以用这个工具来为你的javabean和数据库之间做一个映射. 当然这个映射只是一个大致的模板,很多时候你可能要稍做修改.但是也为你节约了很多的时间. &lt;br&gt;使用方法: 1....

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis的主要特点是通过XML或注解定义SQL映射文件,将SQL语句与Java对象绑定。例如,`&lt;select&gt;`标签用于定义查询语句,`&lt;insert&gt;`、`&lt;update&gt;`和`&lt;delete&gt;`分别对应增删改操作。在SQL映射文件中,可以使用动态SQL来...

Global site tag (gtag.js) - Google Analytics