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>

浙公网安备 33010602011771号