美文网首页
关联查询

关联查询

作者: 充满智慧的白痴 | 来源:发表于2019-12-17 11:46 被阅读0次

    一对一

    <select id="selectOrderAndUserByOrderID" resultMap="getOrderAndUser">
            select * from orders o,user u where o.user_id=u.id and o.id=#{id}
     </select>
     <resultMap type="com.ys.po.Orders" id="getOrderAndUser">
     <!--
     id:指定查询列表唯一标识,如果有多个唯一标识,则配置多个id
     column:数据库对应的列
     property:实体类对应的属性名
     -->
         <id column="id" property="id"/>
         <result column="user_id" property="userId"/>
         <result column="number" property="number"/>
         <!--association:用于映射关联查询单个对象的信息
     property:实体类对应的属性名
     javaType:实体类对应的全类名
     -->
     // 在user表里面搜索出来的内容将会现在关联的字段association之中
         <association property="user" javaType="com.ys.po.User">
     <!--
     id:指定查询列表唯一标识,如果有多个唯一标识,则配置多个id
     column:数据库对应的列
     property:实体类对应的属性名
     -->
             <id column="id" property="id"/>
             <result column="username" property="username"/>
             <result column="sex" property="sex"/>
         </association>
     </resultMap>
    

    使用mybatis的思想来写程序

    使用面向对象的思想来解释程序

    直接写sql的一对一查询中,另外一张表的查询结果将会放在association标签中,而这个标签也需要一个javaType,作为返回,其中的的列名也和该类型相对应

     select user_id from order WHERE id=1;//得到user_id
     select * from user WHERE id=1  //1 是上一个查询得到的user_id的值
     property:别名(属性名)    column:列名 -->
     <select id="getOrderByOrderId" resultMap="getOrderMap">
           select * from order where id=#{id}
     </select>
    <resultMap type="com.ys.po.Orders" id="getOrderMap">
         <id column="id" property="id"/>
         <result column="number" property="number"/>
         <association property="userId"  column="id" select="getUserByUserId"></association>
     </resultMap>
    <select id="getUserByUserId" resultType="com.ys.po.User">
             select * from user where id=#{id}
    </select>
    // 使用嵌套查询的方式, association有三个参数,
    //property:指定主查询语句传入的副查询语句的字段
    //column:指定主查询语句传入的字段对应副查询语句的字段名
    //select指定副查询语句的id
    

    写嵌套分多条写sql,明确传入的字段的对应关系,选择副查询语句

    一对多

    <resultMap type="com.sftest.model.User" id="getUserAndOrders">
            <!--id:指定查询列表唯一标识,如果有多个唯一标识,则配置多个id
            column:数据库对应的列
            property:实体类对应的属性名 -->
            <id column="id" property="id"/>
            <result column="username" property="username"/>
            <result column="password" property="password"/>
            <result column="email" property="email"/>
            <result column="birthday" property="birthday"/>
            <result column="phone" property="phone"/>
            <result column="url" property="url"/>
            <!--
            property:实体类中定义的属性名
            ofType:指定映射到集合中的全类名
            -->
            <collection property="orders" ofType="com.sftest.model.Order">
                <id column="id" property="id"/>
                <result column="order_name" property="orderName"/>
            </collection>
    </resultMap>
    

    一对多的情况下,使用collection来装载List

    多对多

    相关文章

      网友评论

          本文标题:关联查询

          本文链接:https://www.haomeiwen.com/subject/pcbouctx.html