前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MyBatis延迟加载(二)

MyBatis延迟加载(二)

原创
作者头像
堕落飞鸟
发布2023-05-15 13:52:08
4080
发布2023-05-15 13:52:08
举报
文章被收录于专栏:飞鸟的专栏

基于XML配置的延迟加载

除了基于代理对象的延迟加载外,MyBatis还提供了基于XML配置的延迟加载方式。在这种方式中,我们需要在MyBatis映射文件中为查询语句配置一个<resultMap>元素,并在该元素中为需要延迟加载的属性添加<association>或<collection>元素。这些元素用于指定需要延迟加载的关联对象属性和延迟加载类型。

下面是一个示例,演示如何在MyBatis中使用基于XML配置的延迟加载。

假设我们有两个Java类:Blog和Comment。Blog类表示博客,包含博客的ID、标题、内容和评论列表。而Comment类表示评论,包含评论的ID、内容和博客ID。

我们可以在MyBatis映射文件中定义一个selectBlogByIdWithComments语句,用于查询指定ID的博客信息及其评论列表。同时,我们还可以为博客类和评论类定义一个基于XML配置的延迟加载配置。

首先,我们来定义selectBlogByIdWithComments语句

代码语言:javascript
复制
<select id="selectBlogByIdWithComments" resultMap="BlogResultMapWithComments">
  SELECT b.id, b.title, b.content, c.id as comment_id, c.content as comment_content
  FROM blog b LEFT JOIN comment c ON b.id = c.blog_id
  WHERE b.id = #{id}
</select>

<resultMap id="BlogResultMapWithComments" type="Blog">
  <id property="id" column="id" />
  <result property="title" column="title" />
  <result property="content" column="content" />
  <collection property="comments" ofType="Comment" resultMap="CommentResultMap" />
</resultMap>

<resultMap id="CommentResultMap" type="Comment">
  <id property="id" column="comment_id" />
  <result property="content" column="comment_content" />
</resultMap>

在selectBlogByIdWithComments语句的结果映射中,我们使用了BlogResultMapWithComments这个ResultMap。这个ResultMap除了包含id、title和content三个属性外,还包含一个名为comments的属性。这个属性的类型是List<Comment>,表示博客的评论列表。我们使用了collection元素来配置这个属性的映射方式。其中,property属性表示Java类中对应的属性名,ofType属性表示集合中元素的类型,resultMap属性表示元素类型对应的ResultMap。

在CommentResultMap中,我们定义了Comment类的映射方式,用于将查询结果中的评论信息映射到Comment类中。

现在,我们可以在Java代码中使用selectBlogByIdWithComments语句来查询博客信息及其评论列表了。当访问博客对象的评论列表时,MyBatis会检查是否需要进行延迟加载。如果需要,MyBatis将执行selectBlogByIdWithComments语句来查询博客的评论列表,并将查询结果填充到博客对象中。

代码语言:javascript
复制
Blog blog = sqlSession.selectOne("selectBlogByIdWithComments", 1);
List<Comment> comments = blog.getComments(); // 延迟加载

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于XML配置的延迟加载
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档