`
zhangdefeng2008
  • 浏览: 12403 次
社区版块
存档分类
最新评论

myBatis高级结果映射resultMap之discriminator

阅读更多

discriminator–使用一个结果值以决定使用哪个resultMap

ocase–基于不同值的结果映射

§嵌套结果映射–case也能引用它自身, 所以也能包含这些同样的元素。它也可以从外部引用resultMap

 

 

1.引用外部resultMap

<resultMap id="vehicleResult" type="Vehicle">  
<id property=”id” column="id" />  
<result property="vin" column="vin"/>  
<result property="year" column="year"/>  
<result property="make" column="make"/>  
<result property="model" column="model"/>  
<result property="color" column="color"/>  
<discriminator javaType="int" column="vehicle_type">  
<case value="1" resultMap="carResult"/>  
<case value="2" resultMap="truckResult"/>  
<case value="3" resultMap="vanResult"/>  
<case value="4" resultMap="suvResult"/>  
</discriminator>  
</resultMap> 

 

 

在这个例子中,MyBatis将会从结果集中取出每条记录,然后比较它的vehicle type的值。如果匹配任何discriminator中的case,它将使用由case指定的resultMap。这是排它性的,换句话说,其它的case的resultMap将会被忽略(除非使用我们下面说到的extended)。如果没有匹配到任何case,MyBatis只是简单的使用定义在discriminator块外面的resultMap。所以,如果carResult像下面这样定义:

<resultMap id="carResult" type="Car">
<result property=”doorCount” column="door_count" />
</resultMap>

 那么,只有doorCount属性会被加载。这样做是为了与识别器cases群组完全独立开来,哪怕它与上一层的resultMap 一点关系都没有。在刚才的例子里我们当然知道cars和vehicles的关系,a Car is-a Vehicle。因此,我们也要把其它属性加载进来。我们要稍稍改动一下resultMap:

 

<resultMap id="carResult" type="Car"extends=”vehicleResult”>
<result property=”doorCount” column="door_count" />
</resultMap>

 

现在,vehicleResult和carResult的所有属性都会被加载。

 

2.case引用自身

 

<resultMap id="vehicleResult" type="Vehicle">  
<id property=”id” column="id" />  
<result property="vin" column="vin"/>  
<result property="year" column="year"/>  
<result property="make" column="make"/>  
<result property="model" column="model"/>  
<result property="color" column="color"/>  
<discriminator javaType="int" column="vehicle_type">  
<case value="1" resultType="carResult">  
<result property=”doorCount” column="door_count" />  
</case>  
<case value="2" resultType="truckResult">  
<result property=”boxSize” column="box_size" />  
<result property=”extendedCab” column="extended_cab" />  
</case>  
<case value="3" resultType="vanResult">  
<result property=”powerSlidingDoor” column="power_sliding_door" />  
</case>  
<case value="4" resultType="suvResult">  
<result property=”allWheelDrive” column="all_wheel_drive" />  
</case>  
</discriminator>  
</resultMap>

 è记住:对于这么多的结果映射,如果您不指定任何的结果集,那么MyBatis 会自动地将列名与属性相匹配。所以上面所举的例子比实际中需要的要详细。尽管如此,大部分数据库有点复杂,并且它并不是所有情况都是完全可以适用的。

分享到:
评论

相关推荐

    mybatis 高级映射实例

    Mapper文件是MyBatis的核心组件之一,它定义了SQL语句和Java方法之间的映射关系。在XML格式的Mapper文件中,你可以定义增、删、改、查等各种类型的SQL语句,并通过接口方法调用来执行这些语句。例如,一个简单的查询...

    mybatis3--4.resultMap高级映射

    ResultMap是MyBatis映射语句中用于定义结果集映射的元素。它允许我们精确控制如何将数据库查询的结果行映射到Java对象。默认情况下,MyBatis会尝试根据结果列名与Java对象的属性名进行匹配,但这种方式并不总是可行...

    mybatis-demo4-resultMap手动映射.zip

    在MyBatis中,ResultMap是核心配置之一,它用于定义如何将数据库查询结果映射到Java对象。ResultMap的概念是为了提高数据映射的灵活性和效率,避免了简单类型的数据映射过程中的冗余代码。在`mybatis-demo4-...

    Mybatis resultMap

    ResultMap是Mybatis中的核心概念之一,它在处理复杂的数据库查询结果映射时扮演着重要角色。ResultMap的设计旨在提高灵活性,解决对象与数据库表之间的映射问题,尤其是在面对一对多、多对一或自关联等复杂关系时。 ...

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

    MyBatis ResultMap 详解 MyBatis 中的 ResultMap 是一个强大的元素,它描述如何从...ResultMap 是 MyBatis 中一个非常强大的元素,它可以帮助开发者快速地将结果集映射到 Java 实体类中,从而提高开发效率和代码质量。

    mybatis3.x源码深度解析与最佳实践.pdf

    MyBatis 是当前最流行的 Java 持久层框架之一,其通过 XML 配置的方式消除了绝大部分 JDBC 重复代码以及参数的设置,结果集的映射。为了更好地学习和理解 MyBatis 背后的设计思路,作为高级开发人员,有必要深入研究...

    MyBatis 3.2.3中文版SDK

    - 利用`&lt;resultMap&gt;`中的`discriminator`标签实现基于某个字段的多重结果映射。 - 使用`&lt;script&gt;`元素编写复杂的SQL,或者直接嵌入原生的SQL片段。 总的来说,MyBatis 3.2.3中文版SDK为开发者提供了一套详尽的...

    MyBatis3 API 中文文档

    - 鉴别器(discriminator):当多个映射结果基于某些特定的条件需要被区分开时使用。 6. 缓存 MyBatis提供了一级缓存和二级缓存: - 一级缓存是SqlSession级别的缓存,同一个SqlSession执行的查询可以被缓存起来。 ...

    mybatis - api文档

    - ResultMap用于复杂对象的映射,通过id、discriminator、constructor、property、association、collection等元素处理一对一、一对多等关系。 5. **参数映射和返回值处理** - 使用@Param注解为方法参数指定别名,...

    MyBatis_3用户指南

    - 鉴别器(discriminator):MyBatis提供鉴别器来处理继承关系的映射,可以根据不同的条件选择不同的结果映射规则。 最后,用户指南鼓励用户参与文档的完善,提供反馈和建议,甚至直接贡献文档内容,以促进MyBatis...

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

    本篇文章主要探讨的是iBATIS中的一个高级特性——继承映射,通过`Discriminator`列来实现类的多态性。 首先,我们需要理解什么是继承映射。在面向对象编程中,继承是一种设计模式,允许创建新的类(子类)基于已...

    详解Java的MyBatis框架中SQL语句映射部分的编写

    `resultMap`是MyBatis中最复杂且强大的元素,它可以极大地简化从结果集中加载对象的过程,并处理JDBC不支持的一些高级映射情况。在XML映射文件中,我们需要定义`resultMap`,指定它的类型(即对应的Java实体类)和...

    myBatis官方文档

    自动映射是基于字段名的匹配,而手动映射则需要在XML中定义resultMap,包括id、association、collection、discriminator等元素,用于处理复杂的结果集映射。 **7. 动态SQL** myBatis的动态SQL功能非常强大,可以...

    MyBatis3 教程 中文版PDF(永久)

    MyBatis是一个开源的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它将Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库...

    MyBatis3_用户指南(附JavaDB实例)

    它还涵盖了MyBatis3-UserGuide中参数(Parameters)的使用、resultMap元素、高级结果映射以及如何使用id、result元素。 另外,文档对MyBatis支持的JDBC类型进行了说明,并详述了如何使用Constructor元素、...

    MyBatis3_用户指南

    同时,还提供了高级结果映射,如resultMap元素,它允许用户定义更复杂的映射规则,如一对一(Association)、一对多(Collection)、分段映射(Discriminator)等。 MyBatis还支持动态SQL,如if元素、choose、when...

    mybatis的dtd文件

    - `&lt;discriminator&gt;`:在结果映射中用于根据某个字段值决定映射哪个子结果集。 了解这两个DTD文件后,开发人员能够按照规定的格式编写MyBatis的配置文件和映射文件,确保XML解析时不会出现错误。同时,通过DTD文件...

    MyBatis3(入门教程)

    MyBatis还支持高级结果映射,例如resultMap元素、id/result元素、Constructor元素、Association元素、Collection元素和Discriminator元素,这些元素允许开发者创建复杂的结果映射。 Cache元素和cache-ref元素分别...

    SQL语句映射文件

    `resultMap`是MyBatis中处理结果集映射的重要工具。其核心在于能够根据结果集的不同情况,映射到相应的Java对象。以下是一些关键概念: 1. **简单映射** - **id**:映射主键字段,标记为全局ID。 - **result**:...

    MyBatis3 中文版用户指南手册

    MyBatis 支持多种高级的结果映射方式,包括但不限于: - **id** 和 **result**:用于配置主键和普通字段的映射。 - **构造方法**:用于配置通过构造函数进行对象的初始化。 - **关联**:用于配置一对一或多对一的...

Global site tag (gtag.js) - Google Analytics