首页 > 其他分享 >MyBatis-Plus 写 Join 联表查询

MyBatis-Plus 写 Join 联表查询

时间:2023-04-04 15:14:08浏览次数:41  
标签:Join class UserAddressDO t1 mybatis Plus MyBatis plus id

效果展示

背景

众所周知,Mybatis Plus 封装的 mapper 不支持 join,如果需要支持就必须自己去实现。但是对于大部分的业务场景来说,都需要多表 join,要不然就没必要采用关系型数据库了。

使用方法

仓库地址

安装

  • Maven
<dependency>
    <groupId>com.github.yulichang</groupId>
    <artifactId>mybatis-plus-join-boot-starter</artifactId>
    <version>1.4.4</version>
</dependency>
  • Gradle
implementation 'com.github.yulichang:mybatis-plus-join-boot-starter:1.4.4'

或者 clone 代码到本地执行 mvn install,再引入以上依赖。

注意:mybatis plus version >= 3.4.0。

使用

  • mapper继承MPJBaseMapper (必选)
  • service继承MPJBaseService (可选)
  • serviceImpl继承MPJBaseServiceImpl (可选)

使用效果示例

class test {
    @Resource
    private UserMapper userMapper;

    void testJoin() {
        //和Mybatis plus一致,MPJLambdaWrapper的泛型必须是主表的泛型,并且要用主表的Mapper来调用
        MPJLambdaWrapper<UserDO> wrapper = new MPJLambdaWrapper<UserDO>()
                .selectAll(UserDO.class)//查询user表全部字段
                .select(UserAddressDO::getTel)//查询user_address tel 字段
                .selectAs(UserAddressDO::getAddress, UserDTO::getUserAddress)//别名 t.address AS userAddress
                .select(AreaDO::getProvince, AreaDO::getCity)
                .leftJoin(UserAddressDO.class, UserAddressDO::getUserId, UserDO::getId)
                .leftJoin(AreaDO.class, AreaDO::getId, UserAddressDO::getAreaId)
                .eq(UserDO::getId, 1)
                .like(UserAddressDO::getTel, "1")
                .gt(UserDO::getId, 5);

        //连表查询 返回自定义ResultType
        List<UserDTO> list = userMapper.selectJoinList(UserDTO.class, wrapper);

        //分页查询 (需要启用 mybatis plus 分页插件)
        Page<UserDTO> listPage = userMapper.selectJoinPage(new Page<>(2, 10), UserDTO.class, wrapper);
    }
}

对应sql:

SELECT  
    t.id, t.name, t.sex, t.head_img, 
    t1.tel, t1.address AS userAddress,
    t2.province, t2.city 
FROM 
    user t 
    LEFT JOIN user_address t1 ON t1.user_id = t.id 
    LEFT JOIN area t2 ON t2.id = t1.area_id 
WHERE (
    t.id = ? 
    AND t1.tel LIKE ? 
    AND t.id > ?)

标签:Join,class,UserAddressDO,t1,mybatis,Plus,MyBatis,plus,id
From: https://www.cnblogs.com/jockming/p/17286447.html

相关文章

  • MyBatis的执行流程及核心组件
    MyBatis的执行流程及核心组件如图所示。基本组件介绍Configuration用于描述MyBatis的主配置信息,其他组件需要获取配置信息时,直接通过Configuration对象获取。除此之外,MyBatis在应用启动时,将Mapper配置信息、类型别名、TypeHandler等注册到Configuration组件中,其他组件需要这......
  • MyBatisPlus——条件查询——null值处理与查询投影
    DQL编程控制条件查询——设置查询条件格式一:常规格式 //方式一:按条件查询 QueryWrapperqw=newQueryWrapper(); //10岁到30岁之间的用户 qw.gt("age",10); qw.lt("age",30); List<User>users=userDao.selectList(qw); System.out.println(users);格式......
  • element Plus 中el-tooltip 和 el-popover超出宽度显示文字提示 否则不提示
    说明:设置固定宽度。文字超出宽度,用...显示。鼠标悬停到文字上,用el-tooltip显示全部文字内容如果文字未超出宽度,el-tooltip、el-popover隐藏。html:1<el-tooltip:content="node.label"placement="bottom"effect="light":disabled="isShowTooltip">2<span......
  • 三星970EVO Plus及NvMe系列固态硬盘对比测试
    1、三星NVMe固态系列什么是NvMe固态?NVMe的优势,对比于SATASSD使用PCIe总线连接,实际传输速度将超过1000MB/s。三星980PRONVMeM.2三星970EVOPlusNVMeM.2三星980NVMeM.2三星PM981aPCIENVME2、970EVOPlus选购970EVOPLUS(这一次加量不加价)理论上2021,5月产的为旧版本......
  • MyBatis插件原理解析(转载)
    前言大多数框架都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外。在Mybatis中最出名的就是PageHelper分页插件,下面我们先来使用一下这个分页插件。如何集成分页插件Spring-Boot+Mybatis+PageHelper引入pom依赖<dependency><groupId>com.github.pagehelper<......
  • 如何通过MyBatis的插件功能来实现分表功能
    前言之前项目中由于几张表的数据量特别的大,在查询的时候特别耗时,所以决定对其进行分表处理。考虑到项目中用的MyBatis作为ORM框架,所以便决定使用它的插件功能来实现动态的替换查询的表来实现分表功能。功能实现整体的目录结构如下TableShard:注解,用来标记需要分表的接口或者......
  • mybatis调用存储过程,并返回out参数
        ......
  • Mybatis-Plus代码生产器
    【问题描述】在微服务的开发过程中,每次新创建一个微服务项目的时候,都需要手工添加controller、service、entity和mapper文件夹和文件时会比较麻烦,并且增加不少的工作量。是否有一个模块,可以自动生成对应的目录和文件呢?真的有这样的代码生产器文件:一、使用之前先确认POM文件中下......
  • FOR ALL ENTRIES IN 与 INNER JOIN 内表
    1、区别FORALLENTRIESIN与INNERJOIN内表,目的都是通过内表找数据库表与之对应的数据,但是有区别。1.1、写法FORALLENTRIESIN"--------------------@斌将军--------------------SELECTacdoca~rldnr,"总账会计中的分类账acdoca~rbukrs,"公司代码acdo......
  • SQL: Join的用法
    在SQL中,JOIN是将两个或多个表中的行连接起来的方法。JOIN的基本思想是将两个表中的数据按照某些条件进行匹配,然后将匹配的结果合并成一个新的表。常见的JOIN类型有INNERJOIN、LEFTJOIN、RIGHTJOIN和FULLOUTERJOIN。INNERJOININNERJOIN是最常用的JOIN类型,它......