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="taskType == '6'.toString">
SELECT .......
from ......
where
xxxxx = #{subTaskId}
</when>
<otherwise>
SELECT ......
from ......
where
xxxx = #{subTaskId}
</otherwise>
</choose>
</select>
重点是 column="{subTaskId=subTaskId,taskType=taskType}" 这句
和 parameterType="java.util.Map" 这句
注意:在这里省略了很多不必要的东西,不必介意,只需要看重点就好,如果有什么问题,可留言,我回及时回答的
1、mapper文件中:List&lt;Object&gt; getXXXXX(@Param("taskId")String taskId,@Param("taskType")String taskType);2、xml文件中&lt;select id="" resultMap="" &gt; select tst.id subTaskId,......
<resultMap id="Organ" type="com.pskj.GSLZ.pojo.zfzb.Organ" >
<result column="OR_ID" property="OR_ID" jdbcType="VARCHAR"></result>
<result column="OR_NAME" property="OR_NAME" jdbcType="VARCHAR"></result>
Mybatis-高级结果映射(多对一、一对多
查询处理)
如果这个世界总是这么简单就好了。
MyBatis 创建
时的一个思想是:数据库不可能永远是你所想或所需的那个样
子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式,可惜它们并不都是那样。 如果能有一种数据库映射模式,完美适配所有的应用程序,那就太好了,但可惜也没有。 而 ResultMap 就是
MyBatis 对这个问题的答案。
resultMap元素有很多
子元素和一个值得深入探讨的结构。 下面是resultMap 元素的概念视图。
查询结果为List<UserInfoVo>,其
中UserInfoVo实体
中,有private List<RoleInfoList> roleInfoList;属性,也就是说,每条用户记录都对应了一个角色list,我这里是举例几个属性
直接分析
xml,解决具体的
实现问题
首先定义result,并设置唯一标识id,注意相关类型设置
假设我们有两个表,一个是`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`这个条件来排除掉没有订单项的订单。这样就可以实现查询时子查询为空则不显示的效果了。
springboot:redis报错io.lettuce.core.RedisCommandExecutionException: ERR Client sent AUTH, but no passw
73183
【git】idea使用update提示Can't Update No tracked branch configured for branch master or the branch doe...
vue 使用 sortablejs 拖着el-table行,使行顺序修改
tzpkd:
原始GPS坐标(WGS-84)转成百度的经纬度,零误差
小洁癖Jieie:
原始GPS坐标(WGS-84)转成百度的经纬度,零误差
MCNS_37: