iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >MyBatis 配置之集合的嵌套方式
  • 426
分享到

MyBatis 配置之集合的嵌套方式

2024-04-02 19:04:59 426人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录mybatis配置之集合的嵌套前言介绍代码示例外部引用小结一下吧MyBatis集合、集合嵌套查询集合集合的嵌套查询集合的嵌套结果MyBatis 配置之集合的嵌套 前言介绍 在一些

MyBatis 配置之集合的嵌套

前言介绍

在一些查询结果包装类中,包含一些 List 集合属性,使用 collection 标签可以声明该 List 集合中属性的类型,便于 MyBatis 对包装类中的集合类型属性进行映射。

代码示例

例如商城,取出某一个商品信息以及该商品的评价列表,其中商品包装类 Product 的定义代码如下:


package cn.com.mybatis.pojo;
public class Product{
    //商品id
    private int pid;
    //商品名称
    private String pname;
    //商品的评价信息
    private List<Reply> replys;
    //get和set方法
}

此时,商品的评价信息就是一个 List,所以在定义结果映射配置时,使用 collection 来定义评价结果集合,示例代码如下:


<resultMap id="productResult" type="cn.com.mybatis.pojo.Product">
    <id property="pid" column="product_id"/>
    <result property="pname" column="product_name"/>
    <collection property="replys" select="queryReplyByProductId" column="product_id" ofType="Reply"/>
</resultMap>
 
<select id="queryProductInfo" parameterType="int" resultMap="productResult">
    select
        P.id as product_id,
        P.name as product_name
    from product P WHERE P.id = #{id}
</select>
 
<select id="queryReplyByProductId" parameterType="int" resultType="Reply">
    select * from reply R WHERE R.pid = #{ProductId}
</select>

以上示例中,Product 与商品评价 Reply 会进行关联,一个商品评价 Reply 的 pid 只对应一个商品 Product 的 id,而一个商品 Product 的 id 可对应多个商品评价 Reply 的 pid,是一对多的关系。

通过配置集合的嵌套结果,就可以将查询结果中的包装类的集合类型的属性嵌套到结果集中。通过上面的配置最终得到一个包含 Reply 的 List 的商品包装类 Product。

外部引用

collection 标签也可以引入外部的 resultMap 配置。如果 queryReplyByProductId 配置的 sql 查询结果中使用了别名,或数据库字段名与 Reply 类属性名不对应,此时需要返回一个名为 replyResult 的 resultMap,那么 productResult 中的 collection 可以做如下配置:


<resultMap id="productResult" type="cn.com.mybatis.pojo.Product">
    <id property="pid" column="product_id"/>
    <result property="pname" column="product_name"/>
    <collection property="replys" ofType="Reply" resultMap="replyResult" columnPrefix="reply_">
</resultMap>
 
<resultMap id="replyResult" type="Reply">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="info" column="info"/>
</resultMap>

columnPrefix 代表为外部引入的 resultMap 中的每一个元素的 column 属性加上一个前缀。

小结一下吧

在一些查询结果包装类中,包含一些 List 集合属性,可使用 collection 标签声明该 List 集合中属性的类型。以便于 MyBatis 对包装类中的集合类型属性进行映射。可以在 collection 标签中配置,也可以引入外部的 resultMap 做配置。

MyBatis 集合、集合嵌套查询

集合


<collection property="posts" ofType="domain.blog.Post">
  <id property="id" column="post_id"/>
  <result property="subject" column="post_subject"/>
  <result property="body" column="post_body"/>
</collection>

集合元素的作用几乎和关联是相同的。实际上,它们也很相似,文档的异同是多余的。 所以我们更多关注于它们的不同。

我们来继续上面的示例,一个博客只有一个作者。但是博客有很多文章。在博客类中, 这可以由下面这样的写法来表示:


private List<Post> posts;

要映射嵌套结果集合到 List 中,我们使用集合元素。就像关联元素一样,我们可以从 连接中使用嵌套查询,或者嵌套结果。

集合的嵌套查询

首先,让我们看看使用嵌套查询来为博客加载文章。


<resultMap id="blogResult" type="Blog">
  <collection property="posts" javaType="ArrayList" column="id" ofType="Post" select="selectPostsForBlog"/>
</resultMap>
 
