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

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

----------

 

 

高级结果映射

 

比如,我们如何映射下面这个语句?

<!-- Very Complex Statement --> 
<select id="selectBlogDetails" parameterType="int" resultMap="detailedBlogResultMap"> 
	select 
		B.id as blog_id, 
		B.title as blog_title, 
		B.author_id as blog_author_id, 
		A.id as author_id, 
		A.username as author_username, 
		A.password as author_password, 
		A.email as author_email, 
		A.bio as author_bio, 
		A.favourite_section as author_favourite_section, 
		P.id as post_id, 
		P.blog_id as post_blog_id, 
		P.author_id as post_author_id, 
		P.created_on as post_created_on, 
		P.section as post_section, 
		P.subject as post_subject, 
		P.draft as draft, 
		P.body as post_body, 
		C.id as comment_id, 
		C.post_id as comment_post_id, 
		C.name as comment_name, 
		C.comment as comment_text, 
		T.id as tag_id, 
		T.name as tag_name 
	from Blog B 
	left outer join Author A on B.author_id = A.id 
	left outer join Post P on B.id = P.blog_id 
	left outer join Comment C on P.id = C.post_id 
	left outer join Post_Tag PT on PT.post_id = P.id 
	left outer join Tag T on PT.tag_id = T.id 
	where B.id = #{id} 
</select>  

你可能想把它映射到一个智能的对象模型,包含一个作者写的博客,有很多的博文,每篇博文有零条或多条的评论和标签。下面是一个完整的复杂结果映射例子(假设作者,博客,博文,评论和标签都是类型的别名)。 

<!-- Very Complex Result Map --> 
<resultMap id="detailedBlogResultMap" type="Blog"> 
	<constructor> 
		<idArg column="blog_id" javaType="int"/> 
	</constructor> 
	<result property="title" column="blog_title"/> 
	<association property="author" column="blog_author_id" javaType="Author"> 
		<id property="id" column="author_id"/> 
		<result property="username" column="author_username"/> 
		<result property="password" column="author_password"/> 
		<result property="email" column="author_email"/> 
		<result property="bio" column="author_bio"/> 
		<result property="favouriteSection" column="author_favourite_section"/> 
	</association> 
	<collection property="posts" ofType="Post"> 
		<id property="id" column="post_id"/> 
		<result property="subject" column="post_subject"/> 
		<association property="author" column="post_author_id" javaType="Author"/> 
		<collection property="comments" column="post_id" ofType=" Comment"> 
			<id property="id" column="comment_id"/> 
		</collection> 
		<collection property="tags" column="post_id" ofType=" Tag" > 
			<id property="id" column="tag_id"/> 
		</collection> 
		<discriminator javaType="int" column="draft"> 
			<case value="1" resultType="DraftPost"/> 
		</discriminator> 
	</collection> 
</resultMap> 
 resultMap元素有很多子元素和一个值得讨论的结构。下面是resultMap元素的概念视图 :

resultMap:

constructor :类在实例化时,用来注入结果到构造方法中 

idArg – ID 参数;标记结果作为 ID 可以帮助提高整体效能

arg –  注入到构造方法的一个普通结果 

id : 一个ID 结果;标记结果作为ID 可以帮助提高整体效能 

result :注入到字段或JavaBean 属性的普通结果

association : 一个复杂的类型关联;许多结果将包成这种类型

嵌入结果映射  –  结果映射自身的关联,或者参考一个

collection : 复杂类型的集 

嵌入结果映射  –  结果映射自身的集,或者参考一个 

discriminator  使用结果值来决定使用哪个结果映射

case –  基于某些值的结果映射 

嵌入结果映射  –  这种情形结果也映射它本身,因此可以包含很多相同的元素,

或者它可以参照一个外部的结果映射。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值