SSM-MyBatis框架关联查询实例二

1. 需求:

       查询用户及用户购买商品的信息:


   2.映射思路:

     将用户信息映射到user中。

    在user中添加List<Order> orderList属性,将用户创建的订单映射到orderList属性中。

    在Order中添加List<Orderdetil> orderDetilList属性,将订单中的明细映射到orderDetilList属性中。

    在OrderDeti类中,添加Items item属性,将商品信息映射到Item中。


   3.pojo类:

     用户实体类 User:

[java]  view plain  copy
 print ?
  1. public class User {  
  2.     private int id;  
  3.     private String username;// 用户姓名  
  4.     private String sex;// 性别  
  5.     private Date birthday;// 生日  
  6.     private String address;// 地址  
  7.       
  8.     private List<Orders> orders;  

 订单实体类 Orders:

[java]  view plain  copy
 print ?
  1. public class Orders {  
  2.     private Integer id;  
  3.   
  4.     private Integer userId;  
  5.   
  6.     private String number;  
  7.   
  8.     private Date createtime;  
  9.   
  10.     private String note;  
  11.       
  12.     //用户信息  
  13.     private User user;  
  14.     private List<Orderdetail> orderdetails;  
  15.       

订单明细实体类 Orderdetail:

[java]  view plain  copy
 print ?
  1. public class Orderdetail {  
  2.     private Integer id;  
  3.   
  4.     private Integer ordersId;  
  5.   
  6.     private Integer itemsId;  
  7.   
  8.     private Integer itemsNum;  
  9.       
  10.     //明细对应的商品信息  
  11.     private Items items;  
  12.       

商品实体类 Items

[java]  view plain  copy
 print ?
  1. public class Items {  
  2.     private Integer id;  
  3.     //商品名称
  4.     private String name;  
  5.     //商品图片路径
  6.     private String pic;  
  7.     //商品价格
  8.     private Double price;  
  9.     //商品创建时间
  10.     private String createtime;   
  11.     //商品信息  
  12.     private String detail;  
  13.       
  

    4.mapper.xml:

[html] view plain copy
 print?
  1. <select id="findUser" resultMap="userMapper" >  
  2.             SELECT   
  3.                   orders.*,  
  4.                   user.username,  
  5.                   user.sex,  
  6.                   user.address,  
  7.                   orderdetail.id orderdetail_id,  
  8.                   orderdetail.items_id,  
  9.                   orderdetail.items_num,  
  10.                   orderdetail.orders_id,  
  11.                   items.`id`,  
  12.                   items.`name`,  
  13.                   items.`pic`,  
  14.                   items.`price`,  
  15.                   items.`createtime`,  
  16.                   items.`detail`  
  17.                 FROM  
  18.                   orders,  
  19.                   USER,  
  20.                   orderdetail,  
  21.                   items  
  22.                 WHERE orders.user_id = user.id AND orders.`id`=orderdetail.`orders_id` AND orderdetail.`items_id` = items.`id`   
  23.   
  24.     </select>  
  25.   
  26.   
  27.   
  28. <!-- 多对多关系的映射 -->  
  29.     <resultMap type="cn.edu.hpu.ssm.po.User" id="userMapper">  
  30.             <id column="user_id" property="id"/>  
  31.             <result column="username" property="username"/>  
  32.             <result column="sex" property="sex"/>  
  33.             <result column="address" property="address"/>  
  34.             <collection property="orders" ofType="cn.edu.hpu.ssm.po.Orders">  
  35.                     <id column="id" property="id"/>  
  36.                     <result column="user_id" property="userId"/>  
  37.                     <result column="number" property="number"/>  
  38.                     <result column="createtime" property="createtime"/>  
  39.                     <result column="note" property="note"/>  
  40.                         <collection property="orderdetails" ofType="cn.edu.hpu.ssm.po.Orderdetail">  
  41.                                 <id column="orderdetail_id" property="id"/>  
  42.                                 <result column="orders_id" property="ordersId"/>  
  43.                                 <result column="items_id" property="itemsId"/>  
  44.                                 <result column="items_num" property="itemsNum"/>  
  45.                                 <association property="items" javaType="cn.edu.hpu.ssm.po.Items">  
  46.                                         <id column="items_id" property="id"/>  
  47.                                         <result column="name" property="name"/>  
  48.                                         <result column="price" property="price"/>  
  49.                                         <result column="pic" property="pic"/>  
  50.                                         <result column="createtime" property="createtime"/>  
  51.                                         <result column="detail" property="detail"/>  
  52.                                 </association>  
  53.                 </collection>  
  54.             </collection>  
  55.     </resultMap>  


     5.mapper.Java 接口:

[java]  view plain  copy
 print ?
  1. /** 
  2.  * 多对多 
  3.  */  
  4. public List<User> findUser();  

  

对多总结:

将查询用户购买的商品信息明细清单,(用户名、用户地址、购买商品名称、购买商品时间、购买商品数量)

针对上边的需求就使用resultType将查询到的记录映射到一个扩展的pojo中,很简单实现明细清单的功能。


一对多是多对多的特例,如下需求:

查询用户购买的商品信息,用户和商品的关系是多对多关系。


需求1

查询字段:用户账号、用户名称、用户性别、商品名称、商品价格(最常见)

企业开发中常见明细列表,用户购买商品明细列表,

使用resultType将上边查询列映射到pojo输出。


需求2

查询字段:用户账号、用户名称、购买商品数量、商品明细(鼠标移上显示明细)

使用resultMap将用户购买的商品明细列表映射到user对象中。


总结:

使用resultMap是针对那些对查询结果映射有特殊要求的功能,,比如特殊要求映射成list中包括多个list


   7.ResultMap总结:

   

ResultType:

      作用:

              将查询的结果按照pojo属性名,一一映射到pojo的属性中去。

      场合:

             常见一些明细信息的展示,比如用户购买的商品的明细,将关联查询的信息全部展示在页面上时,此时可是使用ResultType将每条记录映射到pojo类中,在前端页面遍历list即可。


 ResultMap:

     使用association和collection完成一对一和一对多的高级映射(对结果集有特殊要求)。


association:

      作用:

            将关联查询表,映射到一个pojo对象中。

      场合:

         为了方便查询关联信息可以使用association将关联订单信息映射为pojo对象的pojo属性中。如:查询订单和关联用户信息。

         使用ResultType无法将查询结果映射到pojo对象中pojo属性里,根据对结果集查询遍历的需要选择使用ResultType还是使用ResultMap。

  collection:

       作用:

           将关联查询出来的信息,映射到一个list集合中。

      场合:

          为了方便查询遍历关联信息,可是使用collection将关联信息映射到list集合中。如:查询用户权限范围模块及模块下的菜单,可以使用collection将模块及模块下的菜单,映射到list中。目的是为了方便查询结果集进行遍历查询。

           如果使用ResultType无法映射到list中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值