【SSM-MyBatis框架】关联查询--多对多查询


  1. 需求:

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


   2.映射思路:

     将用户信息映射到user中。

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

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

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



   3.pojo类:

     User:

public class User {
	private int id;
	private String username;// 用户姓名
	private String sex;// 性别
	private Date birthday;// 生日
	private String address;// 地址
	
	private List<Orders> orders;

 

Orders:

  

public class Orders {
    private Integer id;

    private Integer userId;

    private String number;

    private Date createtime;

    private String note;
    
    //用户信息
    private User user;
    private List<Orderdetail> orderdetails;
    


Orderdetail:

public class Orderdetail {
    private Integer id;

    private Integer ordersId;

    private Integer itemsId;

    private Integer itemsNum;
    
    //明细对应的商品信息
    private Items items;
    


     4.mapper.xml:

 

<select id="findUser" resultMap="userMapper" >
			SELECT 
				  orders.*,
				  user.username,
				  user.sex,
				  user.address,
				  orderdetail.id orderdetail_id,
				  orderdetail.items_id,
				  orderdetail.items_num,
				  orderdetail.orders_id,
				  items.`id`,
				  items.`name`,
				  items.`pic`,
				  items.`price`,
				  items.`createtime`,
				  items.`detail`
				FROM
				  orders,
				  USER,
				  orderdetail,
				  items
				WHERE orders.user_id = user.id AND orders.`id`=orderdetail.`orders_id` AND orderdetail.`items_id` = items.`id` 

	</select>



<!-- 多对多关系的映射 -->
	<resultMap type="cn.edu.hpu.ssm.po.User" id="userMapper">
			<id column="user_id" property="id"/>
			<result column="username" property="username"/>
			<result column="sex" property="sex"/>
			<result column="address" property="address"/>
			<collection property="orders" ofType="cn.edu.hpu.ssm.po.Orders">
					<id column="id" property="id"/>
					<result column="user_id" property="userId"/>
					<result column="number" property="number"/>
					<result column="createtime" property="createtime"/>
					<result column="note" property="note"/>
						<collection property="orderdetails" ofType="cn.edu.hpu.ssm.po.Orderdetail">
								<id column="orderdetail_id" property="id"/>
								<result column="orders_id" property="ordersId"/>
								<result column="items_id" property="itemsId"/>
								<result column="items_num" property="itemsNum"/>
								<association property="items" javaType="cn.edu.hpu.ssm.po.Items">
										<id column="items_id" property="id"/>
										<result column="name" property="name"/>
										<result column="price" property="price"/>
										<result column="pic" property="pic"/>
										<result column="createtime" property="createtime"/>
										<result column="detail" property="detail"/>
								</association>
				</collection>
			</collection>
	</resultMap>

     5.mapper.java 接口:

   

	/**
	 * 多对多
	 */
	public List<User> findUser();

      6.多对多总结:

    
 

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


 


针对上边的需求就使用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中。





  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值