mybatis Sql查询 返回对象或者list数据中包含一个对象的list集合

1.查询的数据对象

@Data
public class JdOrder implements Serializable{
    private Long orderId;

    private Long finishTime;

    private Integer orderEmt;

    private Long orderTime;

    private Long parentId;

    private String payMonth;

    private Integer plus;

    private Long popId;

    private Long unionId;

    private String ext1;

    private Integer validCode;

    private String hasMore;
    //预估佣金
    private Double estimateFee;
    //商户名称
    private String merchantName;
    //顾客号码
    private String  customerId;

     **//返回数据要包含的list**
    private List<JdSkuList> jdSkuLists;

}

2.返回数据中被包含的list对象

@Data
public class JdSkuList extends JdSkuListKey implements Serializable{
    private Double actualCosPrice;

    private Double actualFee;

    private Double commissionRate;

    private Double estimateCosPrice;

    private Double estimateFee;

    private Double finalRate;

    private Long cid1;

    private Long frozenSkuNum;

    private String pid;

    private Long positionId;

    private Double price;

    private Long cid2;

    private Long siteId;

    private String skuName;

    private Long skuNum;

    private Long skuReturnNum;

    private Double subSideRate;

    private Double subsidyRate;

    private Long cid3;

    private String unionAlias;

    private String unionTag;

    private Integer unionTrafficGroup;

    private Integer validCode;

    private String subUnionId;

    private Integer traceType;

    private Integer payMonth;

    private Long popId;

    private String ext1;

    private String merchantName;
}

3.resultMap的写法

<resultMap id="BaseResultMap" type="com.luer.JD.bean.JdOrder">
        <id column="order_id" property="orderId" jdbcType="BIGINT"/>
        <result column="finish_time" property="finishTime" jdbcType="BIGINT"/>
        <result column="order_emt" property="orderEmt" jdbcType="INTEGER"/>
        <result column="order_time" property="orderTime" jdbcType="BIGINT"/>
        <result column="parent_id" property="parentId" jdbcType="BIGINT"/>
        <result column="pay_month" property="payMonth" jdbcType="VARCHAR"/>
        <result column="plus" property="plus" jdbcType="INTEGER"/>
        <result column="pop_id" property="popId" jdbcType="BIGINT"/>
        <result column="union_id" property="unionId" jdbcType="BIGINT"/>
        <result column="ext1" property="ext1" jdbcType="VARCHAR"/>
        <result column="valid_code" property="validCode" jdbcType="INTEGER"/>
        <result column="has_more" property="hasMore" jdbcType="VARCHAR"/>

       //property="jdSkuLists"   ,要与第一步对象中定义的list属性名称一样
        <collection property="jdSkuLists" resultMap="JdSkuListResultMap"/>

    </resultMap>
    
   
    <resultMap id="JdSkuListResultMap" type="com.luer.JD.bean.JdSkuList">
        <id column="order_id" property="orderId" jdbcType="BIGINT"/>
        <id column="sku_id" property="skuId" jdbcType="BIGINT"/>
        <result column="actual_cos_price" property="actualCosPrice" jdbcType="DOUBLE"/>
        <result column="actual_fee" property="actualFee" jdbcType="DOUBLE"/>
        <result column="commission_rate" property="commissionRate" jdbcType="DOUBLE"/>
        <result column="estimate_cos_price" property="estimateCosPrice" jdbcType="DOUBLE"/>
        <result column="estimate_fee" property="estimateFee" jdbcType="DOUBLE"/>
        <result column="final_rate" property="finalRate" jdbcType="DOUBLE"/>
        <result column="cid1" property="cid1" jdbcType="BIGINT"/>
        <result column="frozen_sku_num" property="frozenSkuNum" jdbcType="BIGINT"/>
        <result column="pid" property="pid" jdbcType="VARCHAR"/>
        <result column="position_id" property="positionId" jdbcType="BIGINT"/>
        <result column="price" property="price" jdbcType="DOUBLE"/>
        <result column="cid2" property="cid2" jdbcType="BIGINT"/>
        <result column="site_id" property="siteId" jdbcType="BIGINT"/>
        <result column="sku_name" property="skuName" jdbcType="VARCHAR"/>
        <result column="sku_num" property="skuNum" jdbcType="BIGINT"/>
        <result column="sku_return_num" property="skuReturnNum" jdbcType="BIGINT"/>
        <result column="sub_side_rate" property="subSideRate" jdbcType="DOUBLE"/>
        <result column="subsidy_rate" property="subsidyRate" jdbcType="DOUBLE"/>
        <result column="cid3" property="cid3" jdbcType="BIGINT"/>
        <result column="union_alias" property="unionAlias" jdbcType="VARCHAR"/>
        <result column="union_tag" property="unionTag" jdbcType="VARCHAR"/>
        <result column="union_traffic_group" property="unionTrafficGroup" jdbcType="INTEGER"/>
        <result column="valid_code" property="validCode" jdbcType="INTEGER"/>
        <result column="sub_union_id" property="subUnionId" jdbcType="VARCHAR"/>
        <result column="trace_type" property="traceType" jdbcType="INTEGER"/>
        <result column="pay_month" property="payMonth" jdbcType="INTEGER"/>
        <result column="pop_id" property="popId" jdbcType="BIGINT"/>
        <result column="ext1" property="ext1" jdbcType="VARCHAR"/>
    </resultMap>

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

