注解实现多表查询

订单表Orders
产品表Product
会员表Member
游客表Traveller

订单表 <-------> 产品表 : 多对一关系.
订单表 <-------> 会员表 : 多对一关系.
订单表 <-------> 旅游表 : 多对多
使用第三张中间表关联订单表和旅游表.
具体表关系如下图.
注解实现多表查询_第1张图片

需求:根据订单ID查询对应的订单信息/产品信息/会员信息/游客信息

1.订单Bean属性

 	private String id;		  --订单ID
    private String orderNum;  --订单号
    private Date orderTime;	  --下单时间
    private int orderStatus;  --订单状态
    private int peopleCount;  --人数
    private Product product;  --产品信息(对象)
    private List travellers;  --旅游信息(集合)
    private Member member;  --会员信息(对象)
    private Integer payType;  --支付方式
    private String orderDesc;  --其他信息

    //根据订单ID查询订单信息
    @Select("select * from orders o,member m,product p  where o.memberid=m.id and o.productid=p.id and o.id=#{id}")
    @Results({
            @Result(column = "name",property = "member.name"),
            @Result(column = "nickname",property = "member.nickname"),
            @Result(column = "phoneNum",property = "member.phoneNum"),
            @Result(column = "email",property = "member.email"),
            @Result(column = "productname" ,property ="product.productName"),
            @Result(column = "cityname" ,property ="product.cityName"),
            @Result(column = "productprice" ,property ="product.productPrice"),
            @Result(column = "departuretime" ,property ="product.departureTime"),
            @Result(column = "id",property = "travellers", many=@Many(select = "com.qyf.dao.ITravellerDao.findByTraveller"))
    })
   Orders findById(String id);

传入订单ID字段,作为查询体条件,在中间表中查询该ID关联的旅游产品信息.
注解实现多表查询_第2张图片
ITravellerDao接口


    @Select("select * from traveller where id in " +
            "(select  travellerid from order_traveller where orderid=#{orderId})")
   List findByTraveller(String orderId);

你可能感兴趣的:(笔记)