使用Mybatis-plus-join做多表查询

使用Mybatis-plus-join做多表查询

我们做多表查询都是要自己写sql的,还是比较麻烦的,下面介绍一种不用自己写sql的方式来完成多表查询。

这个第三方工具是一个大佬封装的一个jar包,即mybatis-plus-join架包,这个架包可以支持MyBatis-Plus的多表联查。

官网如下:https://mybatisplusjoin.com/

或者你看这个博主写的也行:https://blog.csdn.net/weixin_39555954/article/details/128217887

快速入门的使用

一、引依赖

注意:要求mybatis plus version >= 3.4.0

<dependency>
    <groupId>com.github.yulichanggroupId>
    <artifactId>mybatis-plus-joinartifactId>
    <version>1.2.4version>
dependency>

二、使用方法

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

三、(实战)多表查询

MPJLambdaWrapper<Map> mpjLambdaWrapper = new MPJLambdaWrapper();
mpjLambdaWrapper.select(ChatRecord::getId,ChatRecord::getRedMoney)
    .select(OfShopMembers::getUsablePoint)
    .select(ChatMultiList::getName)
	.leftJoin(OfShopMembers.class,OfShopMembers::getId,ChatRecord::getId)
	.leftJoin(ChatMultiList.class,ChatMultiList::getId,ChatRecord::getMultiId)
	.eq(ChatRecord::getMemberId,3213);
List list = chatRecordMybatisJoinMapper.selectJoinList(Map.class, mpjLambdaWrapper);

对应查询语句

SELECT 
	t.id,
	t.red_money,
	t1.username,
	t2.name 
FROM 
	chat_record t 
LEFT JOIN of_shop_members t1 ON (t1.id = t.id) 
LEFT JOIN chat_multi_list t2 ON (t2.id = t.multi_id) 
WHERE 
	(t.member_id = 3213)

参数说明
1、select:表示查询的指定字段,一个select只能查一个表的
2、leftJoin:
第一个参数: 参与连表的实体类class
第二个参数: 连表的ON字段,这个属性必须是第一个参数实体类的属性
第三个参数: 参与连表的ON的另一个实体类属性
3、默认主表别名是t,其他的表别名以先后调用的顺序使用t1,t2,t3…

四、(实战)多表分页查询

MPJLambdaWrapper<Map> mpjLambdaWrapper = new MPJLambdaWrapper();
        mpjLambdaWrapper.select(ChatRecord::getId,ChatRecord::getRedMoney)
            .select(OfShopMembers::getUsablePoint)
            .select(ChatMultiList::getName)
            .leftJoin(OfShopMembers.class,OfShopMembers::getId,ChatRecord::getId)
            .leftJoin(ChatMultiList.class,ChatMultiList::getId,ChatRecord::getMultiId)
            .eq(ChatRecord::getMemberId,3213)
            .orderByDesc(ChatRecord::getAddTime);
        Page page = new Page(1,2);
        IPage<Map> mapIPage = chatRecordMybatisJoinMapper.selectJoinPage(page, Map.class, mpjLambdaWrapper);

对应查询语句

SELECT 
	t.id,
	t.red_money,
	t1.usable_point,
	t2.name 
FROM 
	chat_record t 
LEFT JOIN of_shop_members t1 ON (t1.id = t.id) 
LEFT JOIN chat_multi_list t2 ON (t2.id = t.multi_id)
WHERE 
	(t.member_id = 3213) 
ORDER BY 
	t.add_time 
DESC 
LIMIT 2

我的测试:

一、引入依赖

这里我们测试的项目使用的是3.4.1的mybatis-plus-boot-starter

使用Mybatis-plus-join做多表查询_第1张图片

我们进去看看里面指定的mybatis-plus的版本:

使用Mybatis-plus-join做多表查询_第2张图片

看到是3.4.1版本的mybatis-plus,所以可以放心引入依赖了。

引入好后如下:

使用Mybatis-plus-join做多表查询_第3张图片

二、建表

我们新建三个表用来演示:

这三个表如下:

使用Mybatis-plus-join做多表查询_第4张图片

使用Mybatis-plus-join做多表查询_第5张图片

使用Mybatis-plus-join做多表查询_第6张图片

三、新建实体类

使用Mybatis-plus-join做多表查询_第7张图片

使用Mybatis-plus-join做多表查询_第8张图片

使用Mybatis-plus-join做多表查询_第9张图片

使用Mybatis-plus-join做多表查询_第10张图片

这个DTO里面写你要多表查询的全部数据。

四、新建dao层的接口

使用Mybatis-plus-join做多表查询_第11张图片

使用Mybatis-plus-join做多表查询_第12张图片

使用Mybatis-plus-join做多表查询_第13张图片

五、我们直接测试

测试一:多表查询

你可以把下面的测试代码当作service层的代码。

使用Mybatis-plus-join做多表查询_第14张图片

结果:

使用Mybatis-plus-join做多表查询_第15张图片

我们修改一下查询条件,看看结果:

使用Mybatis-plus-join做多表查询_第16张图片

结果:

使用Mybatis-plus-join做多表查询_第17张图片

测试二:多表分页查询

使用Mybatis-plus-join做多表查询_第18张图片

结果:

使用Mybatis-plus-join做多表查询_第19张图片

数据库我们执行sql的结果如下(下面的这个sql执行的时候是没有带分页的limit的):

使用Mybatis-plus-join做多表查询_第20张图片

看到,两个一组,第一组里面就是id为4和id为5的数据。所以测试完全正确。

但是要注意:这里之前是配置了分页插件的,要是没有配置分页插件,上面的执行结果不会有分页效果的。

使用Mybatis-plus-join做多表查询_第21张图片

测试三:多表分页查询且自定义别名

使用Mybatis-plus-join做多表查询_第22张图片

结果:

使用Mybatis-plus-join做多表查询_第23张图片

测试四:多表查询分页且不把数据封装到实体类里面

使用Mybatis-plus-join做多表查询_第24张图片

结果:

使用Mybatis-plus-join做多表查询_第25张图片

测试五:多表分页查询,不封装到实体类,自定义别名

使用Mybatis-plus-join做多表查询_第26张图片

结果:

使用Mybatis-plus-join做多表查询_第27张图片

你可能感兴趣的:(mybatis)