Mybatis一对多关系的ResultMap写法

ResultMap的写法
<resultMap id="UserAndItemsResultMap" type="com.iot.mybatis.po.User">
    <id column="user_id" property="id"/>
    <result column="username" property="username"/>
    <result column="sex" property="sex"/>
    <result column="address" property="address"/>
    <collection property="ordersList" ofType="com.iot.mybatis.po.Orders">
        <id column="id" property="id"/>
        <result column="number" property="number"/>
        <result column="createtime" property="createtime"/>
        <result column="note" property="note"/>
        <collection property="orderdetails" ofType="com.iot.mybatis.po.Orderdetail">
            <id column="oderdetail_id" property="id"/>
            <result column="items_id" property="items_id"/>
            <result column="items_num" property="items_num"/>
            <result column="orders_id" property="orders_id"/>
            <association property="items" javaType="com.iot.mybatis.po.Items">
                <id column="items_detail" property="id"/>
                <result column="items_name" property="name"/>
                <result column="items_detail" property="detail"/>
                <result column="items_price" property="price"/>
            </association>
        </collection>
    </collection>
</resultMap>



①ResultMap标签
type中应该填写返回值的pojo类型,例子中的User包含了用户的基本信息以及一个存放订单orders的pojo的list集合。orders的pojo除了订单信息,还包括了订单详细ordersdetail的list集合。
②collection标签
collection表示一对多的关系,property是定义好的集合类型,oftype指定集合中的元素类型。
③id标签
作用相当于外键,用于两表关联的标识。
④result标签
普通列,column对应数据库中表的列,property对应类中定义的属性。
⑤association标签
表示一对一的映射关系。
⑥结构分析
商品items和订单明细orderdetails是一对一的关系,通过association联系在一起。items和orderdetails整个关联体和order是多对一的关系。而用户和order是一对多关系,所以items和orderdetails的关联体以collection的方式包含在整个order的collection中。

联合查询JOIN
SELECT
c.id,
c.title,
c.poster,
c.content,
c.category_id,
r.subject_id,
r.resource_title,
r.resource_type,
r.resource_file_path
FROM
tsr_content c
LEFT JOIN tsr_resource_file r ON c.id = r.subject_id
WHERE c.is_deleted = 0
ORDER BY c.position ASC, c.create_time DESC
Mybatis Collection查询集合只出现一条数据
1、原因
如果两表联查,主表和明细表的主键都是id的话,明细表的多条只能查询出来第一条。

2、解决办法
级联查询的时候,主表和从表有一样的字段名的时候,在mysql上命令查询是没问题的。但在mybatis中主从表需要为相同字段名设置别名。设置了别名就OK了。
posted @ 2020-09-02 10:33  pxuan  阅读(966)  评论(0编辑  收藏  举报