mybatis resultMap继承
时间: 2023-08-26 18:10:38 浏览: 152
MyBatis 中的 resultMap 和 resultType 是两种不同的查询结果映射方式。
resultType 是基于类型的映射,适用于返回结果为单一类型的情况,例如返回一个整型或字符串。
resultMap 是基于映射关系的映射,适用于返回结果为复杂类型的情况,例如返回一个对象或一组对象。
相关问题
Mybatis resultMap详解
在 Mybatis 中,ResultMap 是一种将查询结果集映射到 Java 对象中的技术,它可以自定义对查询结果集的映射方式,使得查询结果集中的列与 Java 对象的属性进行映射,从而方便进行数据操作。下面详细介绍一下 Mybatis 中的 ResultMap。
### ResultMap 的定义
ResultMap 的定义可以在 Mapper.xml 文件中使用 <resultMap> 标签进行定义,示例代码如下:
```xml
<resultMap id="userMap" type="com.example.User">
<id property="id" column="user_id" />
<result property="username" column="user_name"/>
<result property="age" column="user_age"/>
</resultMap>
```
其中:
- `id`:ResultMap 的唯一标识符;
- `type`:映射结果集的 Java 类型;
- `id` 和 `result`:用来映射结果集中的列和 Java 对象的属性,其中 `id` 用来映射主键,`property` 表示 Java 对象的属性名,`column` 表示查询结果集中的列名。
### ResultMap 的使用
在 Mapper.xml 文件中的 SQL 语句中使用 ResultMap,示例代码如下:
```xml
<select id="selectUser" resultMap="userMap">
select user_id, user_name, user_age from user where user_id = #{id}
</select>
```
其中,`resultMap` 属性指定了使用的 ResultMap 的 id。
### ResultMap 的继承
Mybatis 还支持 ResultMap 的继承,可以通过 extends 属性来实现。示例代码如下:
```xml
<resultMap id="userMap" type="com.example.User">
<id property="id" column="user_id" />
<result property="username" column="user_name"/>
<result property="age" column="user_age"/>
</resultMap>
<resultMap id="userMapWithAddress" type="com.example.User" extends="userMap">
<result property="address" column="user_address"/>
</resultMap>
```
在上面的示例中,`userMapWithAddress` 继承了 `userMap`,因此可以使用 `userMap` 中定义的映射关系,同时还可以添加自己的映射关系。
### ResultMap 的自动映射
Mybatis 还支持自动映射,它会根据查询结果集中的列名自动匹配 Java 对象中的属性名,从而省略 ResultMap 的定义。可以使用 `autoMapping="true"` 来启用自动映射。示例代码如下:
```xml
<select id="selectUser" resultType="com.example.User" autoMapping="true">
select user_id, user_name, user_age from user where user_id = #{id}
</select>
```
在上述代码中,`resultType` 属性指定了映射结果集的 Java 类型,而 `autoMapping` 属性启用了自动映射。
### 总结
- Mybatis 的 ResultMap 是将查询结果集映射到 Java 对象中的技术;
- ResultMap 可以在 Mapper.xml 文件中定义,并在 SQL 语句中使用;
- ResultMap 可以继承,可以自动映射。
mybatis resultMap父子
### MyBatis 中 resultMap 处理父子关系的方法
在 MyBatis 中,`resultMap` 是用于定义如何将 SQL 查询结果映射到 Java 对象的强大工具。当涉及到父子关系时,可以利用 `association` 和 `collection` 标签来实现这种层次结构的映射。
#### 使用 association 映射一对一关系
如果存在一对一双向或多对一单向的关系,可以通过 `<association>` 来指定子对象与其父对象之间的联系。下面是一个具体的例子:
假设有一个博客(Blog)实体类及其作者(Author),其中每个 Blog 只有一位 Author,即构成了一对一的关系。为了表示这样的关系,在 XML 配置文件中会这样定义 `resultMap`:
```xml
<resultMap id="blogResult" type="Blog">
<!-- 定义主键 -->
<id property="id" column="blog_id"/>
<!-- 定义其他简单属性 -->
<result property="title" column="blog_title"/>
<!-- 关联 author 表的数据 -->
<association property="author" javaType="Author" resultMap="authorResult"/>
</resultMap>
<!-- 单独为 Author 创建一个 resultMap -->
<resultMap id="authorResult" type="Author">
<id property="id" column="author_id"/>
<result property="name" column="author_name"/>
</resultMap>
```
这里通过 `javaType` 属性指定了关联的对象类型,并且使用了另一个名为 `authorResult` 的 `resultMap` 来进一步细化 Author 类型的具体字段映射[^4]。
#### 使用 collection 映射一对多关系
对于一对多的情况,比如一个分类(Category)有多个文章(Post),则应该采用 `<collection>` 标签来进行映射。这通常发生在需要加载集合类型的成员变量上,例如 List 或 Set。
考虑 Category 和 Post 之间的一对多关系,可以在 Category 的 `resultMap` 中加入如下片段:
```xml
<resultMap id="categoryResult" type="Category">
...
<collection property="posts" ofType="Post" resultMap="postResult"/>
</resultMap>
<resultMap id="postResult" type="Post">
<id property="id" column="post_id"/>
<result property="title" column="post_title"/>
</resultMap>
```
在这个案例里,`ofType` 参数用来声明集合中的元素类型;同样地,也创建了一个独立的 `resultMap` (`postResult`) 来处理 Post 实体的细节。
需要注意的是,只有当子 `resultMap` 的 `type` 不是指定抽象类的情况下才能成功继承父 `resultMap` 的映射关系[^1]。这意味着如果尝试让某个具体类去扩展自定义基类或其他非最终 (non-final) 类作为其基础架构的一部分,则可能无法正常工作除非该特定子类确实实现了所有必要的接口或覆盖了必需的方法。
阅读全文
相关推荐














