MybatisPlus多表连表查询

这篇具有很好参考价值的文章主要介绍了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中添加依赖

<dependency>
    <groupId>com.github.yulichang</groupId>
    <artifactId>mybatis-plus-join-boot-starter</artifactId>
    <version>1.4.7.2</version>
</dependency>
二、修改Mapper

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

@Mapper
public interface UserMapper extends MPJBaseMapper<UserDO> {

}
三、测试
简单的连表查询

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

public class SampleTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelect() {
        MPJLambdaWrapper<User> wrapper = JoinWrappers.lambda(User.class)
                .selectAll(User.class)//查询user表全部字段
                .select(Address::getCity, Address::getAddress)
                .leftJoin(Address.class, Address::getUserId, User::getId);

        List<UserDTO> 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<User> 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<UserDTO> 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<User> wrapper = JoinWrappers.lambda(User.class)
                .selectCollection(AddressDO.class, UserDTO::getAddressList)
                .leftJoin(Address.class, Address::getUserId, User::getId);
		
        List<UserDTO> list= userMapper.selectJoinList(UserDTO.class, wrapper);
    }
}
一对一查询

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

public class SampleTest {

    @Autowired
    private UserMapper userMapper;

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

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

四、总结

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

到了这里,关于MybatisPlus多表连表查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mybatis-plus-join连表查询

    目录 一、数据库DDL 二、JAVA代码 三、pom依赖和配置文件               最近发现一个好玩的框架,我们知道mybatis-plus在连表查询上是不行的,如果需要连表查询,那么我们就得乖乖的去写xml文件了,但是今天发现一个新的框架 mybatis-plus-join。它既包含了mybatis-plus的所有优

    2024年02月11日
    浏览(43)
  • MyBatis与MyBatisPlus的区别

    MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具 ,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高 效率而生。 官网一共有两个:https://mybatis.plus/ 或 https://mp.baomidou.com/ 。 Mybatis-Plus是由baomidou(苞米豆)组织开发并且开源的,截止写博客时间,该组织共17人。 详细步骤

    2024年02月06日
    浏览(38)
  • 【mybatis和mybatisplus的区别】

    MyBatis 和 MyBatis Plus 都是 Java 语言的持久层框架,但它们之间有以下几个区别: MyBatis 是一个基于 XML 配置文件和 SQL 语句的 ORM 框架,提供了数据持久化的基本功能,如 SQL 映射、缓存管理等。而 MyBatis Plus 在 MyBatis 的基础上进行了扩展,提供了更加丰富的功能特性,如分页插

    2024年02月11日
    浏览(47)
  • MyBatis-Plus 引入依赖导致的Error creating bean和java.lang.NoClassDefFoundError: com/baomidou/mybatisplus问题

     使用mybatis-plus出现的一些问题记录。 问题错误截图 问题原因: 依赖冲突 项目主pom文件中引入了mybatis-plus-boot-start依赖,版本为 3.5.3 业务包中引入mybatis-plus代码生成器依赖版本为 3.4.1 导致mybatis-plus-core核心包存在两个版本,导致冲突   解决办法 修改业务包中mybatis-plus代码

    2024年02月09日
    浏览(51)
  • mybatisPlus查询排除某个字段

    在 MyBatis Plus 中,可以使用 @TableField 注解来排除某个字段在查询中的使用。@TableField 注解提供了一些属性可以用于指定字段的行为,其中 exist 属性可以控制字段是否在 SQL 语句中出现。 以下是一个示例代码,展示如何使用 @TableField 注解排除某个字段在查询中的使用: 在上述

    2024年02月12日
    浏览(58)
  • 实战系列(三)| Mybatis和MybatisPlus区别,包含详细代码

    MyBatis 和 MyBatisPlus 都是基于 MyBatis 的扩展库,用于简化 MyBatis 的开发。MyBatisPlus 是在 MyBatis 的基础上进行封装,提供了一套通用的 CRUD 操作接口,而 MyBatis 是一个底层的持久层框架。 MyBatis 是一个持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有

    2024年02月09日
    浏览(36)
  • mybatisplus 使用mybatis中的配置、mapper配置文件

    即在和application.properties同级目录下的mybatis目录中创建mybatis的配置文件mybatis-config.xml 其内容如下 方式一的目录结构: 1、在application.properties中再添加一行mapper映射地址 修改mapper映射的配置文件路径,这次不用在和mapper接口的路径一一对应,只需要在resource/mybatis/mapper/UserMa

    2023年04月08日
    浏览(40)
  • MyBatisPlus-QueryWrapper多条件查询以及修改

    大于 例: gt(\\\"age\\\", 18) → age 18 ge 大于等于 = 例: ge(\\\"age\\\", 18) → age = 18 lt 小于 例: lt(\\\"age\\\", 18) → age 18 le 小于等于 = 例: le(\\\"age\\\", 18) → age = 18 isNUll 字段 IS NULL 例: isNull(\\\"name\\\") → name is null isNotNull 字段 IS NOT NULL 例: isNotNull(\\\"name\\\") → name is not null eq 等于 = 例: eq(\\\"name\\\", \\\"老王\\\") → name = \\\'老

    2024年02月16日
    浏览(38)
  • MyBatisPlus入门篇2 - 条件查询、查询投影、查询条件、id生成策略、多记录操作、逻辑删除

    目录 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合。 封装User模型的查询条件,这里age是具有上下限的,User类里面的age作为下限,这里的age2作为上限。 domain.query.UserQuery.java ①if语句控制 ②条件参数控制 查询结果包含模型类中的部分属性

    2024年02月09日
    浏览(39)
  • SpringBoot框架——8.MybatisPlus常见用法(常用注解+内置方法+分页查询)

    1.MybatisPlus常用注解:         1.1 当数据库、表名和字段名和实体类完全一致时无需加注解,不一致时:         @TableName指定库名         @TableId指定表名         @TableField指定字段名         1.2 自增主键:         @TableId(type=IdType.AUTO)         private Long id;        

    2024年04月26日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包