Mybatis一对多,条件查询,如何实现

 
<!--
 方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
 封装联表查询的数据(去除重复的数据)
 select * from user u,orders o where u.id=o.user_id and u.id=#{id}
 -->
 <select id="selectUserAndOrdersByUserId" resultMap="getUserAndOrders">
         select u.*,o.id oid,o.number number from user u,orders o where u.id=o.user_id and u.id=#{id}
 </select>



 <resultMap type="com.ys.po.User" id="getUserAndOrders">

 <!--id:指定查询列表唯一标识,如果有多个唯一标识,则配置多个id
 column:数据库对应的列
 property:实体类对应的属性名 -->

 <id column="id" property="id"/>
 <result column="username" property="username"/>
 <result column="sex" property="sex"/>

 <!--
 property:实体类中定义的属性名
 ofType:指定映射到集合中的全类名
 -->
 <collection property="orders" ofType="com.ys.po.Orders">
     <id column="oid" property="id"/>
     <result column="number" property="number"/>
 </collection>


 </resultMap>

转载于:https://my.oschina.net/u/3693993/blog/3001426

Mybatis中可以通过association标签实现一对多查询。association标签用于处理一对一关系,而collection标签用于处理一对多关系。在一对多查询中,通常会在主表中包含一个外键,该外键指向从表中的主键。 下面是一个简单的示例,假设我们有两个表Order和OrderItem,Order表中包含一个外键指向OrderItem表的主键,代码如下: ``` <resultMap id="orderMap" type="Order"> <id property="orderId" column="order_id" /> <result property="orderName" column="order_name" /> <association property="orderItem" resultMap="orderItemMap" /> </resultMap> <resultMap id="orderItemMap" type="OrderItem"> <id property="orderItemId" column="order_item_id" /> <result property="orderItemName" column="order_item_name" /> </resultMap> <select id="selectOrder" resultMap="orderMap"> select * from order o left join order_item oi on o.order_id = oi.order_id where o.order_id = #{orderId} </select> ``` 在上面的示例中,我们定义了两个resultMap,一个用于映射Order表,另一个用于映射OrderItem表。在Order表的resultMap中,我们使用了association标签来处理一对多关系,将Order表中的orderItem属性映射到OrderItem表中,通过resultMap属性指定了OrderItem表的resultMap。 在select语句中,我们通过left join关键字将Order表和OrderItem表关联起来,通过where条件指定了查询的订单ID。最终返回的结果将会是一个Order对象,其中包含一个List<OrderItem>类型的orderItem属性,该属性中包含了该订单对应的所有订单项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值