基于mybatis高级映射多对多查询的实现

  

  

要查询用户以及用户所购买的商品信息,经过分析用户和商品数据库级别没有任何关系,用户和商品需要建立关系,要通过订单,订单明细建立关系。根据这个需求,可以分析出需要查询的主表为:

  

<强>查询主表:用户表

  

查询关联表:由于商品和用户没有关系,通过订单和订单明细进行关联,所以得出关联表是:订单订单表,orderDetail订单明细表,项目商品表。这样的话,sql该如何去写?这样写:

        选择   订单。*,   t_user。id user_id,   t_user.address,   t_user.name,   t_user.brithday,   orderdetail。id orderdetail_id,   orderdetail.orderid,   orderdetail.itemsid,   物品。id items_id,   items.name items_name,   物品。价格items_price   从   订单,   t_user,   orderdetail,   项目   在哪里   orders.userid=t_user。id和orderdetail.orderid=订单。id和orderdetail。itemsId=items.id      

为了方便映射,适当加上别名,上面就是写好的大sql、sql语这句是越来越大了,但不要害怕,待会做映射一个个来做,只要方法得提是很简单的。

  

2。编写映射文件分析:

  

现在的主表是用户,所以将用户的信息映射到用户中,一个用户可以创建多个订单,所以在用户属性中添加Listorderlist属性,这和hibernate越来越像了哈,然后将用户创建的订单映射到orderlist,中一个订单可以包括多个订单明细,所以在订单中添加订单明细列表属性:Listorderdetails,一个订单明细只包括一个商品信息,所以在OrderSDetail中添加商品项属性。

  

User.java代码如下:

        公开课用户{   私人int id;   私人字符串名称;   私人字符串pwd;   私人字符串地址;   私人生日日期;   私人ListordersList;//看这里用户创建的订单列表   }      

  

Orders.java代码如下:

        公共类订单{   私人int id;   私人字符串注意;   私人约会日期时间;   私人字符串数量;   私人int标识;   私人用户用户;   私人ListordersDetails;//一个订单包括多个订单明细   之前      

  

OrdersDetail.java代码如下:

        公开课OrdersDetail {   私人int id;   私人int orderId;   私人int itemsId;   私人物品物品;//一条订单明细包括一条商品信息   之前      

到这里,pojo类之间的关系就搭建好了,接下来写mapper.xml

  

代码如下(注意看代码里的注释):
  

  

        & lt; !——查询用户所购买的商品信息resultMap——比;   & lt; resultMap id=癠serAndItemsResultMap”类型=癱om.djp.pojo.User”比;   & lt; !——配置用户信息——比;   & lt; id列=皍ser_id”属性=" id "/比;   & lt;结果列=暗刂贰笔粜?暗刂贰?比;   & lt;结果列=懊啤笔粜?"名称"/比;   & lt;结果列=吧铡笔粜?吧铡?比;   & lt; !——配置用户创建的订单信息,一个用户创建了多个订单——比;   减低=& lt;集合属性=皁rdersList”“com.djp.pojo.Orders”比;   & lt; id列=癷d”属性=" id "/比;   & lt;结果列=白⒁狻笔粜?"注意"/比;   & lt;结果列=癲ateTime”属性=" dateTime "/比;   & lt;结果列=氨晔丁笔粜?"标识"/比;   & lt;结果列=笆笔粜?number/比;   & lt; !——配置订单明细信息一个订单包含多个订单明细——比;   减低=& lt;集合属性=皁rdersDetails”“com.djp.pojo.OrdersDetail”比;   & lt; id列=皁rderdetail_id”属性=" id "/比;   & lt;结果列=皁rderId”属性=" orderId "/比;   & lt;结果列=癷temsid”属性=" itemsid "/比;   & lt; !——配置商品信息一个明细包括一个商品——比;   & lt;协会财产="项目"将javaType=癱om.djp.pojo.Items”比;   & lt; id列=癷tems_id”属性=" id "/比;   & lt;结果列=癷tems_name”属性="名称"/比;   & lt;结果列=癷tems_price”属性="价格"/比;   & lt;/association>   & lt;/collection>   & lt;/collection>   & lt;/resultMap>   & lt; !——查询用户所购买的商品信息——比;   & lt;选择id=" findUserAndItemsResultMap " resultMap=癠serAndItemsResultMap”比;   选择   订单。*,   t_user。id user_id,   t_user.address,   t_user.name,   t_user.brithday,   orderdetail。id orderdetail_id,   orderdetail.orderid,   orderdetail.itemsid,   物品。id items_id,   items.name items_name,   物品。价格items_price   从   订单,   t_user,   orderdetail,   项目   在哪里   orders.userid=t_user。id和orderdetail.orderid=订单。id和orderdetail。itemsId=items.id   & lt;/select>

基于mybatis高级映射多对多查询的实现