7.29学习总结---关于分表查询(递归查询)

需求

  • 两张表:一张是订单表(torder_master),里面包含订单号、产品提供商等信息;另一张表是商品详情表(torder_detail),记录了订单中的使用者下单后账单中的产品分类、型号等信息。
  • 需要我们通过提供订单号来查询到订单表中的订单号、买家名、买家部门和供应商名,通过级联查询查出与当前订单相关联的详细商品信息(包括id、订单id(外键)、商品分类和商品名)

思路

  • 分为两步,首先通过提供的订单号将订单表中的信息全部查出来,然后封装需要的信息至相关实体的属性中;其次在封装过程中通过id查询商品详情表中的相关信息,封装至定义的List属性中。

实现

  • 首先定义商品详情实体类
public class OrderDetail {
    private int id;
    private int fmasterid;
    private String fclassification;
    private String fgoodname;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getFmasterid() {
        return fmasterid;
    }

    public void setFmasterid(int fmasterid) {
        this.fmasterid = fmasterid;
    }

    public String getFclassification() {
        return fclassification;
    }

    public void setFclassification(String fclassification) {
        this.fclassification = fclassification;
    }

    public String getFgoodname() {
        return fgoodname;
    }

    public void setFgoodname(String fgoodname) {
        this.fgoodname = fgoodname;
    }

    @Override
    public String toString() {
        return "OrderDetail{" +
                "id=" + id +
                ", fmasterid=" + fmasterid +
                ", fgoocode='" + fclassification + '\'' +
                ", fgoodname='" + fgoodname + '\'' +
                '}';
    }
}
  • 其次在已有的OrderMasterDO类中增加需要查询的商品详情属性(相应的需要增加其set和get方法),代码如下:
@ApiModelProperty(value = "商品详情信息")
private List<OrderDetail> orderDetailList;
  • 在OrderMasterMapper文件中添加接口,代码如下:
/**
     * 根据forderno查询订单forderno,fbuyername,fbuydepartment,fsuppname,fclassification,
     * 以及商品详情表上的id,fmasterid,fgoodcode,fgoodname
     * @Param:定义参数名字
     */
    OrderMasterDO findDetailByOrderno(@Param("forderno")String forderno);
  • 在XML配置文件中进行相关配置
	<resultMap id="orderDetailMap" type="com.ruijing.store.order.base.core.model.OrderMasterDO">
	<!--以下是你需要封装的属性,上面type代表你最终需要封装成的类型-->
        <id column="id" property="id"></id>
        <result column="forderno" property="forderno"></result>
        <result column="fbuyername" property="fbuyername"></result>
        <result column="fbuydepartment" property="fbuydepartment"></result>
        <result column="fsuppname" property="fsuppname"></result>
        <!--collection代表是集合属性
        column:根据订单表查出来哪个字段去查询商品详情表
        ofType:最终需要封装成的javabean类型
        select:用column查询时需要用到的方法,该方法可以不在OrderMasterMapper中申明接口
        fetchType:一种加载方式(不是很懂)
        -->
        <collection property="orderDetailList" column="id" ofType="com.ruijing.store.order.base.minor.model.OrderDetail" select="selectOrderDetail" fetchType="lazy" >
        </collection>
	</resultMap>
	
	<resultMap id="orderSomeInfo" type="com.ruijing.store.order.base.minor.model.OrderDetail">
        <id column="id" property="id"></id>
        <result column="fmasterid" property="fmasterid"></result>
        <result column="fclassification" property="fclassification"></result>
        <result column="fgoodname" property="fgoodname"></result>
    </resultMap>
    
	<select id="selectOrderDetail" resultMap="orderSomeInfo">
        select * from torder_detail td where fmasterid=#{id}
    </select>
    
  	<select id="findDetailByOrderno" parameterType="String" resultMap="orderDetailMap">
        select * from torder_master tm  where forderno=#{forderno};
    </select>
  • 测试代码中进行测试
	@Test
    public void test2(){
       	String  forderNo = "DC201612042473001";
        OrderMasterDO orderDetails = orderMasterMapper.findDetailByOrderno(forderNo);
        System.out.println(orderDetails.getForderno());
        System.out.println(orderDetails.getFbuyername());
        System.out.println(orderDetails.getFbuydepartment());
        System.out.println(orderDetails.getFsuppname());
        for (OrderDetail orderDetail : orderDetails.getOrderDetailList()) {
            System.out.println(orderDetail);
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值