zoukankan      html  css  js  c++  java
  • Mybatis一对一,一对多,多对多代码

    一对一

     <!-- 关系映射 -->
        <!-- 1-1:自动映射 -->
        <select id="oneToOne" resultType="UserView">
            select u.*,c.num from user u,card c where u.id=c.per_fk
        </select>
        
        <!-- 1-1:手动映射之级联查询  -->
        <resultMap type="card" id="cardrs">
           <result property="num" column="num"/>
        </resultMap>
        <resultMap type="user" id="commrs">
           <id column="id" property="id"/>
           <result column="username" property="username"/>
           <result column="sex" property="sex"/>
        </resultMap>
        <resultMap type="user" id="oTors" extends="commrs">
           <!-- <id column="id" property="id"/>
           <result column="username" property="username"/>
           <result column="sex" property="sex"/> -->
           <!--association:完成自定义类型的映射
               property:User类中自定义类型(Card)的属性名
               javaType:指定对应属性的类型-->
           <association property="card" javaType="card" resultMap="cardrs">
              <!-- <result property="num" column="num"/> -->
           </association>
        </resultMap>
        <select id="oneToOne1" resultMap="oTors">
            select u.*,c.num from user u,card c where u.id=c.per_fk
        </select>

    一对一(嵌套查询例)

    <!-- 1-1:手动映射之嵌套查询(分步)  -->
        <resultMap type="User" id="oTors2" >
           <!-- <id column="id" property="id"/>
           <result column="username" property="username"/>
           <result column="sex" property="sex"/> -->
           <!-- select:调用另外一条sql语句(命名空间.sql语句id)
                column:在第一个结果集中用来关联查询的列名 -->
           <association property="card" javaType="card" 
           select="com.offcn.dao.UserDao.getCardByUid" column="id"></association>
        </resultMap>
        <select id="oneToOne2" resultMap="oTors2">
           select  * from user  
        </select>
        
        <select id="getCardByUid" parameterType="int" resultType="card">
           select * from card where per_fk=#{uid}
        </select>

    一对多

    <!-- 1-n:关联查询 -->
        <resultMap type="Orders" id="orderrs">
               <id column="oid" property="id"></id>
               <result column="number" property="number"/>
        </resultMap>
        <resultMap type="user" id="oTmrs" extends="commrs">
            <collection property="olist" ofType="Orders" resultMap="orderrs">
                <id column="oid" property="id"></id>
               <result column="number" property="number"/>
            </collection>
        </resultMap>
        <select id="oneToMany" resultMap="oTmrs">
           select u.*,o.id oid,o.number from user u,orders o where u.id=o.userId
        </select>
        
        <!--1-n:嵌套查询-->
        <resultMap type="user" id="oTmrs2">
            <collection property="olist" ofType="Orders" 
            select="com.offcn.dao.UserDao.getOrdersByUid" column="id"></collection>
        </resultMap>
        <select id="oneToMany2" resultMap="oTmrs2">
           select * from user
        </select>
        
        <select id="getOrdersByUid" parameterType="int" resultType="Orders">
           select * from orders where userId=#{uid}
        </select>

    多对多

    <resultMap type="user" id="mTmrs">
            <result column="username" property="username"/>
            <collection property="olist" ofType="Orders">
               <result property="number" column="number"/>
               
               <collection property="dlist" ofType="Orderdetail">
                  <result column="itemsNum" property="itemsNum"/>
                  
                  <association property="items" javaType="Items">
                      <result column="name" property="name"/>
                      <result column="price" property="price"/>
                  </association>
               </collection>
            </collection>
        </resultMap>
        <select id="manyToMany" resultMap="mTmrs">
           select u.username,o.number,i.name,i.price,d.itemsNum  
           from user  u,orders o,orderdetail d,items i 
           where u.id=o.userId and o.id=d.ordersId and d.itemsId=i.id
        </select>
        

    嵌套查询和关联查询的区别:

    1、关联查询是使用一条sql语句对数据库进行查询,在查询后根据查询结果将数据和自定义的resultMap集合返回结果

    2、嵌套查询根据查询的内容分表查询,每个表至少查询一次,查询的结果嵌套使用。

    3、关联查询的结果集必须将所有的属性都配置,没有配置的不会映射,嵌套查询如果有相同的属性会自动映射数据到对象

  • 相关阅读:
    混合背包
    庆功会(多重背包)
    商店选址问题(dij)(未完成)
    城市问题(dij)
    最短路径问题(dijkstra)
    城市问题(Floyd)
    商店选址问题(Floyd)
    差值中位数(二分答案+判定中位数)
    CF448C Painting Fence(分治)
    字符串+数论(扩展欧拉定理)
  • 原文地址:https://www.cnblogs.com/meani/p/12001713.html
Copyright © 2011-2022 走看看