Mybatis关联查询(一对一,一对多)

一对一举例:每个人对应的身份证号,身份证号是唯一的,身份证号跟我们就是一对一,每个人的账号信息,每一个账号只能属于一个人,账号和我们也是一对一
多对一举例:账号信息跟我们是一对一,反过来就是多对一,我们可以用多个账号,学生对应老师也是多对一

准备两张表,账户表,用户信息表
在这里插入图片描述
在这里插入图片描述

一对一查询

  • 是在主实体类(Account)中添加需要关联的实体类(userInfo)作为属性,再配合映射文件的ResultMap的association来实现

AccountMapper接口:

public interface AccountMapper {
    List<Account> findAll();
}

AccountMapper.xml映射文件:

<?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="com.one.to.one.mapper.AccountMapper">
    <resultMap id="resultMap" type="account">
        <id column="id" property="id"></id>
        <result column="uid" property="uid"></result>
        <result column="money" property="money"></result>
        <!--
        association:配置属性一对一
        property:对应Account里面的userInfo属性名
        javaType:这个属性的类型
        -->
        <association property="userInfo" javaType="javaType="com.one.to.one.entity.UserInfo"">
            <id column="id" property="id"></id>
            <result column="name" property="name"></result>
            <result column="age" property="age"></result>
            <result column="gender" property="gender"></result>
            <result column="address" property="address"></result>
        </association>
    </resultMap>

    <select id="findAll" resultMap="resultMap">
        SELECT
               a.*,
               u.id,
               u.`NAME`,
               u.AGE,
               u.GENDER,
               u.ADDRESS
        FROM
             account a,
             user_info u
        WHERE a.UID = u.ID
    </select>
</mapper>

Account实体:

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Account {
    private Integer id;
    private Integer uid;
    private Double money;
    private UserInfo userInfo;
}

一对多查询

  • 是在主实体类(userInfo)中添加需要关联的实体类(Account)作为属性,再配合映射文件的ResultMap的collection来实现 ,⼀对多查询结果查询映射,⽐如用户有多个账户

UserInfoMapper接口:

public interface UserInfoMapper {
    List<UserInfo> findAll();
}

UserMapper.xml映射文件:

<?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="com.one.to.one.mapper.UserInfoMapper">
    <resultMap id="resultMap" type="UserInfo">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <result column="age" property="age"></result>
        <result column="gender" property="gender"></result>
        <result column="birthday" property="birthday"></result>
        <result column="address" property="address"></result>
        <result column="birthday" property="birthday"></result>
        <result column="createTime" property="createTime"></result>
        <result column="updateTime" property="updateTime"></result>
        <!--
        collection:是用于建立一对多中集合属性的对应关系
        property:pojo类中集合类属性的名称
        ofType:指定集合中对象类型
        -->
        <collection property="accounts" ofType="com.one.to.one.entity.Account">
            <id column="aid" property="id"></id>
            <result column="uid" property="uid"></result>
            <result column="money" property="money"></result>
        </collection>
    </resultMap>

    <select id="findAll" resultMap="resultMap">
        SELECT u.`NAME`,
               u.AGE,
               u.GENDER,
               u.ADDRESS,
               a.*
        FROM user_info u
                 LEFT JOIN account a ON u.id = a.UID;
    </select>
</mapper>

UserInfo实体:

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class UserInfo {
    private Integer id;
    private String name;
    private Integer age;
    private String gender;
    private Date birthday;
    private String address;
    private Date createTime;
    private Date updateTime;
    private List<Account> accountList;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值