MyBatis-Plus连表查询

pclin
12
2025-01-09

MyBatis-Plus-Join(简称 MPJ)是一个 MyBatis-Plus 的增强工具,它在 MyBatis-Plus 的基础上提供增强功能,以简化开发并提高效率。

  • 无侵入:引入 MPJ 不会对现有工程产生影响,只提供增强功能,顺畅无缝

  • 无感引入:支持 MP 风格的查询,无需额外学习成本

  • 兼容 MP 的别名、逻辑删除、枚举列、TypeHandle 等特性

  • 支持注解形式的一对一、一对多和连表查询

#连表查询

以 APP 模块的用户文章收藏表 app_article_collect 和文章表 app_article 为例,查询用户收藏列表时,需要关联显示对应的文章标题。

#① 表结构如下

#② 连表查询如下

@Operation(summary = "分页查询", description = "分页查询")
@GetMapping("/page")
public R getAppArticleCollectPage(@ParameterObject Page page) {
    MPJLambdaWrapper<AppArticleCollectEntity> wrapper = new MPJLambdaWrapper<AppArticleCollectEntity>()
            .selectAll(AppArticleCollectEntity.class)
            .select(AppArticleEntity::getTitle)
            .leftJoin(AppArticleEntity.class, AppArticleEntity::getId, AppArticleCollectEntity::getArticleId)
            .eq(AppArticleCollectEntity::getUserId, SecurityUtils.getUser().getId());
    return R.ok(appArticleCollectService.selectJoinListPage(page, AppArticleCollectEntity.class, wrapper));
}

  • 自动生成 SQL,实际执行的 SQL 如下

SELECT
	t.id,
	t.user_id,
	t.article_id,
	t.create_by,
	t.create_time,
	t.update_by,
	t.update_time,
	t.del_flag,
	t1.title
FROM
	app_article_collect t
	LEFT JOIN app_article t1 ON t1.id = t.article_id
	AND t1.tenant_id = 1
WHERE
	t.del_flag = '0'
	AND t1.del_flag = '0'
	AND ( t.user_id = 1 )
	AND t.tenant_id = 1
	LIMIT 10

#进阶使用

请参考mybatisplusjoin 官方文档

动物装饰