mybatis 一对多映射,多对一映射

笔记:仅供自己复习使用,有问题大家可以指出来

1.一对多使用collection

例如mybatis官网官网的实例如下:

<resultMap id="blogResult" type="Blog">
  <collection property="posts" javaType="ArrayList" column="id" ofType="Post" select="selectPostsForBlog"/>
</resultMap>

<select id="selectBlog" resultMap="blogResult">
  SELECT * FROM BLOG WHERE ID = #{id}
</select>

<select id="selectPostsForBlog" resultType="Post">
  SELECT * FROM POST WHERE BLOG_ID = #{id}
</select>

主sql为selectBlog,但是它的返回结果是resultMap,我们找到resultMap,它把主sql:selectBlog查询的id又作为了查询条件,同一命名空间下,sql为selectPostsForBlog这条,查询一个博客下有多少帖子;我们得到的结果是博客对象和其对应的帖子,这个应该是封装到一个VO对象里面。这样就实现了关联嵌套查询。

2.多对一使用association

例如mybatis官网官网的实例如下:

<resultMap id="blogResult" type="Blog">
  <association property="author" column="author_id" javaType="Author" select="selectAuthor"/>
</resultMap>

<select id="selectBlog" resultMap="blogResult">
  SELECT * FROM BLOG WHERE ID = #{id}
</select>

<select id="selectAuthor" resultType="Author">
  SELECT * FROM AUTHOR WHERE ID = #{id}
</select>

主sql是selectBlog,其返回结果类型为resultMap,我们根据其id找到上面的resultMap,这个和collection相反,把同一个Author的博客归到一类,它后面的子查询(同一命名空间下)selectAuthor找到了Author为同一人的博客,并按Author分类

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值