首页 > 其他分享 >Mybatis-Plus分页插件,嵌套查询和嵌套结果映射

Mybatis-Plus分页插件,嵌套查询和嵌套结果映射

时间:2024-06-23 15:55:29浏览次数:23  
标签:info 插件 room 映射 查询 嵌套 Plus id

Mybatis-Plus分页插件注意事项

使用Mybatis-Plus的分页插件进行分页查询时,如果结果需要使用<collection>进行映射,只能使用嵌套查询(Nested Select for Collection),而不能使用嵌套结果映射(Nested Results for Collection)

嵌套查询嵌套结果映射是Collection映射的两种方式,下面通过一个案例进行介绍

例如有room_infograph_info两张表,其关系为一对多,如下
image

现需要查询房间列表及其图片信息,期望返回的结果如下

[
    {
        "id": 1,
        "number": 201,
        "rent": 2000,
        "graphList": [
            {
                "id": 1,
                "url": "http://",
                "roomId": 1
            },
            {
                "id": 2,
                "url": "http://",
                "roomId": 1
            }
        ]
    },
    {
        "id": 2,
        "number": 202,
        "rent": 3000,
        "graphList": [
            {
                "id": 3,
                "url": "http://",
                "roomId": 2
            },
            {
                "id": 4,
                "url": "http://",
                "roomId": 2
            }
        ]
    }
]

为得到上述结果,可使用以下两种方式

  • 嵌套结果映射

    <select id="selectRoomPage" resultMap="RoomPageMap">
        select ri.id room_id,
               ri.number,
               ri.rent,
               gi.id graph_id,
               gi.url,
               gi.room_id
        from room_info ri
           left join graph_info gi on ri.id=gi.room_id
    </select>
    
    <resultMap id="RoomPageMap" type="RoomInfoVo" autoMapping="true">
        <id column="room_id" property="id"/>
        <collection property="graphInfoList" ofType="GraphInfo" autoMapping="true">
            <id column="graph_id" property="id"/>
        </collection>
    </resultMap>
    

    这种方式的执行原理如下图所示

image

  • 嵌套查询

    <select id="selectRoomPage" resultMap="RoomPageMap">
        select id,
               number,
               rent
        from room_info
    </select>
    
    <resultMap id="RoomPageMap" type="RoomInfoVo" autoMapping="true">
        <id column="id" property="id"/>
        <collection property="graphInfoList" ofType="GraphInfo" select="selectGraphByRoomId"                      column="id"/>
    </resultMap>
    
    <select id="selectGraphByRoomId" resultType="GraphInfo">
        select id,
               url,
               room_id
        from graph_info
        where room_id = #{id}
    </select>
    

    这种方法使用两个独立的查询语句来获取一对多关系的数据。首先,Mybatis会执行主查询来获取room_info列表,然后对于每个room_info,Mybatis都会执行一次子查询来获取其对应的graph_info。执行n+1次,n是主表的行数。

image

若现在使用MybatisPlus的分页插件进行分页查询,假如查询的内容是第1页,每页2条记录,(应该查出两条房间记录,房间表是主表),则上述两种方式的查询结果分别是

  • 嵌套结果映射
    image

  • 嵌套查询
    image

显然嵌套结果映射的分页逻辑是存在问题的。

标签:info,插件,room,映射,查询,嵌套,Plus,id
From: https://www.cnblogs.com/r1-12king/p/18263516

相关文章

  • VS coed常用插件(补充)
    接续上文:VSCode常用插件整理-CSDN博客插件1.IntelliSenseforCSSclassnamesinHTML自动感知<style>中已定义的css选择器,同时支持检测外联样式,在给html标签添加已定义样式时,十分好用;个人感觉比HTMLCSSSupport好用一点2.CSSClassIntellisense自动感知HTML结构中......
  • VS Code常用插件整理
    目录1.Chinese(Simplified)(简体中文)          VScoed汉化2.IntelliCode                                          智能补全代码3.IntelliCodeAPIUsageExamples        智能代码API使用示例4.jQuer......
  • MybatisPlus逆向工程插件,无需编写任何配置文件,只需配置数据库信息,一键生成Entity、Con
    文章目录1.前言2.与其它逆向工程工具相比的优势3.下载插件4.准备工作4.1创建数据库和表(可跳过)4.2配置数据库信息4.2.1打开IDEA的菜单栏4.2.2找到工具,点击ConfigDatabase4.2.3填写连接数据库所需要的信息4.3导入MybatisPlus的Maven依赖和SpringWeb的Maven依......
  • 12. Lammps入门in文件vscode高亮插件-Lammps Syntax Highlighting
    来源:“码农不会写诗”公众号链接:Lammps入门in文件vscode高亮插件-LammpsSyntaxHighlighting文章目录01LammpsSyntaxHighlighting02安装03效果LammpsSyntaxHighlighting  工欲善其事必先利其器,Lammps语法高亮插件不仅是美观视觉必备,也是命令学习、......
  • 红队内网攻防渗透:内网渗透之内网对抗:横向移动篇&入口差异&切换上线&IPC管道&AT&SC任务
    红队内网攻防渗透1.内网横向移动1.1横向移动入口知识点1.1.1、当前被控机处于域内还是域外1.1.1.1在域内1.1.1.2不在域内1.1.1.2.1第一种方法提权到system权限1.1.1.2.2第二种方法切换用户上线1.1.1.2.3kerbrute枚举用户1.1.2、当前凭据为明......
  • 红队内网攻防渗透:内网渗透之内网对抗:横向移动篇&入口切换&SMB共享&WMI管道&DCOM组件&I
    红队内网攻防渗透1.内网横向移动1.1WMI进行横向移动1.1.1利用条件:1.1.1利用详情1.1.1.1wmic1.1.1.1.1正向shell上线1.1.1.1.2反向shell上线1.1.1.2cscript(不建议使用)1.1.1.3wmiexec-impacket1.1.1.4cs插件1.2SMB横向移动1.2.1利......
  • pytest测试框架pytest-html插件生成HTML格式测试报告
    Pytest提供了丰富的插件来扩展其功能,pytest-html插件帮助我们生成HTML格式的测试报告,为我们提供直观、有效的测试结果展示。为了使用pytest-html,需要满足以下条件:·Python3.6或更高版本pytest-html安装使用pip命令安装:pipinstallpytest-html(安装在pytest工程所......
  • Vite-Wechat网页聊天室|vite5.x+vue3+pinia+element-plus仿微信客户端
    基于Vue3+Pinia+ElementPlus仿微信网页聊天模板Vite5-Vue3-Wechat。vite-wechat使用最新前端技术vite5+vue3+vue-router@4+pinia+element-plus搭建网页端仿微信界面聊天系统。包含了聊天、通讯录、朋友圈、短视频、我的等功能模块。支持收缩侧边栏、背景壁纸换肤、锁屏、最大化等......
  • MyBatis-Plus入门教程(一)
    MyBatis-Plus是一个MyBatis的增强工具,在MyBatis的基础上为其提供了许多便捷功能,使开发者能够更快速、高效地进行数据库操作。MyBatis-Plus简介1.什么是MyBatis-Plus?MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它旨在简化开发过程,减少重复代码,提高开发效率。MP通......
  • Mybatis-plus入门教程(二)
    第一步:环境准备1.添加依赖确保在项目的构建文件中添加MyBatis-Plus依赖。Maven:<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.4</version></dependency>Gradle:im......