`

myBatis3之SQL映射的XML文件(resultMap元素之七)

 
阅读更多

myBatis3之SQL映射的XML文件(resultMap元素之七)

-----------

 

高级结果映射之discriminator元素(鉴别器)

 

 

<discriminator javaType="int" column="draft"> 
	<case value="1" resultType="DraftPost"/> 
</discriminator>

有时一个单独的数据库查询也许返回很多不同(但是希望有些关联)数据类型的结果集。鉴别器元素就是被设计来处理这个情况的,还有包括类的继承层次结构。鉴别器非常容易理解,因为它的表现很像 Java 语言中的switch语句。 定义鉴别器指定了column和javaType属性。列是MyBatis查找比较值的地方。JavaType是需要被用来保证等价测试的合适类型(尽管字符串在很多情形下都会有用)。比如:

 

<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类型的值如果它匹配任何一个鉴别器的实例,那么就使用这个实例指定的结果映射。换句话说,这样做完全是剩余的结果映射被忽略(除非它被扩展,这在第二个示例中讨论)。如果没有任何一个实例相匹配,那么 MyBatis 仅仅使用鉴别器块外定义的结果映射。所以,如果carResult按如下声明: 

 

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

那么只有doorCount属性会被加载。这步完成后完整地允许鉴别器实例的独立组,尽管和父结果映射可能没有什么关系。这种情况下,我们当然知道 cars 和 vehicles 之间有关系,如 Car是一个 Vehicle 实例。因此,我们想要剩余的属性也被加载。我们设置的结果映射的简单改变如下。 

 

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

现在vehicleResult和carResult的属性都会被加载了。 

尽管曾经有些人会发现这个外部映射定义会多少有一些令人厌烦之处。因此还有另外一种语法来做简洁的映射风格。比如: 

<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 将会为你自动匹配列和属性。所以这些例子中的大部分是很冗长的,而其实是不需要的。也就是说,很多数据库是很复杂的,我们不太可能对所有示例都能依靠它。  

 

 

 

 

分享到:
评论

相关推荐

    SQL语句映射文件

    SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用。

    Mybatis的映射(sql编写).md

    (类的全路径)"&gt; &lt;resultMap id="BaseResultMap" type="com.tjjp.business.Notice.model.Notice(类的全路径)"&gt; &lt;!-- 对于的类型 jdbcType --&gt; &lt;/resultMap&gt;

    MyBatis3_用户指南(附JavaDB实例)

    SQL 映射 XML 文件.......23 Select元素....... 24 Insert、 update、 delete元素......25 Sql元素.....28 MyBatis 3 - User Guide 4 参数(Parameters)..28 resultMap元素..30 高级结果映射.32 id, result元素.......

    MyBatis-3-User-Guide用户手册(中文英文)

    SQL 映射的 XML 文件 \ 19 select\ 20 insert,update,delete \ 21 sql\ 23 Parameters \ 24 resultMap \ 25 高级结果映射\ 27 id,result \ 29 支持的 JDBC 类型 \ 30 构造方法\ 30 关联\ 31 集合\ 34 ...

    Mybatis的Eclipse插件MyBatipse.zip

    &gt; 重命名 MyBatis 元素在 Java 映射器中,右键单击 -&gt; MyBatis Refactor -&gt; 重命名 MyBatis 元素重命名 Java 映射器方法也会更新其引用Miscellaneous向导创建一个新的 XML 映射文件控制台视图中的智能复制菜单用以...

    springmybatis

    2. Configuration.xml 里面 的&lt;mapper resource="com/yihaomen/mybatis/model/User.xml"/&gt;是包含要映射的类的xml配置文件。 3. 在User.xml 文件里面 主要是定义各种SQL 语句,以及这些语句的参数,以及要返回的类型...

    mybatis学习笔记

    2.4.2 Mapper.xml(映射文件) 20 2.4.3 Mapper.java(接口文件) 21 2.4.4 加载UserMapper.xml文件 22 2.4.5 测试 22 2.4.6 总结 23 3 SqlMapConfig.xml配置文件 24 3.1 配置内容 24 3.2 properties(属性) 24 3.3 ...

    MyBatis 简单样例

    &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&gt; &lt;resultMap type="Blog" id="blogResult"&gt; &lt;!...

    GoMybatis:转到ORM库。具有强大的功能,例如事务嵌套,乐观锁,逻辑删除等。 像mybatis一样去golang

    ,与大多数Java(Mybatis3,Mybatis Plus)兼容,从Java Spring Mybatis到Go语言的XML SQL文件无痛迁移(仅修改resultMap的javaType以为langType指定go语言类型) 只需一行标记即可定义AOP事务和事务传播行为 异步...

    mybatis3中文文档

    SQL映射的XML文件 ................................................................................................... 19 select.............................................................................

    MyBatis中文指南,MyBatis中文帮助文档

    SQL映射的XML文件 ................................................................................................... 19 select.............................................................................

    Mybatis入门到精通

    Mybatis介绍、单独使用jdbc编程问题总结、Mybatis架构、Mybatis入门程序、Mybatis开发Dao、SqlMapConfig.xml配置、ParameterType输入映射、ResultType及ResultMap输出映射、动态sql、商品订单数据模型、关联查询(一...

    mybatis-helper:intellij mybatis帮助程序插件

    找到之后会在resultMap中添加转成下划线名称的column,在sql的id含有update的标签中添加该属性, 在insert中增加对应的字段和属性 未完成的部分 是否要自定义字段名,这样提供一个映射关系 是否要把类型和字段名放到...

Global site tag (gtag.js) - Google Analytics