<sql id="JdSkuList_Column_List" >
        jsl.order_id, jsl.sku_id, jsl.actual_cos_price, jsl.actual_fee, jsl.commission_rate, jsl.estimate_cos_price,
        jsl.estimate_fee, jsl.final_rate, jsl.cid1, jsl.frozen_sku_num, jsl.pid, jsl.position_id, jsl.price, jsl.cid2, jsl.site_id,
        jsl.sku_name, jsl.sku_num, jsl.sku_return_num, jsl.sub_side_rate, jsl.subsidy_rate, jsl.cid3, jsl.union_alias,
        jsl.union_tag, jsl.union_traffic_group, jsl.valid_code, jsl.sub_union_id, jsl.trace_type, jsl.pay_month,
        jsl.pop_id, jsl.ext1
    </sql>

5.SQL的写法,查询所有的JdOrder ,并包含订单详情JdSkuList的对象集合,引入前面已经定义好的JdSkuList_Column_List

<select id="selectOrder" resultMap="BaseResultMap">
      
        SELECT j.*,<include   refid="JdSkuList_Column_List"/> FROM jd_order j
         left join jd_sku_list jsl on jsl.order_id=j.order_id
        order by j.order_time desc
    </select>

6.SQL也可以全部写出,个人喜欢引入的方法,看着清爽,节约资源

<select id="selectOrder" resultMap="BaseResultMap">
        SELECT j.*, 
        jsl.order_id, jsl.sku_id, jsl.actual_cos_price, jsl.actual_fee, jsl.commission_rate, jsl.estimate_cos_price,
        jsl.estimate_fee, jsl.final_rate, jsl.cid1, jsl.frozen_sku_num, jsl.pid, jsl.position_id, jsl.price, jsl.cid2, jsl.site_id,
        jsl.sku_name, jsl.sku_num, jsl.sku_return_num, jsl.sub_side_rate, jsl.subsidy_rate, jsl.cid3, jsl.union_alias,
        jsl.union_tag, jsl.union_traffic_group, jsl.valid_code, jsl.sub_union_id, jsl.trace_type, jsl.pay_month,
        jsl.pop_id, jsl.ext1 
        FROM jd_order j
        left join jd_sku_list jsl on jsl.order_id=j.order_id
        order by j.order_time desc
    </select>

7.通过postman测试发送请求,查询出两条结果,第一条包含jdSkuLists中含有三条数据,第二条包含一条数据,测试成功