<select id="selectBlog" resultMap="blogResult">
  SELECT * FROM BLOG WHERE ID = #{id}
</select>
 
<select id="selectPostsForBlog" resultType="Post">
  SELECT * FROM POST WHERE BLOG_ID = #{id}
</select>

这里你应该注意很多东西,但大部分代码和上面的关联元素是非常相似的。首先,你应 该注意我们使用的是集合元素。然后要注意那个新的“ofType”属性。这个属性用来区分 JavaBean(或字段)属性类型和集合包含的类型来说是很重要的。所以你可以读出下面这个 映射:


<collection property="posts" javaType="ArrayList" column="id" ofType="Post" select="selectPostsForBlog"/>

读作: “在 Post 类型的 ArrayList 中的 posts 的集合。”

javaType 属性是不需要的,因为 MyBatis 在很多情况下会为你算出来。所以你可以缩短 写法:


<collection property="posts" column="id" ofType="Post" select="selectPostsForBlog"/>

集合的嵌套结果

至此,你可以猜测集合的嵌套结果是如何来工作的,因为它和关联完全相同,除了它应 用了一个“ofType”属性

首先, 让我们看看 SQL:


<select id="selectBlog" resultMap="blogResult">
  select
  B.id as blog_id,
  B.title as blog_title,
  B.author_id as blog_author_id,
  P.id as post_id,
  P.subject as post_subject,
  P.body as post_body,
  from Blog B
  left outer join Post P on B.id = P.blog_id
  where B.id = #{id}
</select>

我们又一次联合了博客表和文章表,而且关注于保证特性,结果列标签的简单映射。现 在用文章映射集合映射博客,可以简单写为:


<resultMap id="blogResult" type="Blog">
  <id property="id" column="blog_id" />
  <result property="title" column="blog_title"/>
  <collection property="posts" ofType="Post">
    <id property="id" column="post_id"/>
    <result property="subject" column="post_subject"/>
    <result property="body" column="post_body"/>
  </collection>
</resultMap>

同样,要记得 id 元素的重要性,如果你不记得了,请阅读上面的关联部分。

同样, 如果你引用更长的形式允许你的结果映射的更多重用,你可以使用下面这个替代 的映射:


<resultMap id="blogResult" type="Blog">
  <id property="id" column="blog_id" />
  <result property="title" column="blog_title"/>
  <collection property="posts" ofType="Post" resultMap="blogPostResult" columnPrefix="post_"/>
</resultMap>
 
<resultMap id="blogPostResult" type="Post">
  <id property="id" column="id"/>
  <result property="subject" column="subject"/>
  <result property="body" column="body"/>
</resultMap>

注意 这个对你所映射的内容没有深度,广度或关联和集合相联合的限制。当映射它们 时你应该在大脑中保留它们的表现。

你的应用在找到最佳方法前要一直进行的单元测试和性 能测试。好在 myBatis 让你后来可以改变想法,而不对你的代码造成很小(或任何)影响。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: MyBatis 配置之集合的嵌套方式

