一对多,多对多查询

1. 一对多配置

1. 什么是一对多
如用户表和订单表,
单个用户可能有多个订单,即一对多。

如班级表和学生表
一个班级有多个学生,学生表的外键为
班级表的主键。
  • 如下面就是一对多,查询用户对应的订单配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.bitqian.dao.UserMapper">

    <!-- 查询user 和订单对应的列 -->
    <resultMap id="userAndOrderMap" type="User">
        <id property="userId" column="userid"/>
        <result property="userName" column="username"/>
        <result property="userPassword" column="userpassword"/>
        <result property="birthday" column="birthday"/>

        <!-- 配置订单
         orderList 用户的对应的订单列表
         ofType 订单的类型是Order
         -->
        <collection property="orderList" ofType="Order">
            <id property="orderId" column="order_id" />
            <result property="orderTime" column="order_time"/>
            <result property="orderMoney" column="order_money"/>
        </collection>
    </resultMap>

    <select id="queryAllUserAndOrder" resultMap="userAndOrderMap">
        SELECT * FROM users1 u , orders o
        WHERE u.`userId` = o.`uid`
    </select>

</mapper>
  • user实体多了个 装订单的集合
public class User {
    
    

    private Integer userId;
    private String userName;
    private String userPassword;
    private Date birthday;

    // 一对多 每个用户 有多个订单
    private List<Order> orderList;

	// 省略n多..

}

2. 多对多实现

1. 多对多关系实现
如用户表和角色表
一个用户可能扮演多个角色,如是程序员,也可以是
歌手。
而单个角色也有多个人在扮演。
而决定用户表和角色表的有中间第三个表,用户角色关系表,
这个表有用户表和角色表的主键两个列。

再如歌单表和歌曲表
歌单里面有多首歌曲,一首歌曲会出现多个歌单里面。
典型的多对多关系。中间也是由第三个表
将歌单和歌曲表的主键联系起来的。

与一对多的区别:
	多了个中间的关系表,把两个表通过主外键联系起来。
  • 以角色表为例
-- 用户表
create table `users1` (
	`userId` int (11),
	`userName` varchar (60),
	`userPassword` varchar (120),
	`birthday` bigint (255)
); 

-- 角色表
CREATE TABLE role (
	role_id INT PRIMARY KEY,
	role_name VARCHAR(30) NOT NULL UNIQUE
);

-- 将用户表和角色表连接起来的表
CREATE TABLE user_role (
	user_id INT NOT NULL,
	role_id INT NOT NULL
);
  • 用户新增角色表字段
    // 新增角色表 每个用户有多个角色,每个角色可能对应多个用户
    private List<Role> roleList;
  • 用户和对应的角色多对多配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="cn.bitqian.dao.UserMapper">

    <resultMap id="userAndRoleMap" type="User">

        <id property="userId" column="userId"/>
        <result property="userName" column="userName"/>
        <result property="userPassword" column="userPassword"/>
        <result property="birthday" column="birthday"/>

        <collection property="roleList" ofType="Role">
            <id property="roleId" column="role_id"/>
            <result property="roleName" column="role_name"/>
        </collection>
    </resultMap>

    <!--多对多查询-->
    <select id="queryAllUserAndRole" resultMap="userAndRoleMap">
        SELECT * FROM users1, user_role, role
        WHERE users1.`userId` = user_role.`user_id`
        AND role.`role_id` = user_role.`role_id`
    </select>
</mapper>

猜你喜欢

转载自blog.csdn.net/qq_44783283/article/details/108566951