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 会自动地将列名与属性相匹配。所以上面所举的例子比实际中需要的要详细。尽管如此,大部分数据库有点复杂,并且它并不是所有情况都是完全可以适用的。
相关推荐
Mapper文件是MyBatis的核心组件之一,它定义了SQL语句和Java方法之间的映射关系。在XML格式的Mapper文件中,你可以定义增、删、改、查等各种类型的SQL语句,并通过接口方法调用来执行这些语句。例如,一个简单的查询...
ResultMap是MyBatis映射语句中用于定义结果集映射的元素。它允许我们精确控制如何将数据库查询的结果行映射到Java对象。默认情况下,MyBatis会尝试根据结果列名与Java对象的属性名进行匹配,但这种方式并不总是可行...
在MyBatis中,ResultMap是核心配置之一,它用于定义如何将数据库查询结果映射到Java对象。ResultMap的概念是为了提高数据映射的灵活性和效率,避免了简单类型的数据映射过程中的冗余代码。在`mybatis-demo4-...
ResultMap是Mybatis中的核心概念之一,它在处理复杂的数据库查询结果映射时扮演着重要角色。ResultMap的设计旨在提高灵活性,解决对象与数据库表之间的映射问题,尤其是在面对一对多、多对一或自关联等复杂关系时。 ...
MyBatis ResultMap 详解 MyBatis 中的 ResultMap 是一个强大的元素,它描述如何从...ResultMap 是 MyBatis 中一个非常强大的元素,它可以帮助开发者快速地将结果集映射到 Java 实体类中,从而提高开发效率和代码质量。
MyBatis 是当前最流行的 Java 持久层框架之一,其通过 XML 配置的方式消除了绝大部分 JDBC 重复代码以及参数的设置,结果集的映射。为了更好地学习和理解 MyBatis 背后的设计思路,作为高级开发人员,有必要深入研究...
- 利用`<resultMap>`中的`discriminator`标签实现基于某个字段的多重结果映射。 - 使用`<script>`元素编写复杂的SQL,或者直接嵌入原生的SQL片段。 总的来说,MyBatis 3.2.3中文版SDK为开发者提供了一套详尽的...
- 鉴别器(discriminator):当多个映射结果基于某些特定的条件需要被区分开时使用。 6. 缓存 MyBatis提供了一级缓存和二级缓存: - 一级缓存是SqlSession级别的缓存,同一个SqlSession执行的查询可以被缓存起来。 ...
- ResultMap用于复杂对象的映射,通过id、discriminator、constructor、property、association、collection等元素处理一对一、一对多等关系。 5. **参数映射和返回值处理** - 使用@Param注解为方法参数指定别名,...
- 鉴别器(discriminator):MyBatis提供鉴别器来处理继承关系的映射,可以根据不同的条件选择不同的结果映射规则。 最后,用户指南鼓励用户参与文档的完善,提供反馈和建议,甚至直接贡献文档内容,以促进MyBatis...
本篇文章主要探讨的是iBATIS中的一个高级特性——继承映射,通过`Discriminator`列来实现类的多态性。 首先,我们需要理解什么是继承映射。在面向对象编程中,继承是一种设计模式,允许创建新的类(子类)基于已...
`resultMap`是MyBatis中最复杂且强大的元素,它可以极大地简化从结果集中加载对象的过程,并处理JDBC不支持的一些高级映射情况。在XML映射文件中,我们需要定义`resultMap`,指定它的类型(即对应的Java实体类)和...
自动映射是基于字段名的匹配,而手动映射则需要在XML中定义resultMap,包括id、association、collection、discriminator等元素,用于处理复杂的结果集映射。 **7. 动态SQL** myBatis的动态SQL功能非常强大,可以...
MyBatis是一个开源的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。它将Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库...
它还涵盖了MyBatis3-UserGuide中参数(Parameters)的使用、resultMap元素、高级结果映射以及如何使用id、result元素。 另外,文档对MyBatis支持的JDBC类型进行了说明,并详述了如何使用Constructor元素、...
同时,还提供了高级结果映射,如resultMap元素,它允许用户定义更复杂的映射规则,如一对一(Association)、一对多(Collection)、分段映射(Discriminator)等。 MyBatis还支持动态SQL,如if元素、choose、when...
- `<discriminator>`:在结果映射中用于根据某个字段值决定映射哪个子结果集。 了解这两个DTD文件后,开发人员能够按照规定的格式编写MyBatis的配置文件和映射文件,确保XML解析时不会出现错误。同时,通过DTD文件...
MyBatis还支持高级结果映射,例如resultMap元素、id/result元素、Constructor元素、Association元素、Collection元素和Discriminator元素,这些元素允许开发者创建复杂的结果映射。 Cache元素和cache-ref元素分别...
`resultMap`是MyBatis中处理结果集映射的重要工具。其核心在于能够根据结果集的不同情况,映射到相应的Java对象。以下是一些关键概念: 1. **简单映射** - **id**:映射主键字段,标记为全局ID。 - **result**:...
MyBatis 支持多种高级的结果映射方式,包括但不限于: - **id** 和 **result**:用于配置主键和普通字段的映射。 - **构造方法**:用于配置通过构造函数进行对象的初始化。 - **关联**:用于配置一对一或多对一的...