resultmap使用方法一对一
时间: 2024-12-02 16:19:37 浏览: 12
在MyBatis中,`resultMap`是用于映射数据库查询结果到Java对象的一种配置方式,它通常配合`select`标签一起使用。一对一关联的情况是指从一个实体表中查找到一个关联的单个实体,例如,用户表中有一个用户地址的信息。
以下是使用`resultMap`处理一对一关联的一般步骤:
1. 定义数据源表的映射文件(如User.xml):
```xml
<resultMap id="UserResultMap" type="com.example.User">
<id property="id" column="user_id"/>
<!-- 其他User对象属性 -->
<result property="address" javaType="com.example.Address" select="selectAddressById"/>
</resultMap>
```
这里,`<result>`标签引用了另一个`select`标签定义的方法,表示通过`id`获取用户的地址。
2. 定义地址表的映射文件(如Address.xml),并包含获取地址的方法:
```xml
<select id="selectAddressById" parameterType="int" resultType="com.example.Address">
SELECT * FROM address WHERE user_id = #{id}
</select>
```
3. 在Mapper接口中声明方法:
```java
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectUserById(int id);
// 如果Mapper接口已经包含了UserMapper,则不需要再单独定义
@SelectProvider(type = UserMapper.class, method = "getAddressByUserId")
User getUserWithAddress(int userId); // 使用UserResultMap
// 实现(AddressMapper)接口的方式获取Address
Address getAddress(int userId);
}
```
或者提供一个方法直接返回地址:
```java
User getUserWithAddress(int userId){
User user = userMapper.selectUserById(userId);
return new UserMapper().getAddress(user.getId()); // 通过User对象查询地址
}
// AddressMapper接口
public interface AddressMapper {
Address getAddress(int userId);
}
```
4. 在Service层或业务逻辑中调用方法:
```java
UserService userService = new UserService();
User user = userService.getUserWithAddress(1); // 获取带地址的用户信息
```
阅读全文