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(一款优秀的Java持久层框架)时,如何处理数据库中的对象关系映射(ORM)问题。在Java应用程序中,iBATIS 提供了一种方便的方式来将数据库操作与业务逻辑解耦,使得...
在映射文件中,iBATIS提供了强大的映射机制,比如自动类型转换、结果集嵌套处理、自动生成主键等。例如,和可以将查询结果的列名映射到Java对象的属性上,元素可以根据特定列的值来决定如何映射结果集,实现多态查询...
标题和描述中提到的“ibatis映射文件信息,接口对应”是指Ibatis如何通过映射文件与Java接口进行关联,实现数据操作的封装和调用。 首先,我们需要了解Ibatis的核心组成部分:SqlMapConfig.xml配置文件、Mapper接口...
### ibatis配置文件、映射文件详解 #### 1. SQL Map Config 文件详解 在ibatis框架中,`sqlMapConfig.xml`是一个非常重要的配置文件,它主要用于设置ibatis的全局配置信息,包括数据库连接信息、环境配置以及其它...
Ibatis 是一款轻量级的Java持久层框架,它提供了SQL映射文件和基于XML或注解的SQL语句配置,使得开发者可以更加灵活地控制SQL的编写,从而避免了传统的JDBC代码中的大量模板式代码。这个"ibatis SQL映射文件、DAO、...
本篇将深入讲解iBATIS一对一映射的概念、配置及应用,帮助你更好地理解和运用这个功能。 一对一映射在数据库设计中是指两个表之间存在一对一的关系,例如,一个员工可能只有一个部门,一个部门也只对应一个员工。在...
在IT行业中,数据库关系映射是开发Web应用时不可或缺的一部分,特别是对于ORM(对象关系映射)框架如iBATIS(现在称为MyBatis)。本文将深入探讨如何在iBATIS中实现一对多和多对多的关系映射,并提供相关的源码分析...
这样,当我们调用`SqlSession`的`selectList`方法执行这个查询时,Ibatis会自动将返回的多条记录按照一对多的关系映射成`User`对象,每个`User`对象都有一个包含所有关联订单的`orderList`。 此外,还可以通过使用`...
此文本主要是关于ibatis总配置和映射配置和一些需要主要的细节。
在iBATIS的映射文件中,我们需要定义一个`<resultMap>`来处理这种继承关系,并使用`<discriminator>`元素来根据`discriminator`列的值决定实例化哪个子类。 `<resultMap>`配置如下: ```xml <!-- 其他公共...
《iBATIS-SqlMaps-2.pdf》可能是关于iBATIS SQL映射器的详细指南,它会介绍如何编写SQL Map配置文件,这些文件定义了数据库查询和事务处理。SQL Maps是iBATIS的核心部分,它们将数据库查询与Java对象绑定,使得...
通过这个文件,iBATIS 可以知道如何连接到数据库、如何处理事务,以及如何加载 SQL 映射文件。 2. **SQL 映射文件**:每个 SQL 映射文件定义了一组 SQL 语句和相关的映射规则,通常以 `.xml` 格式存在。这些文件...
DAO接口定义了操作数据库的方法,而具体的实现则由iBATIS处理。 3. 映射器接口:开发者定义的接口,其方法对应SQL映射文件中的SQL语句。通过实现这个接口,开发者可以在业务逻辑中调用数据库操作。 4. 动态SQL:...
在日常的软件开发过程中,尤其是在处理数据库查询时,我们经常面临一个问题:如何优雅地处理那些未知或动态变化的列名及列数的情况?在这种情况下,传统的实体类映射方式往往难以满足需求。本文将详细介绍如何利用 ...
总结来说,这个话题覆盖了Mybatis/iBatis中的多表映射,通过XML配置文件处理一对一和一对多关系,以及如何在ExtJS前端通过Model和Grid获取并展示这些数据。了解这些知识对于开发涉及多表交互的应用至关重要,能够...
这包括了列名到字段名的映射,以及处理一对一、一对多、多对多等复杂关系的方法。 4. **动态SQL**:iBatis的一个强大特性是支持动态SQL,开发者可以在XML映射文件中使用条件语句、循环结构等,以适应不同情况下的...
功能:当你建立好数据库,写好javabean,就可以用这个工具来为你的javabean和数据库之间做一个映射. 当然这个映射只是一个大致的模板,很多时候你可能要稍做修改.但是也为你节约了很多的时间. <br>使用方法: 1....
Ibatis的主要特点是通过XML或注解定义SQL映射文件,将SQL语句与Java对象绑定。例如,`<select>`标签用于定义查询语句,`<insert>`、`<update>`和`<delete>`分别对应增删改操作。在SQL映射文件中,可以使用动态SQL来...