千家信息网

Mybatis Plus关联查询怎么实现

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本篇内容介绍了"Mybatis Plus关联查询怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成
千家信息网最后更新 2026年10月31日Mybatis Plus关联查询怎么实现

本篇内容介绍了"Mybatis Plus关联查询怎么实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Mybatis-Plus 简介

什么是 MyBatis-Plus?Mybatis-Plus:为简化开发而生

MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,它对 Mybatis 的基础功能进行了增强,但未做任何改变。使得我们可以可以在 Mybatis 开发的项目上直接进行升级为 Mybatis-plus,正如它对自己的定位,它能够帮助我们进一步简化开发过程,提高开发效率。

Mybatis-Plus 其实可以看作是对 Mybatis 的再一次封装,升级之后,对于单表的 CRUD 操作,调用 Mybatis-Plus 所提供的 API 就能够轻松实现,此外还提供了各种查询方式、分页等行为。最最重要的,开发人员还不用去编写 XML,这就大大降低了开发难度

官网:https://mp.baomidou.com

连表?Left Join?Inner Join?

MybtaisPlus 极大简便了单表的操作,但对应连表查询更多的还是在xml中实现,本人是一个单表主义者(能单表,尽量不连表),阿里的相关规范中也提到:尽量使用单表,连表尽量不要超过3张,于是更多的时候,是把主表查询处理,然后使用流处理把关联的表Id集合起来,再通过listByIds转toMap,得到Id对应的对象,再进行get相对应赋值,最初也没啥,当写的越来越多了之后,问题就开始暴露了,没错,代码实在是太长,太臭啦!!!

旧版代码

Set systemProjectFileSecurityIdSet = records.stream().map(SystemProjectFileSecurityGroupSetting::getSystemProjectFileSecurityId).collect(Collectors.toSet());Map systemProjectFileSecurityMap = new HashMap<>();if (!systemProjectFileSecurityIdSet.isEmpty()) {            systemProjectFileSecurityMap.putAll(systemProjectFileSecurityService.listByIds(systemProjectFileSecurityIdSet)                    .stream()                    .collect(Collectors.toMap(SystemProjectFileSecurity::getSystemProjectFileSecurityId, systemProjectFileSecurity -> systemProjectFileSecurity)));}

旧版代码太长了啦,每次关联,都需要5-7行,一张业务表少说也有3到5个表关联,这样编写的话,显得代码太过累赘,以及冗余,整体看的实在太难受啦

新版优化

Map systemProjectFileSecurityMap =     linkTableUtils.linkSystemProjectFileSecurity(records, SystemProjectFileSecurityGroupSetting::getSystemProjectFileSecurityId);

我们对冗余的代码进行的抽取,目前1-2行就可以实现5-7行的功能,就算关联查询更多的表,代码看起来也更整洁,嗯,真香

相关工具类

import com.baomidou.mybatisplus.extension.service.IService;import org.springframework.stereotype.Component; import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import java.util.function.Function;import java.util.stream.Collectors; /** * 链接其他表的工具类 * * @author zengqinghua */@Componentpublic class LinkTableUtils {     /**     * 链接 XXX表     */    public  Map linkSystemProjectFileSecurity(List records, Function getKey) {        return this.linkTable(                TableEnum.SystemProjectFileSecurity,                records, getKey,                SystemProjectFileSecurity::getSystemProjectFileSecurityId        );    }     /**     * 链接 表(通用方法)     *     * @param tableEnum 表名枚举     * @param records   数据源列表     * @param getKey    查询的Id     * @param getRKey   map的key     * @param        数据源     * @param        结果     * @return     */    public  Map linkTable(            TableEnum tableEnum,            List records, Function getKey,            Function getRKey    ) {        if (records.isEmpty()) {            return new HashMap<>();        }         IService iService = (IService) ApplicationContextUtil.getBean(tableEnum.tClass);         // 得到对应的id        Set idSet = records.stream().map(getKey).collect(Collectors.toSet());        Map map = new HashMap<>();        if (!idSet.isEmpty()) {            map.putAll(iService.listByIds(idSet)                    .stream()                    .collect(Collectors.toMap(getRKey, data -> data)));        }        return map;    }     public enum TableEnum {        SystemProjectFileSecurity("xxxx", ISystemProjectFileSecurityService.class);         private final String tableRemark;        private final Class tClass;         TableEnum(String tableRemark, Class tClass) {            this.tableRemark = tableRemark;            this.tClass = tClass;        }    }}

"Mybatis Plus关联查询怎么实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

查询 关联 代码 开发 更多 工具 链接 内容 冗余 功能 数据 数据源 知识 过程 升级 处理 整洁 简便 重要 难受 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技怎么样 新华互联网科技学校 互联网品科技 安徽鑫晟辉互联网科技 美国互联网黑科技 互联网科技英文翻译 盛创互联网科技有限公司 新华互联网科技校企合作 互联网实体化科技化 互联网为啥属于高科技 成都互联网科技公司工作好不好 呼和浩特新华互联网科技学院 翼展科技 首家互联网医院 互联网金融科技名词解释 互联网金融科技元年 互联网科技股为什么大涨 互联网科技快讯热点 济南小医互联网科技有限公司招聘 云南互联网科技学费 美国五大互联网科技公司市值多少 手冲咖啡和咖啡机区别 互联网下的科技发展 金融科技创新监管互联网金融 湖南洣水互联网科技有限公司扣款 剑昆互联网络科技有限公司临桂 玉溪互联网科技怎么选 苏州铭阳互联网科技有限公司 中国互联网公司排名锤子科技 互联网科技包装股份有限公司上市 科技互联网企业在行动
0