明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
  博客园  :: 首页  :: 管理

MyBatis-Plus多表联查

Posted on 2024-06-07 09:20  且行且思  阅读(1895)  评论(0编辑  收藏  举报

一、引依赖

注意: mybatis plus version >= 3.4.0

<dependency>
    <groupId>com.github.yulichang</groupId>
    <artifactId>mybatis-plus-join</artifactId>
    <version>1.2.4</version>
</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