本文链接: https://www.lsjlt.com/news/136499.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MyBatis 配置之集合的嵌套方式
    目录MyBatis配置之集合的嵌套前言介绍代码示例外部引用小结一下吧MyBatis集合、集合嵌套查询集合集合的嵌套查询集合的嵌套结果MyBatis 配置之集合的嵌套 前言介绍 在一些...
    99+
    2024-04-02
  • mybatis 集合嵌套查询和集合嵌套结果的区别说明
    目录集合嵌套查询和集合嵌套结果的区别1.创建2张表,建立主外键关系2.建立实体类3.修改配置文件4.建立映射文件5.创建测试类MyBatis 嵌套查询解析对应的JavaBean对应的...
    99+
    2024-04-02
  • MyBatis中一对多的xml配置方式(嵌套查询/嵌套结果)
    目录MyBatis一对多的xml配置嵌套查询嵌套结果一对多关联查询xml配置写法  情景概述创建表对应 java Pojo查询 客户表client 获取客户名下的附件信息查...
    99+
    2024-04-02
  • Java集合嵌套的方法
    本篇内容主要讲解“Java集合嵌套的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java集合嵌套的方法”吧!一、需求:创建一个ArrayList集合,存储三个元素,每一个元素都是HashM...
    99+
    2023-06-29
  • Java之Mybatis多层嵌套查询方式
    目录Mybatis多层嵌套查询表的存储sql文件实体类XMLMybatis多层嵌套查询(多对多)依赖实体类Setmeal实体类CheckGroup实体类CheckItemmapper...
    99+
    2024-04-02
  • MongoDB之数据查询(嵌套集合)
    在MongoDB数据库里面每一个集合数据可以继续保存其他的集合数据,例如有些人员保存家庭信息。 范例:增加数据 db.emp.insert({"name":"林A","sex":"男","age":22,...
    99+
    2024-04-02
  • mybatis中foreach嵌套if标签方式
    目录mybatis foreach嵌套if标签xml文件 $和 #的区别union与union all区别mybatis if和foreach嵌套 (同一个列,不...
    99+
    2024-04-02
  • mybatis中的if-else及if嵌套使用方式
    目录if-else及if嵌套使用方式案例一:if-else案例二:if嵌套mybatis if-else写法if-else及if嵌套使用方式 案例一:if-else 在使用mybat...
    99+
    2024-04-02
  • Mybatis resultMap标签继承、复用、嵌套方式
    目录resultMap标签继承、复用、嵌套定义表与实体类表实体类定义与表映射的 resultMap继承、复用、嵌套使用resultMap需要注意的地方resultMap标签继承、复用...
    99+
    2024-04-02
  • mybatis嵌套循环map方式(高级用法)
    目录mybatis嵌套循环mapmybatis入参map的基本语法mybatis嵌套循环map的高级用法mybatis中循环map集合操作mybatis嵌套循环map mybatis...
    99+
    2024-04-02
  • Fluent Mybatis零xml配置实现复杂嵌套查询
    目录嵌套查询in (select 子查询)exists (select子查询)嵌套查询 使用Fluent Mybatis, 不用手写一行xml文件或者Mapper文件,在d...
    99+
    2024-04-02
  • Mybatis的collection三层嵌套查询方式(验证通过)
    目录Mybatis collection三层嵌套查询一般情况下,我们都是两层的嵌套找到一个方案实体类的映射关系SQL映射关系如下解析如下总结Mybatis collection三层嵌...
    99+
    2023-03-15
    Mybatis collection collection三层嵌套查询 collection嵌套查询
  • mybatis返回keyvaluemap集合方式
    目录mybatis返回key value map集合mybatis返回map,key为主键,value为对象mybatis返回key value map集合 XML:文件 ...
    99+
    2024-04-02
  • Mybatis之typeAlias配置的3种方式小结
    目录Mybatis typeAlias配置1.定义别名2.扫描包方式3.注解方式springboot加载mybatis的typeAlias问题为了清晰可见,直接贴代码Mybatis ...
    99+
    2024-04-02
  • mybatis注解开发一对多嵌套查询方式
    目录mybatis一对多嵌套查询student实体类class实体类mybatis-config.xmlstudentMapper.javaclassMapper.java数据库sq...
    99+
    2023-03-15
    mybatis注解开发 mybatis一对多嵌套查询 mybatis嵌套查询
  • C#中如何用Intersect处理嵌套集合的交集问题
    在C#中,可以使用LINQ的Intersect方法来处理嵌套集合的交集问题。下面是一个示例代码: using System; usi...
    99+
    2024-04-02
  • Spring Boot整合Mybatis的配置方法
    这篇文章主要讲解了“Spring Boot整合Mybatis的配置方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot整合Mybatis的配置方法”吧!目录配置文件形式p...
    99+
    2023-06-20
  • Mybatis resultMap标签继承、复用、嵌套的方法
    本篇内容主要讲解“Mybatis resultMap标签继承、复用、嵌套的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mybatis resultMap标签继承、复用、...
    99+
    2023-06-29
  • PYQT5 实现界面的嵌套方式
    新手,因为查阅各种博客太多,有点混,而且也找不到原本的网址了,所以就自己当作笔记记下,以便以后回来查看。 自己比较会的编程语言就只有python了,但是因为老师那边要求做一个桌面应用...
    99+
    2024-04-02
  • Mybatis关联查询结果集对象嵌套的具体使用
    在查询时经常出现一对多”的关系,所有会出现嵌套对象的情况,Mybatis在resultMap提供了collection标签,本文适合有一定Mybatis基础的读者查阅 数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作