mybatis入坑记- resultMap引发的血案

    xiaoxiao2021-03-29  27

    笔者最近刚刚学习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.

    转载请注明原文地址: https://ju.6miu.com/read-664816.html

    最新回复(0)