`
chinagdvea
  • 浏览: 130582 次
  • 性别: Icon_minigender_1
  • 来自: 韶关
社区版块
存档分类
最新评论

使用包含自身的类的resultMap进入死循环

 
阅读更多

Department {
Department parentDepartment;
}

如果设置查询映射
<!--查看指定部门-->
    <select id="selectDepartmentByPrimaryKey" resultMap="departmentResult" parameterClass="integer">
        select DEPARTMENTID, SCHOOLID, PDEPARTMENTID,DEPARTMENTNAME, DEPARTMENTDESCRIBE, DEPARTMENTCODE
            from S_DEPARTMENT
            where DEPARTMENTID = #departmentId#
    </select>

<resultMap id="departmentResult" class="org.dreamfly.core.model.Department">
        <result property="departmentId" column="DEPARTMENTID"/>
        <result property="school" column="SCHOOLID" select="selectSchoolByPrimaryKey"/>
        <result property="pdepartment" column="PDEPARTMENTID" select="selectDepartmentByPrimaryKey"/>
        <result property="departmentName" column="DEPARTMENTNAME"/>
        <result property="departmentDescribe" column="DEPARTMENTDESCRIBE"/>
        <result property="departmentCode" column="DEPARTMENTCODE" />
    </resultMap>

这样会导致查询进入死循环.查询会一直查找他的父部门类

解决方案

<resultMap id="departmentResult" class="org.dreamfly.core.model.Department">
        <result property="departmentId" column="DEPARTMENTID"/>
        <result property="school" column="SCHOOLID" select="selectSchoolByPrimaryKey"/>
        <result property="pdepartment" column="PDEPARTMENTID" select="selectParentDepartmentByPrimaryKey"/>
        <result property="departmentName" column="DEPARTMENTNAME"/>
        <result property="departmentDescribe" column="DEPARTMENTDESCRIBE"/>
        <result property="departmentCode" column="DEPARTMENTCODE" />
    </resultMap>

加上一个

<!--查询上级部门,不查询上级部门的上级部门-->
    <select id="selectParentDepartmentByPrimaryKey" resultClass="org.dreamfly.core.model.Department" parameterClass="integer"
            cacheModel="otherCodeCache">
        select DEPARTMENTID, DEPARTMENTNAME, DEPARTMENTDESCRIBE, DEPARTMENTCODE
            from S_DEPARTMENT
            where DEPARTMENTID = #departmentId#
    </select>
分享到:
评论

相关推荐

    MyBatis的resultMap详解

    在 MyBatis 中,我们可以使用两种方式来指定查询结果的返回类型,一种是使用 resultType,另一种是使用 resultMap。其中,resultType 是直接指定返回类型的,而 resultMap 则是对外部 ResultMap 的引用。 当我们...

    mybatis-demo4-resultMap手动映射.zip

    - **一对多关联映射**:类似地,如果一个实体类包含多个其他实体类实例,可以使用collection标签来处理。 - **自定义类型处理器**:对于特殊的数据类型,如日期、货币等,可以通过typeHandler来定义自定义的类型...

    Mybatis resultMap

    在博客文章“https://724073277.iteye.com/blog/1479584”中,作者可能详细讨论了如何使用ResultMap来处理复杂的情况,包括自关联(如树形结构)、多层嵌套和动态ResultMap的运用。通过阅读这篇博客,你可以了解到更...

    mybatis3--4.resultMap高级映射

    本篇将深入探讨MyBatis中的ResultMap,包括其重要性、使用方式以及一些高级特性。 ResultMap的概念: ResultMap是MyBatis映射语句中用于定义结果集映射的元素。它允许我们精确控制如何将数据库查询的结果行映射到...

    根据MyBatis的ResultMap生成增删改sql

    当ResultMap包含多个字段时,MyBatis会自动处理这些字段并将它们拼接到INSERT语句中。比如,假设我们有以下CwInfo实体类: ```java public class CwInfo { private String id; private String name; private ...

    MyBatis_sql-resultMap-缓存

    在这个例子中,`resultMap`定义了一个User对象的映射规则,包括主键、姓名和邮箱字段,并且通过`association`标签映射了一个Address对象。 **MyBatis缓存** MyBatis提供了两种级别的缓存:一级缓存和二级缓存。一级...

    mybatis中resultmap详细使用说明

    mybatis中resultmap详细使用说明

    Mybatis高级-resultMap之collection聚集

    `RuleVO` 类中包含了一个`idDetail`字段,它用于关联到`DetailVO`中的`idDetail`字段,从而建立两个类之间的联系。 #### resultMap配置 接下来,在MyBatis的映射文件中定义了`resultMap`元素,用于描述数据库结果...

    MyBatis源码:原来 resultMap解析完是这样.docx

    `&lt;resultMap&gt;`节点还可以包含`&lt;constructor&gt;`来指定使用构造函数注入对象。 在解析过程中,MyBatis会构建`ResultMap`对象,并添加`ResultMapping`实例。如果存在`extends`属性,MyBatis会查找并合并父`resultMap`的...

    mybatis中mapper文件resultMap中collection和association的使用

    mybatis中mapper文件resultMap中collection和association的使用,参考地址:https://blog.csdn.net/zhizhuodewo6/article/details/82863452

    mybatis教程之resultmap_动力节点Java学院整理

    * nested result mappings - 几个 resultMap 自身嵌套关联,也可以引用到一个其它上 5. collection - 复杂类型集合 * collection of complex types 6. nested result mappings - resultMap 的集合,也可以引用到一...

    mybatis分布查询以及resulttype和resultmap的用法

    - **resultMap**:`resultMap`则更加灵活,可以处理复杂的数据映射,包括一对一、一对多、多对一、多对多关系。例如,如果`User`类有一个`List&lt;Order&gt;`类型的属性`orders`,我们可以定义一个`resultMap`: ```xml...

    MyBatis中resultMap和resultType的区别详解

    如果我们的数据库中的列名和实体类的属性名是一致的,那么使用resultType即可,但是如果我们的数据库中的列名和实体类的属性名不一致,那么我们需要使用resultMap来定义映射关系。 在MyBatis中,我们可以在mapper....

    MyBatis中关于resultType和resultMap的区别介绍

    在MyBatis中,`resultType` 和 `resultMap` 是两种不同的方式,用于处理SQL查询结果到Java对象的映射。理解它们的区别对于优化MyBatis映射文件的编写和提升代码的可维护性至关重要。 1. **resultType**: - `...

    mybatis 动态sql resultMap

    结合ResultMap,我们可以定义复杂的结果映射规则,包括一对一、一对多、多对多关系的映射,以及自定义的类型转换,进一步提升数据访问的便捷性。 在MyBatis3版本中,这些特性得到了更好的支持和优化,使得开发者...

Global site tag (gtag.js) - Google Analytics