mybatis collections 用法

其实在小能就已经用过了,只不过很久没用过这种查询都快忘记了,从网上找了大部分都是让人无语的方法。html

@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
public class ShopGoodsEntity {
    private String goodsNumber;        //商品编号
    private String goodsName;          //商品名称
    private String goodsTitle;         //商品标题
    private String productOne;         //商品规格
    private String goodsImageTopList;  //轮播图
    private String goodsImageBottom;   //介绍图
    private int goodsStatus;           //0上架 1下架
    private Date createTime;           //商品建立时间
    private int sellerId;              //卖家id
    private String sellerPhone;        //商家提供的客服电话
    private Date activityStartTime;    //活动开始时间
    private Date activityEndTime;      //活动结束时间
    private int isActivity;            //是否活动
    private String activityName;       //活动名称
    private List<ShopProductEntity> products;
}
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
public class ShopProductEntity {
    private int id;
    private String productOne;
    private String name;        //规格名称
    private int parameterId; //参数id
    private double originalPrice; //原价
    private double activityPrice; //活动价
    private int weight;   //重量
    private int repertoryNum;//库存
    private int sellNum;  //已售数量
    private int fakeNum;  //作假数量
    private ShopParameterEntity parameter;
}
@Data
@EqualsAndHashCode(callSuper = false)
@NoArgsConstructor
@AllArgsConstructor
public class ShopParameterEntity {
    private int id;
    private int parameterType;   //产品类型
    private int productWeight;//单瓶产品重量
    private int blisterWeight;//吸塑重量
    private String size;         //标签尺寸
    private String productName;  //规格名称
    private int productId;       //t_shop_product主键id
}

从这三个实体类中能够看到,分别对应的是1对多,一对一,用一个sql查询出全部的数据,以下:java

collection 一对多 里边property 属性值对应实体类的参数值,不能随便写sql

association 实体一对一 里边property 属性值对应实体类的参数值,不能随便写spa

<resultMap id="allData" type="com.dtb.shop.model.ShopGoodsEntity">
    <id column="goods_number" jdbcType="VARCHAR" property="goodsNumber" />
    <result column="goods_name" jdbcType="VARCHAR" property="goodsName" />
    <result column="goods_title" jdbcType="VARCHAR" property="goodsTitle" />
    <result column="product_one" jdbcType="VARCHAR" property="productOne" />
    <result column="goods_image_top_list" jdbcType="VARCHAR" property="goodsImageTopList" />
    <result column="goods_image_bottom" jdbcType="VARCHAR" property="goodsImageBottom" />
    <result column="goods_status" jdbcType="INTEGER" property="goodsStatus" />
    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
    <result column="seller_id" jdbcType="INTEGER" property="sellerId" />
    <result column="seller_phone" jdbcType="VARCHAR" property="sellerPhone" />
    <result column="activity_start_time" jdbcType="TIMESTAMP" property="activityStartTime" />
    <result column="activity_end_time" jdbcType="TIMESTAMP" property="activityEndTime" />
    <result column="is_activity" jdbcType="INTEGER" property="isActivity" />
    <result column="activity_name" jdbcType="VARCHAR" property="activityName" />
    <collection property="products" javaType="java.util.ArrayList" ofType="com.dtb.shop.model.ShopProductEntity">
        <id column="id" jdbcType="INTEGER" property="id" />
        <result column="product_one" jdbcType="VARCHAR" property="productOne" />
        <result column="name" jdbcType="VARCHAR" property="name" />
        <result column="parameter_id" jdbcType="INTEGER" property="parameterId" />
        <result column="original_price" jdbcType="DOUBLE" property="originalPrice" />
        <result column="activity_price" jdbcType="DOUBLE" property="activityPrice" />
        <result column="weight" jdbcType="INTEGER" property="weight" />
        <result column="repertory_num" jdbcType="INTEGER" property="repertoryNum" />
        <result column="sell_num" jdbcType="INTEGER" property="sellNum" />
        <result column="fake_num" jdbcType="INTEGER" property="fakeNum" />
        <association property="parameter" javaType="com.dtb.shop.model.ShopParameterEntity">
            <id column="id" jdbcType="INTEGER" property="id" />
            <result column="t_parameter_type" jdbcType="INTEGER" property="parameterType" />
            <result column="t_product_weight" jdbcType="INTEGER" property="productWeight" />
            <result column="t_blister_weight" jdbcType="INTEGER" property="blisterWeight" />
            <result column="t_size" jdbcType="VARCHAR" property="size" />
            <result column="t_product_name" jdbcType="VARCHAR" property="productName" />
            <result column="t_product_id" jdbcType="INTEGER" property="productId" />
        </association>
    </collection>
</resultMap>
<select id="getDetailInfo" parameterType="java.lang.String" resultMap="allData">
    select g.goods_number,g.goods_name,g.goods_title,g.product_one,g.goods_image_top_list,g.goods_image_bottom,g.goods_status,
    g.create_time,g.seller_id,g.seller_phone,g.activity_start_time,g.activity_end_time,g.is_activity,g.activity_name,p.id,
    p.product_one,p.name,p.parameter_id,p.original_price,p.activity_price,p.weight,p.repertory_num,p.sell_num,p.fake_num,
    m.id,m.t_parameter_type,m.t_product_weight,m.t_blister_weight,m.t_size,m.t_product_name,m.t_product_id
    from t_shop_goods g
    left join t_shop_product p
    on p.product_one = g.product_one
    left join t_shop_parameter m
    on p.parameter_id = m.id
    where g.goods_number = #{goodsNumber}
</select>

结果就出来了,为何还有那么多让人无语的博客呢?以下:.net

https://blog.csdn.net/qq_38157516/article/details/79712721htm

https://www.cnblogs.com/yansum/p/5819973.htmlblog

不知道这些sql还不是多个sql拼成的嘛ci

相关文章
相关标签/搜索