zoukankan      html  css  js  c++  java
  • MyBatis 多表连接查询

    多表连接的两种方式(数据库逻辑模型):

    1.一对一关系

    2.一对多关系

    一、通过 resultMap 和 association 实现一对一关系

    在 mapper.xml 文件里面的代码:

     <resultMap type="com.pojo.TRecruitment" id="tRecruitmentCollegeResultMap">
        <id property="id" column="id" />
        <result property="title" column="title" />
        <result property="litimg" column="litimg" />
        <result property="publishedTime" column="published_time" />
        <result property="author" column="author" />
        <result property="collegeId" column="college_id" />
        <result property="type" column="type" />
        <result property="details" column="details" />
        
        <!-- association :配置一对一属性 -->
        <!-- property:实体类中里面的 TCollege 属性名 -->
        <!-- javaType:属性类型 -->
        <association property="tCollege" javaType="com.pojo.TCollege" >
            <!-- id:声明主键,表示 college_id 是关联查询对象的唯一标识-->
            <id property="collegeId" column="college_id" />
            <result property="collegeName" column="college_name" />
            <result property="collegeImg" column="college_img" />
        </association>
    </resultMap>
     
    <!-- 一对一关联,查询订单,订单内部包含用户属性 -->
    <select id="querytTRecruitmentResultMap" resultMap="tRecruitmentCollegeResultMap">
        SELECT
        r.id,
        r.title,
        r.litimg,
        r.published_time,
        r.author,
        r.type,
        r.details,
        c.college_name
        FROM
        `t_recruitment` r
        LEFT JOIN `t_college` c ON r.college_id = c.college_id
    </select>

    在 mapper.java 文件里面写接口:

    List<TRecruitment> querytTRecruitmentResultMap();

    在对应的实体类中声明另外一个实体类:

    二、通过 resultMap 和 collection 实现一对多关系

    xml 文件:

    <!-- 一个用户,拥有多个订单 -->
    <resultMap type="User" id="UserAndOrdersResultMap">
     
        <!-- 先配置 User 的属性 -->
        <id column="id" property="id" />
        <result column="username" property="username" />
        <result column="birthday" property="birthday" />
        <result column="sex" property="sex" />
        <result column="address" property="address" />
     
        <!-- 再配置 Orders 集合 -->
        <collection property="ordersList" ofType="Orders">
            <id column="oid" property="id" />
            <result column="user_id" property="userId" />
            <result column="number" property="number" />
            <result column="createtime" property="createtime" />
        </collection>
     
    </resultMap>
     
    <select id="findUserAndOrders" resultMap="UserAndOrdersResultMap">
        SELECT u.*, o.`id` oid, o.`number`, o.`createtime`
        FROM USER u, orders o
        WHERE u.`id` = o.`user_id`;
    </select>

    原文:https://blog.csdn.net/weidong_y/article/details/80557941

  • 相关阅读:
    cf1100 F. Ivan and Burgers
    cf 1033 D. Divisors
    LeetCode 17. 电话号码的字母组合
    LeetCode 491. 递增的子序列
    LeetCode 459.重复的子字符串
    LeetCode 504. 七进制数
    LeetCode 3.无重复字符的最长子串
    LeetCode 16.06. 最小差
    LeetCode 77. 组合
    LeetCode 611. 有效三角形个数
  • 原文地址:https://www.cnblogs.com/panchanggui/p/10872506.html
Copyright © 2011-2022 走看看