{
    "code": 200,
    "msg": "success",
    "data": [
        {
            "orderId": 86475668988,
            "finishTime": 1556167285000,
            "orderEmt": 2,
            "orderTime": 1555661964000,
            "parentId": 0,
            "payMonth": "0",
            "plus": 0,
            "popId": 10084045,
            "unionId": 1001466274,
            "ext1": "",
            "validCode": 17,
            "hasMore": "false",
            "estimateFee": null,
            "merchantName": null,
            "customerId": null,
            "jdSkuLists": [
                {
                    "orderId": 86475668988,
                    "skuId": 44132717554,
                    "actualCosPrice": 0,
                    "actualFee": 0,
                    "commissionRate": 5,
                    "estimateCosPrice": 0,
                    "estimateFee": 0,
                    "finalRate": 90,
                    "cid1": 6144,
                    "frozenSkuNum": 0,
                    "pid": "",
                    "positionId": 0,
                    "price": 0,
                    "cid2": 12042,
                    "siteId": 55000,
                    "skuName": "珠宝盒 赠品",
                    "skuNum": 1,
                    "skuReturnNum": 0,
                    "subSideRate": 90,
                    "subsidyRate": 0,
                    "cid3": 12055,
                    "unionAlias": "",
                    "unionTag": "00000000",
                    "unionTrafficGroup": 4,
                    "validCode": 17,
                    "subUnionId": "luertest",
                    "traceType": 2,
                    "payMonth": 0,
                    "popId": 10084045,
                    "ext1": "",
                    "merchantName": null
                },
                {
                    "orderId": 86475668988,
                    "skuId": 40043797202,
                    "actualCosPrice": 29.9,
                    "actualFee": 5.38,
                    "commissionRate": 20,
                    "estimateCosPrice": 29.9,
                    "estimateFee": 5.38,
                    "finalRate": 90,
                    "cid1": 6144,
                    "frozenSkuNum": 0,
                    "pid": "",
                    "positionId": 0,
                    "price": 129.9,
                    "cid2": 12042,
                    "siteId": 55000,
                    "skuName": "千楼珠宝 淡水珍珠耳钉 紫色 镜面光 高品质 8-9mm馒头珍珠耳环 S925银 一对装 ",
                    "skuNum": 1,
                    "skuReturnNum": 0,
                    "subSideRate": 90,
                    "subsidyRate": 0,
                    "cid3": 12055,
                    "unionAlias": "",
                    "unionTag": "00000000",
                    "unionTrafficGroup": 4,
                    "validCode": 17,
                    "subUnionId": "luertest",
                    "traceType": 2,
                    "payMonth": 0,
                    "popId": 10084045,
                    "ext1": "",
                    "merchantName": null
                },
                {
                    "orderId": 86475668988,
                    "skuId": 44132198245,
                    "actualCosPrice": 0,
                    "actualFee": 0,
                    "commissionRate": 5,
                    "estimateCosPrice": 0,
                    "estimateFee": 0,
                    "finalRate": 90,
                    "cid1": 6144,
                    "frozenSkuNum": 0,
                    "pid": "",
                    "positionId": 0,
                    "price": 0,
                    "cid2": 12042,
                    "siteId": 55000,
                    "skuName": "硅胶耳堵 配件 1对 限量赠送 赠完为止",
                    "skuNum": 1,
                    "skuReturnNum": 0,
                    "subSideRate": 90,
                    "subsidyRate": 0,
                    "cid3": 12054,
                    "unionAlias": "",
                    "unionTag": "00000000",
                    "unionTrafficGroup": 4,
                    "validCode": 17,
                    "subUnionId": "luertest",
                    "traceType": 2,
                    "payMonth": 0,
                    "popId": 10084045,
                    "ext1": "",
                    "merchantName": null
                }
            ]
        },
        {
            "orderId": 85562762227,
            "finishTime": 1555215459000,
            "orderEmt": 2,
            "orderTime": 1554715488000,
            "parentId": 0,
            "payMonth": "0",
            "plus": 0,
            "popId": 690686,
            "unionId": 1001466274,
            "ext1": "",
            "validCode": 17,
            "hasMore": "false",
            "estimateFee": null,
            "merchantName": null,
            "customerId": null,
            "jdSkuLists": [
                {
                    "orderId": 85562762227,
                    "skuId": 43659908490,
                    "actualCosPrice": 24.8,
                    "actualFee": 1.12,
                    "commissionRate": 5,
                    "estimateCosPrice": 24.8,
                    "estimateFee": 1.12,
                    "finalRate": 90,
                    "cid1": 1320,
                    "frozenSkuNum": 0,
                    "pid": "",
                    "positionId": 0,
                    "price": 29.8,
                    "cid2": 5019,
                    "siteId": 0,
                    "skuName": "芗园黑糖红枣桂圆茶 便携独立包装台湾姨妈红枣桂圆茶姜汤姜母茶120g",
                    "skuNum": 1,
                    "skuReturnNum": 0,
                    "subSideRate": 90,
                    "subsidyRate": 0,
                    "cid3": 5023,
                    "unionAlias": "",
                    "unionTag": "00000000",
                    "unionTrafficGroup": 5,
                    "validCode": 17,
                    "subUnionId": "luertest",
                    "traceType": 2,
                    "payMonth": 0,
                    "popId": 690686,
                    "ext1": "",
                    "merchantName": null
                }
            ]
        }
    ],
    "time": 1558491931288
}
  • 14
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
如果需要在 MyBatis 的查询结果包含嵌套的 List 对象,可以使用 MyBatis 的关联查询和 Collection 和 ResultMap 来实现。具体步骤如下: 1. 在 MyBatis 的 Mapper 文件定义 ResultMap。 例如,以下是定义一个 ResultMap,将查询结果的 id、name 和 age 字段映射到一个 User 对象,并将关联查询的 orders 映射到 User 对象的 orders 属性: ``` <resultMap id="userMap" type="com.example.User"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="age" property="age"/> <collection property="orders" resultMap="orderMap"/> </resultMap> <resultMap id="orderMap" type="com.example.Order"> <id column="id" property="id"/> <result column="name" property="name"/> <result column="price" property="price"/> </resultMap> ``` 2. 在 SQL 查询语句使用关联查询和 Collection。 例如,以下是一个使用关联查询和 Collection 查询用户及其订单的 SQL 语句: ``` <select id="findUsers" resultMap="userMap"> select u.id, u.name, u.age, o.id as order_id, o.name as order_name, o.price from user u left join order o on u.id = o.user_id </select> ``` 3. 在 Java 代码调用 MyBatis 的 SqlSession 的 selectList 方法执行查询,并传入 Mapper 文件定义的 SQL 查询的 ID。 例如,以下是一个调用查询所有用户及其订单的方法的示例: ``` SqlSession sqlSession = sqlSessionFactory.openSession(); List<User> userList = sqlSession.selectList("com.example.UserMapper.findUsers"); ``` 4. 返回的 userList 就是一个包含所有用户的 List,每个 User 对象包含 id、name、age 和 orders 属性,其 orders 属性是一个包含 Order 对象List。 注意,在定义 ResultMap 时,可以使用 collection 元素将关联查询结果映射到对象一个 List 属性。在 SQL 查询语句使用 left join 等关键字指定关联方式,并使用别名指定嵌套对象的属性名。这样,MyBatis 在执行查询时就会将查询结果解析成指定的 Java 类型,并将映射的属性值设置到对象属性,从而实现嵌套 List 对象的映射。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值