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);
}
分类:
mybatis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)