mybatis一对多查询演示

一、需求
在查询用户与订单基础上查询订单明细,用户与订单关系是一对一,订单与订单明细是一对多关系。
二、创建pojo类

     public class Orderdetail {
    private Integer id;
    private Integer ordersId;
    private Integer itemsId;
    private Integer itemsNum; 
      .......set与get方法省略
  订单中添加list订单明细,体现订单到订单明细一对多关系
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;

三、mapper.xml

<!-- 通过订单表查询商品 -->
<select id="findOrdersDetailResultMap" resultMap="OrdersCustomDetailMap">
	SELECT 
	  orders.*,
	  USER.username,
	  USER.sex,
	  USER.address,
	  orderdetail.id orderdetail_id,
	  orderdetail.items_id,
	  orderdetail.items_num,
	  orderdetail.orders_id
	FROM
	  orders,
	  USER,
	  orderdetail
	WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
</select>
如果查询出来的列名和pojo的属性名不一致,通过定义一个resultMap对列名和pojo属性名之间作一个映射关系。
extends :继承用户与订单的输出映射resultMap
<!-- 通过订单查询订单详细信息 -->
	<resultMap type="com.dd.mybatis.po.Orders" id="OrdersCustomDetailMap" extends="OrdersCustomUserMap">
	    <!-- 订单明细信息
		一个订单关联查询出了多条明细,要使用collection进行映射
		collection:对关联查询到多条记录映射到集合对象中
		property:将关联查询到多条记录映射到cn.itcast.mybatis.po.Orders哪个属性
		ofType:指定映射到list集合属性中pojo的类型
		 -->
		 <collection property="orderdetails" ofType="com.dd.mybatis.po.Orderdetail">
		 	<!-- id:订单明细唯 一标识
		 	property:要将订单明细的唯 一标识 映射到cn.itcast.mybatis.po.Orderdetail的哪个属性
		 	  -->
		 	<id column="orderdetail_id" property="id"/>
		 	<result column="items_id" property="itemsId"/>
		 	<result column="items_num" property="itemsNum"/>
		 	<result column="orders_id" property="ordersId"/>
		 </collection>
	</resultMap>
	<!-- 订单查询关联用户的resultMap
	将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
	 -->
	<resultMap type="com.dd.mybatis.po.Orders" id="OrdersCustomUserMap">
	    <!-- 配置映射的订单信息 -->
		<!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
			column:订单信息的唯 一标识 列
			property:订单信息的唯 一标识 列所映射到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"/>
		  
		  <!-- 配置映射的关联的用户信息 -->
		<!-- association:用于映射关联查询单个对象的信息
		property:要将关联查询的用户信息映射到Orders中哪个属性
		 -->
		<association property="user"  javaType="com.dd.mybatis.po.User">
			<!-- id:关联查询用户的唯 一标识
			column:指定唯 一标识用户信息的列
			javaType:映射到user的哪个属性
			 -->
			<id column="user_id" property="id"/>
			<result column="username" property="username"/>
			<result column="sex" property="sex"/>
			<result column="address" property="address"/>
			</association>
	</resultMap>

四、添加mapper.java

public List<Orders> findOrdersDetailResultMap() throws Exception;

五、代码测试

@Test
	public void findOrdersDetailResultMapImp() throws Exception{
		SqlSession sqlSession=null;
		try {
			sqlSession=sqlSessionFactory.openSession();
			OrdersMapperCustom ordersMapperCustom=sqlSession.getMapper(OrdersMapperCustom.class);
			List<Orders> list=ordersMapperCustom.findOrdersDetailResultMap();
			System.out.println(list);
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			sqlSession.close();
		}
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值