MyBatis映射之association和collection详解

一、引言

一直对association和collection有点混淆,现整理一篇文章,用于加强记忆。

二、association

association用于一对一、多对一场景使用。

现在有2个表book表、bookshelf书架表。

BOOK
字段名称类型备注
idint主键
namevarchar书名
typeint类型
shelf_idint书架id
Book_shelf
字段名称类型备注
idint主键
numbervarchar书架编号
numint可存放数量

 

现有需求:查询根据书籍id查询书籍信息和所在书架编号。

PoJo

public class Book{
private Integer id;
private String name;
private String type;
private Integer shelfId;
private BookShelf bookShelfDto;
}
public class BookShelf {
private Integer id;
private String number;
private String num;
}

mapper

<resultMap id="bookResultMap" type="com.abc.Book">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="type" column="type"/>
    <!--关联属性-->
    <association property="bookShelfDto" javaType="com.abc.BookShelf">
        <id property="id" column="shelf_id"/>
        <result property="number" column="number"/>
        <result property="num" column="num"/>
    </association>
</resultMap>


<select id="getBookInfo" resultMap="bookResultMap">
select book.id,book.name,book.type,book.shelf_id,shelf.number,shelf.num
from book left join book_shelf shelf on book.shelf_id = shelf.id 
where book.id = #{id}
</select>

三、collection

应用场景为一对多关系,即实体里放集合。

表不变

现有需求:根据书架ID查询书架信息及书架存放的书籍信息。

POJO

public class Book{
private Integer id;
private String name;
private String type;
private Integer shelfId;
}
public class BookShelf {
private Integer id;
private String number;
private String num;
private List<Book> bookList;
}
<resultMap id="bookShelfResultMap" type="com.abc.BookShelf">
    <id property="id" column="shelf_id"/>
    <result property="number" column="number"/>
    <result property="num" column="num"/>
    <!--关联属性-->
    <collection property="bookList" javaType="com.abc.Book">
         <id property="id" column="id"/>
         <result property="name" column="name"/>
         <result property="type" column="type"/>
    </collection>
</resultMap>


<select id="getBookShelfInfo" resultMap="bookShelfResultMap">
select book.id,book.name,book.type,book.shelf_id,shelf.number,shelf.num
from book left join book_shelf shelf on book.shelf_id = shelf.id 
where shelf.id = #{id}
</select>

Mapper.java
BookShelf getBookShelfInfo(Integer id);

 

  • 14
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值