mybatis xml中实现一对多查询时, 子查询带多个参数

1、mapper文件中:

List<Object> getXXXXX(@Param("taskId")String taskId,@Param("taskType")String taskType);
 

2、xml文件中

<select id="" resultMap="" >
 
     select tst.id subTaskId,......
 
      from ......
 
</select>
 
  <resultMap type="" id="">
          <id property="id" column=""/>
        <result property="" column=""/>
        .....
 
       <collection property="返回结果的key,对应实体内的字段" ofType="这里是查询返回的类型" 
            column="{subTaskId=subTaskId,taskType=taskType}" select="getVails"/>
  </resultMap>
 
  <select id="getVails" parameterType="java.util.Map" resultType="">
  	<choose>
  		<when test=&
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
假设我们有两个表,一个是`orders`表,一个是`order_items`表,`orders`表和`order_items`表是一对多的关系,即一个订单可以包含多个订单项。 我们要查询订单列表,同查询每个订单的所有订单项。如果某个订单没有订单项,我们不希望该订单出现在结果集。可以按照以下步骤实现: 1. 在`Order`类定义一个`List<OrderItem>`类型的属性`orderItems`,并提供getter和setter方法。 ```java public class Order { private Long id; private Date createTime; private List<OrderItem> orderItems; // getter和setter方法省略 } ``` 2. 撰写XML映射文件,使用`<select>`元素执行一对多查询。 ```xml <select id="getOrdersWithOrderItems" resultMap="OrderWithOrderItemsResultMap"> SELECT o.id, o.create_time, oi.id AS order_item_id, oi.order_id, oi.product_name, oi.product_price, oi.product_quantity FROM orders o LEFT JOIN order_items oi ON o.id = oi.order_id WHERE oi.order_id IS NOT NULL </select> <resultMap id="OrderWithOrderItemsResultMap" type="Order"> <id property="id" column="id" /> <result property="createTime" column="create_time" /> <collection property="orderItems" ofType="OrderItem"> <id property="id" column="order_item_id" /> <result property="orderId" column="order_id" /> <result property="productName" column="product_name" /> <result property="productPrice" column="product_price" /> <result property="productQuantity" column="product_quantity" /> </collection> </resultMap> ``` 3. 在`OrderMapper`接口声明方法`getOrdersWithOrderItems`,并使用`@ResultMap`注解指定结果集映射。 ```java public interface OrderMapper { @Select("getOrdersWithOrderItems") @ResultMap("OrderWithOrderItemsResultMap") List<Order> getOrdersWithOrderItems(); } ``` 在上述XML映射文件,我们使用了LEFT JOIN来保证即使某个订单没有订单项,该订单也会出现在结果集,但是在WHERE使用了`oi.order_id IS NOT NULL`这个条件来排除掉没有订单项的订单。这样就可以实现查询查询为空则不显示的效果了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值