mybatis入坑记- resultMap引发的血案

笔者最近刚刚学习mybatis,然后学习了ResultType和ResultMap,记得书中说稍微复杂的关联就使用resultMap,还告诉我使用resultMap可以不关注字段和属性是否不一样,

然后我潜意识就喜欢在很多情况下使用ResultMap,不用不知道,一用吓一跳,由此引发了血案,笔者花了一上午的时间也没找出来原因,后来还是在老同事的帮助下解决了问题,这里还是要感谢一下那位老同志,下面就来还原一下血案发生的前后。

笔者正在做一个论坛项目。

这里要显示五个数据

main_forum.title,

        post.ptitle,

post.reply_num,
post.view_num,
post.send_date,

后面4个数据都是在一个表中,而第一个数据是在另外的表中,而当前的表和第一个数据所在的表并没有任何关联

必须通过中间一个表建立关联

于是我就在mapper映射中写下了如下的语句

<resultMap type="com.bbs.beans.Post" id="PostResultMap">
		<id property="id" column="id" />
		<result property="ptitle" column="ptitle" />
		<result property="sendDate" column="send_date" />
		<result property="replyNum" column="reply_num" />
		<result property="viewNum" column="view_num" />
		<association property="subForum" javaType="com.bbs.beans.SubForum">
			<id property="sid" column="sid" />
			<association property="mainForum" javaType="com.bbs.beans.MainForum">
				<id property="mid" column="mid" />
				<result property="title" column="title" />
			</association>
		</association>
	</resultMap>
	<select id="showPost" resultMap="PostResultMap">
		SELECT
		post.ptitle,
		post.reply_num,
		post.view_num,
		post.send_date,
		main_forum.title
		FROM
		post
		left join sub_forum on post.forum=sub_forum.sid
		left join main_forum on sub_forum.main_forum=main_forum.mid
		WHERE
        1=1
	</select>

三表联查没毛病,坑爹的是我数据库中有4条数据,它只是查出来一条数据。

后来改成resultType的方式成功查出4条数据。

<select id="showPost" resultType="Post">
		SELECT
		post.ptitle as "ptitle",
		post.reply_num as "replyNum",
		post.view_num  as "viewNum",
		post.send_date as "sendDate",
		main_forum.title  as "subForum.mainForum.title"
		FROM
		post
		left join sub_forum on post.forum=sub_forum.sid
		left join main_forum on sub_forum.main_forum=main_forum.mid
		WHERE
        1=1
	</select>
跟第一个resultMap语句少了很多而且又是正确结果,笔者深深认识到实践出真知啊,只怪笔者刚学,被这个书坑惨了。

选择resultMap要谨慎,最好使用resultType.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值