要在xml里面组合
时间: 2025-04-08 18:35:27 浏览: 15
在MyBatis中,如果你希望通过XML配置的方式来实现多表查询后的数据组合(而不是像之前提到的那样,在服务端通过Java代码手动组装),你可以借助 `<resultMap>` 元素完成复杂的数据映射。这种方法允许你在SQL层面执行JOIN操作,并将结果按照自定义的方式映射到目标对象上。
下面我们来看一下如果要用XML方式来达到类似效果的具体步骤:
### 步骤一:创建适当的实体类
首先你需要确定好你的数据库结构以及想要得到的结果格式,并据此设计相应的实体类。比如我们还是沿用前面那个例子中的三张表——`users`, `orders`, 和 `products`. 假设我们的最终目的是构建这样一个包含用户及其所下订单详情列表的对象:
```java
public class UserWithOrders {
private Integer id;
private String name;
private List<OrderDetail> orderDetails;
// Getters and setters...
}
public class OrderDetail {
private Integer orderId;
private String productName;
// Getters and setters...
}
```
### 步骤二:书写SQL语句并设置ResultMaps
接下来我们在Mapper XML 文件内指定所需的SQL语句及相对应的结果集映射规则.
```xml
<mapper namespace="com.example.mapper.UserMapper">
<!-- 定义子元素 ResultMap -->
<resultMap type="OrderDetail" id="orderDetailResultMap">
<id column="ORDER_ID" property="orderId"/>
<result column="PRODUCT_TITLE" property="productName"/>
</resultMap>
<!-- 主 resultMap -->
<resultMap type="UserWithOrders" id="userWithOrdersResultMap">
<id column="USER_ID" property="id"/>
<result column="USERNAME" property="name"/>
<!-- 使用 association 标签引入关联数据-->
<collection property="orderDetails"
ofType="OrderDetail"
select="selectOrderDetailsByUserId"
column="{userId=ID}">
</collection>
</resultMap>
<!-- 查询所有的 Users 数据 -->
<select id="selectAllUsersWithOrders" resultMap="userWithOrdersResultMap">
SELECT ID AS USER_ID, NAME AS USERNAME FROM USERS
</select>
<!-- 辅助 Select 用于加载 Orders Details -->
<select id="selectOrderDetailsByUserId" parameterType="int" resultMap="orderDetailResultMap">
SELECT O.ID AS ORDER_ID, P.TITLE AS PRODUCT_TITLE
FROM ORDERS O LEFT JOIN PRODUCTS P ON O.PRODUCT_ID = P.ID
WHERE O.USER_ID=#{userId};
</select>
</mapper>
```
在这里可以看到,主query只负责取出最基本的用户信息;而每一个用户的详细订单则由另一个独立的辅助select statement提供给定userid的情况下产生的结果集传回。两者之间依靠collection标签建立起联系。
### 解释关键点:
- 我们建立了两个不同的Result Maps 分别针对不同的需求做了设定。
- 在主Result Map内部,运用association机制去引用其它的部分资料来源。
- 对于Collection部分特别指定了其OF TYPE属性表明它应该转化为何种类型的集合容器内的成员项类型。
- 然后给出具体的sub-query名称作为source value source ,并且明确告诉mybatis需要用到哪列充当传递参数的角色。
这样就能够在Xml文件中成功地实现了基于多表联结基础上的数据整理工作了!
阅读全文
相关推荐


















