我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MybatisPlus多表连表查询

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MybatisPlus多表连表查询

最近发现一个好玩的框架,我们知道mybatis-plus在连表查询上是不行的,如果需要连表查询,那么我们就得乖乖的去写xml文件了,但是今天发现一个新的框架 mybatis-plus-join。它既包含了mybatis-plus的所有优点,然后还支持连表查询,还支持对多,对一的查询

mybatis-plus-join是mybatis plus的一个多表插件,上手简单,几分钟就能学会全部使用方式。行了废话不多说直接看代码吧。

插件文档 https://mybatisplusjoin.com/
插件Github仓库 https://github.com/yulichang/mybatis-plus-join

一、安装插件

在pom中添加依赖

    com.github.yulichang    mybatis-plus-join-boot-starter    1.4.5

二、修改Mapper

将实体mapper有Mybatis plus的BaseMapper改成插件的 MPJBaseMapper

@Mapperpublic interface UserMapper extends MPJBaseMapper {}

三、测试

简单的连表查询

查询 user 表全部字段address表的 city、address字段

public class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class)                .selectAll(User.class)//查询user表全部字段                .select(Address::getCity, Address::getAddress)                .leftJoin(Address.class, Address::getUserId, User::getId);        List userList = userMapper.selectJoinList(UserDTO.class, wrapper);    }}

生成的sql

SELECT t.id,t.name,t.age,t.email,t2.city,t2.address FROM user t LEFT JOIN address t1 ON t1.user_id = t.id

通过以上几个简单的步骤,我们就实现了 User 表的连表功能,甚至连 XML 文件都不用编写!
从以上步骤中,我们可以看到集成MyBatis-Plus-Join非常的简单,只需要引入 starter 工程即可。
但 MyBatis-Plus-Join 的强大远不止这些功能,全部功能请参考 插件文档 https://mybatisplusjoin.com/

分页查询

mybatis plus join插件支持mybatis plus原生的插件

public class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class)                .selectAll(User.class)//查询user表全部字段                .select(Address::getCity, Address::getAddress)                .leftJoin(Address.class, Address::getUserId, User::getId);//分页查询 只需调用selectJoinPage方法,传入Mybatis Plus的page对象就行了        Page page = userMapper.selectJoinPage(new Page<>(1, 10), UserDTO.class, wrapper);    }}

对应sql
我这用的是Mysql,会添加 Limit, 分页插件会更具不同数据库拼接不同的分页方言

SELECT t.id,t.name,t.age,t.email,t2.city,t2.address FROM user t LEFT JOIN address t1 ON t1.user_id = t.id LIMIT ?
一对多查询

对多查询也很方便,只需调用selectCollection就行了, 对多查询需要List集合作为映射字段类型

public class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class)                .selectCollection(AddressDO.class, UserDTO::getAddressList)                .leftJoin(Address.class, Address::getUserId, User::getId);        List list= userMapper.selectJoinList(UserDTO.class, wrapper);    }}
一对一查询

一对一查询和对多查询用法一模一样, 把selectCollection换成selectAssociation就行了, 映射字段就不能是集合了,改成对应的实体类或DTO类

public class SampleTest {    @Autowired    private UserMapper userMapper;    @Test    public void testSelect() {        MPJLambdaWrapper wrapper = JoinWrappers.lambda(User.class)                .selectAssociation(AddressDO.class, UserDTO::getAddressDto)                .leftJoin(Address.class, Address::getUserId, User::getId);        List list= userMapper.selectJoinList(UserDTO.class, wrapper);    }}

通过以上几个简单的步骤,我们就实现了 User 表的一对一和一对多功能,甚至连 XML 文件都不用编写!
插件还支持指定字段映射,指定别名映射,嵌套映射等强大的功能, 全部功能请参考 插件文档 https://mybatisplusjoin.com/

四、总结

无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
无感引入, 支持MP风格的查询, 您会MP就会MPJ, 无需额外的学习成本
兼容MP的别名、逻辑删除、枚举列、TypeHandle列等特性
全部功能请参考 插件文档 https://mybatisplusjoin.com/
如果您在使用过程中有任何问题或疑问,欢迎提issue或通过Github或Gitee咨询作者

来源地址:https://blog.csdn.net/qq_31116181/article/details/130235857

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MybatisPlus多表连表查询

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

下载Word文档

猜你喜欢

MybatisPlus多表连表查询

最近发现一个好玩的框架,我们知道mybatis-plus在连表查询上是不行的,如果需要连表查询,那么我们就得乖乖的去写xml文件了,但是今天发现一个新的框架 mybatis-plus-join。它既包含了mybatis-plus的所有优点,
2023-08-17

MybatisPlus多表连接查询

mybatis-plus作为mybatis的增强工具,它的出现极大的简化了开发中的数据库操作,但是长久以来,它的联表查询能力一直被大家所诟病。一旦遇到left join或right join的左右连接,你还是得老老实实的打开xml文件,手写
2023-08-16

连接查询(多表查询)——MySQL

连接查询(多表查询) 又称多表查询,当查询的字段涉及多个表的时候,就要用到连接查询 分类: 为表起别名: 提高语句的简洁度区分多个重名字段注意:如果为表起了别名,则查询的字段就不能使用原来的别名去限定 内连接 查询A、B 交集部分数据 语
2023-08-18

MPJ多表连表查询(包含分页)

MPJ是mybatis plus join 的缩写,以前写多表查询时,一般都是写在配置文件,现在mybatis plus join 完全可以解放写xml文件,功能十分强大。 上代码,本文涉及五张表,连表查询从各个表拿出所需字段输出一条记录。
2023-08-22

mybatisplus怎么在xml的连表查询中使用queryWrapper

这篇文章主要介绍“mybatisplus怎么在xml的连表查询中使用queryWrapper”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mybatisplus怎么在xml的连表查询中使用query
2023-06-26

MySQL之单表查询、多表查询

一、单表查询:单个表的查询方法及语法顺序需要通过实际例子来熟悉先将表数据创建下:mysql> create database singe_t1; # 建个数据库singe_t1Query OK, 1 row affected (0.01
2023-01-31

多表查询

多表查询:联接查询、子查询、集合运算  联接查询交叉联接:笛卡尔积select * from , 内联接:有条件的联接select * from inner join on --SQLselect * from , where --T
多表查询
2014-11-21

MySQL 多表查询

union 结果集合并使用多个select分别查询不同的表,把多个select查到的记录合并在一起一个select查到m条记录,另一个select查到n条记录,合并之后就是m+n条记录 #查询全校师生的id、name,使用2个select分别从tb_teach
MySQL  多表查询
2017-05-29

MySQL数据库:多表连接查询

多表连接查询注意:使用连接技术建议将表经行重命名!# explain 检索连接是否达标# 内连接 # 语法1from 表1 inner join 表2 on 主键字段=外键字段 [where 条件表达式] # 语法2 from 表1,表2 where 主键字段
2022-01-30

mysql-多表查询

准备工作:准备两张表,部门表(department)、员工表(employee)mysql> create database db2;Query OK, 1 row affected (0.00 sec)mysql> use db2;Dat
2023-01-30
2023-09-01

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录