• MYBATIS SQL一对多查询 返回对象或LIST中包含子LIST


    MYBATIS SQL一对多查询 返回对象或LIST中包含子LIST

    标签: mybatis

     
     

    数据库对应关系如下图  : 两个表的关联关系 是  store_code 和 sku_code 同时相等

    要求查询结果(图一)

     "list": [
                {
        
                    "storeCode": "0001",
                    "skuCode": "0200000306",
                    "proStatus": 0,
                    "curNumber": 3,                              
                    "batchList": [
                        {
                            "id": "b55ad08528bd42049a0ba6effa3e6e1e",
                            "storeCode": "0001",
                            "skuCode": "0200000306",
                            "providerCode": "000002",
                            "batchNumber": "1906170004",
                            "price": 5000,
                            "curNumber": 2
         
                        },
                        {
                            "id": "f8c5fdc911c841ae8ef4278a504b9a80",
                            "storeCode": "0001",
                            "skuCode": "0200000306",
                            "providerCode": "000017",
                            "batchNumber": "1907160001",
                            "price": 2000,
                            "curNumber": 1
     
                        }
                    ]
                },
                {
                   
                    "storeCode": "0001",
                    "skuCode": "52020103",
                    "proStatus": 0,
                    "curNumber": 2,              
                    "batchList": [
                        {
                            "id": "caca5271355c4139834dc1069a8290ff",
                           
                            "storeCode": "0001",
                            "skuCode": "52020103",
                            "providerCode": "000017",
                            "batchNumber": "1907160001",
                            "price": 0,
                            "curNumber": 2
                   
                       
                        }
                    ]
                }              
               
            ]
    实现方式:

    1.创建两张表对应的实体类:

    public class SkuStock {
     
     
        @FieldNote("店代码")
        private String storeCode;
     
        @FieldNote("商品SKU编码")  
        private String skuCode;
     
       @FieldNote("促销状态:0普通商品1促销商品")
        private Integer proStatus;
      
        @FieldNote("商品现存")
        private java.math.BigDecimal curNumber;
     
        @FieldNote("需要返回的批次列表")  // 返回数据要包含的list
        private List<SkuStockBatch> batchList;
    }
    public class SkuStockBatch  {
     
     
        @FieldNote("店代码")  
        private String storeCode;
     
        @FieldNote("商品SKU编码")  
        private String skuCode;
     
        @FieldNote("供应商编码")  
        private String providerCode;
     
        @FieldNote("批号")
        private String batchNumber;
     
        @FieldNote("零售价")
        private java.math.BigDecimal price;
     
        @FieldNote("商品现存")
        private java.math.BigDecimal curNumber;
     
      }
    

      2.  xml文件resultMap的写法

    <resultMap type="com.a.b.model.sku.SkuStock" id="ResultMap">
            <id column="id" property="id" jdbcType="VARCHAR"/>
            <id column="store_code" property="storeCode" jdbcType="VARCHAR"/>
            <id column="sku_code" property="skuCode" jdbcType="VARCHAR"/>
            <id column="pro_status" property="proStatus" jdbcType="INTEGER"/>
            <id column="no_number" property="noNumber" jdbcType="DECIMAL"/>
     
           //property="batchList"   ,要与第一步对象中定义的list属性名称一样
     
            <collection property="batchList" resultMap="BatchListResultMap"/>
        </resultMap>
     
      <resultMap type="com.a.b.model.sku.SkuStockBatch" id="BatchListResultMap">
            <id column="ssb_id" property="id" jdbcType="VARCHAR"/>
            <id column="store_code" property="storeCode" jdbcType="VARCHAR"/>
            <id column="provider_code" property="providerCode" jdbcType="VARCHAR"/>
            <id column="sku_code" property="skuCode" jdbcType="VARCHAR"/>
            <id column="batch_number" property="batchNumber" jdbcType="VARCHAR"/>
            <id column="price" property="price" jdbcType="DECIMAL"/>
     
     <!--由于SkuStockBatch表的cur_number和id字段与主表SkuStock重复 所以去了别名区分解析映射结果-->
            <id column="ssb_cur_number" property="curNumber" jdbcType="DECIMAL"/>       
        </resultMap>
    

      3.定义一个BathList_Column_List,方便多个查询sql中引入不必重复写

    <sql id="BathList_Column_List">
            ssb.id as ssb_id, ssb.store_code, ssb.provider_code, ssb.sku_code,ssb.batch_number,
            ssb.price, ssb.cur_number as ssb_cur_number
        </sql>
    

      4.SQL的写法,查询所有的Batch ,并包含订单详情batchList的对象集合,引入前面已经定义好的BathList_Column_List

    <select id="findAll" resultMap="ResultMap">
            SELECT ss.*,<include   refid="BathList_Column_List"/> FROM 
            sku_stock ss
            left join sku_stock_batch ssb 
            on ssb.store_code=ss.store_code and
            ssb.sku_code = ss.sku_code
          
            order by ss.create_time desc
        </select>
    

      原文地址  https://i.cnblogs.com/posts/edit

  • 相关阅读:
    GitHub上传项目遇到的问题 安静点
    jQuery自定义动画 安静点
    WPF验证器 安静点
    jQuery自定义插件 安静点
    jQuery多库共存 安静点
    WPF之行为(Behavior) 安静点
    jQuery显示隐藏 安静点
    window.onload与 $(document).ready()区别 安静点
    jQuery展开收缩 安静点
    jQuery动态导航栏 安静点
  • 原文地址:https://www.cnblogs.com/xianz666/p/16256576.html
Copyright © 2020-2023  润新知