多学习。

MyBatis多对多查询样例——通过临时表实现(注:懒加载mybatis版本需大于3.5.1)

表关系

Orders与Travller为多对多关系

Orders:订单表,一个订单有多个traveller。

Traveller:游客表,一个Travller有多个订单

中间表:order_traveller,保存有两者的id

业务需求:查询订单详情包括订单中的多个旅客

dao层代码:

public interface OrdersDao {

    @Select("select * from orders")
    @Results(
            id = "ordersMap",
            value = {
                    @Result(id = true, column = "id", property = "id"),
                    @Result(column = "orderNum", property = "orderNum"),
                    @Result(column = "orderTime", property = "orderTime"),
                    @Result(column = "orderStatus", property = "orderStatus"),
                    @Result(column = "peopleCount", property = "peopleCount"),
                    @Result(column = "payType", property = "payType"),
                    @Result(column = "orderDesc", property = "orderDesc"),
                    @Result(column = "productID", property = "product", javaType = Product.class, one = @One(select = "com.czy.ssm.dao.ProductDao.findById", fetchType = FetchType.EAGER)),
                    @Result(column = "memberID", property = "member", javaType = Member.class, one = @One(select = "com.czy.ssm.dao.MemberDao.findById", fetchType = FetchType.EAGER)),
                    @Result(column = "ID", property = "travellers", javaType = java.util.List.class, many = @Many(select = "com.czy.ssm.dao.TravellerDao.findByOrdersId", fetchType = FetchType.LAZY))
            }
    )
    public List<Orders> findAll();

    @Select("select * from orders where id = #{id}")
    @ResultMap("ordersMap")
    Orders findById(String id);
}

public interface TravellerDao {
    @Select("select * from traveller where id in (select travellerId from order_traveller where orderId = #{id})")
    List<Traveller> findByOrdersId(String orderId);
}

posted @   czyaaa  阅读(757)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示