zoukankan      html  css  js  c++  java
  • mybatis关联查询,一对一,一对多

    注:这篇文章的代码有部分删减,不能直接使用,不过关键代码都存在 

    应用场景:

       想用mybatis做关联查询,并且把查询出的数据自动组装成对象可以使用关联查询。

    1、一对一实现  

    例如:一部小说,属于一个分类,查询小说的时候想同时查询出所属分类。

    1)实体定义:

    public class Book {
        private static final long serialVersionUID = 1L;
        
        /**
         *小说ID
         */
        private Integer bookId;
        /**
         *作者
         */
        private String author;
        /**
         *小说名称
         */
        private String bookName;
        /**
        /**
         *分类ID
         */
        private Integer catalogId;
        
        private CrawlCatalog catalog;
    }
    public class Catalog  {
        private static final long serialVersionUID = 1L;
        
        /**
         *分类ID
         */
        private Integer catalogId;
        /**
         *分类名字
         */
        private String name;
    }

    2) BookMapper实现

        <!--通用表字段列表-->
        <resultMap id="ResultMapWithCata" type="Book">
            <result column="BOOK_ID" property="bookId" jdbcType="INTEGER"/>
            <result column="AUTHOR" property="author" jdbcType="VARCHAR"/>
            <result column="BOOK_NAME" property="bookName" jdbcType="VARCHAR"/>
            <result column="CATALOG_ID" property="catalogId" jdbcType="INTEGER"/>
            <association property="catalog" javaType="Catalog">
                <id column="CATALOG_ID" property="catalogId" />
                <result column="CATALOGNAME" property="name" />
            </association>
        </resultMap>
        <!--通用表字段列表-->
      <!--
        方法名称: selectListByIds
        调用路径: BookEntityMapper.selectListByIds
        开发信息: 
        处理信息: 根据ID查询记录
        -->
        <select id="selectListByIds" parameterType="java.util.List" resultMap="ResultMapWithCata">
           SELECT   
                   <include refid="columnListAlias"/>, c.NAME AS CATALOGNAME
           FROM   BOOK b, CATALOG c
           WHERE b.CATALOG_ID=c.CATALOG_ID AND (
            <foreach collection="list" item="item" index="index" separator=" OR " >  
                BOOK_ID=#{item}
               </foreach>
               )
        </select>

    2、多对一实现

    例如:一个用户在商城生成了一个订单,订单中包含很多商品,想在查询订单的同时把订单的明细查询出来

    1)实体定义

    public class Order {
        /** 主键订单Id */
        private Integer id;
        /** 下单用户id */
        private Integer userid;
        // 订单明细
        private List<OrderDetail> orderdetails;
    }
    public class OrderDetail {
        /** 主鍵,訂單明细表Id */
        private Integer id;
        /** 訂單Id */
        private Integer orderId;
        /** 商品id */
        private Integer itemsId;
        /** 商品购买数量 */
        private Integer itemsNum;
        // 明细对应的商品信息
        private Items items;
    }

    2)OrderMapper实现

    <!-- 查询订单关联查询用户及订单明细 -->
    <select id="findOrdersAndOrderDetailResultMap" resultMap="ordersAndOrderDetailResultMap">
        SELECT 
          t1.*,
          t3.id orderdetail_id,
          t3.item_id,
          t3.item_num,
          t3.order_id
        FROM
          order t1,
          orderdetail t3
        WHERE t3.orders_id=t1.id
    </select>
    <!-- 查询订单(关联用户)及订单明细的resultMap -->
    <resultMap type="Orders" id="ordersAndOrderDetailResultMap">
      <id column="id" property="id"/>
      <result column="user_id" property="userId"/>
      <collection property="orderdetails" ofType="OrderDetail">
        <id column="orderdetail_id" property="id"/>
        <result column="item_id" property="itemId"/>
        <result column="item_num" property="itemNum"/>
        <result column="order_id" property="orderId"/>
      </collection>
    </resultMap>
  • 相关阅读:
    apk获取后台源代码
    Oracle用其中一个表的数据更新另一个表
    As的LogCat打开方法
    任意东西转Json
    将一个实体中相同字段的值赋值给另一个实体
    request乱码,又不能改request本身编码格式时可以进行转码
    oracle触发器
    搭建AS时各种报错解决方法(32位AMD)
    计算两个时间之间相差了多少时间
    thinkphp支持query查询
  • 原文地址:https://www.cnblogs.com/yinkh/p/5564033.html
Copyright © 2011-2022 走看看