mybatis 多表关联查询 多对多的关联查询

创建多对多需要一个中间表

中间表为联合主键,有两个主键和两个外键

关联查询

例子:

根据 ID 查询用户与订单以及订单中所包含的所有商品。

1.创建商品表

点击查看代码
CREATE TABLE `items` (
`itemid` int(11) NOT NULL AUTO_INCREMENT,
`itemname` varchar(255) DEFAULT NULL,
`itemprice` double DEFAULT NULL,
PRIMARY KEY (`itemid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

2.创建中间表

点击查看代码
CREATE TABLE `orders_items` (
`order_id` int(11) NOT NULL,
`item_id` int(11) NOT NULL,
PRIMARY KEY (`order_id`,`item_id`),
KEY `order_item_fk2` (`item_id`),
CONSTRAINT `order_item_fk1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`orderid`),
CONSTRAINT `order_item_fk2` FOREIGN KEY (`item_id`) REFERENCES `items` (`itemid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.创建商品类实体

4.修改订单表添加商品集合(也可以添加到users表中,一样的可以)

4.修改映射文件

点击查看代码
<!--    多对多-->
    <resultMap id="usersAndOrdersAndItems" type="com.bjsxt.pojo.Users">
        <id property="userid" column="userid"></id>
        <result property="username" column="username"/>
        <result property="usersex" column="usersex"/>
        <collection property="orders" ofType="com.bjsxt.pojo.Orders">
            <id property="orderid" column="orderid"/>
            <result property="orderprice" column="orderprice"/>
<!--            支持嵌套-->
            <collection property="items" ofType="com.bjsxt.pojo.items">
                <id property="itemid" column="itemid"/>
                <result property="itemname" column="itemname"/>
                <result property="itemprice" column="itemprice"/>
            </collection>
        </collection>
    </resultMap>

5.创建查询语句

点击查看代码
    <select id="selectUsersAndOrdersAndItems" resultMap="">
        select * from users as u,orders as o,items as i,order_items as oi where u.userid=o.user_id and o.orderid=oi.order_id and i.itemid=oi.item_id and u.userid={userid}
    </select>
posted @ 2021-12-01 15:18  风的指引  阅读(159)  评论(0)    收藏  举报