mybatis注解开发resultMap复用
时间: 2025-01-08 08:01:37 浏览: 4
### MyBatis 注解开发中 `resultMap` 的复用
在 MyBatis 注解开发过程中,为了提高代码的可维护性和减少冗余配置,可以通过 `@ResultMap` 实现结果集映射的复用。这种方式使得可以在多个查询方法之间共享同一个结果映射逻辑。
#### 定义通用的 `@ResultMap`
首先,在 Mapper 接口内定义一个带有 `@Results` 和 `@ConstructorArgs` 或者 `@Arg` 注解的结果映射,并为其指定名称以便后续引用:
```java
public interface UserMapper {
@Select("SELECT id, name FROM users WHERE id = #{id}")
@Results(id="UserResult", value={
@Result(property="userId", column="id"),
@Result(property="userName", column="name")
})
User getUserById(int id);
}
```
此段代码创建了一个名为 "UserResult" 的结果映射[^2]。
#### 复用已有的 `@ResultMap`
当需要在一个新的查询方法中应用同样的映射规则时,则可以直接通过 `@ResultMap` 引入先前定义好的映射名:
```java
public interface OrderMapper {
@Select("SELECT u.id as userId, u.name as userName "
+ "FROM orders o JOIN users u ON o.user_id=u.id"
+ "WHERE order_id=#{orderId}")
@ResultMap("UserMapper.UserResult") // 引用了另一个 mapper 文件里的 resultMap
List<User> getUsersByOrderId(@Param("orderId") int orderId);
}
```
这里展示了如何跨接口文件引用已经存在的 `resultMap` ,即利用 `"UserMapper.UserResult"` 这样的路径形式来指明要使用的具体位置。
这种做法不仅简化了代码结构,而且提高了不同模块间的耦合度控制能力;同时也方便后期对数据库字段变更或业务需求调整作出快速响应。
阅读全文