mybatis-plus多表联合分页查询最佳实践

原文地址:https://blog.csdn.net/nakey_xie/article/details/123263034

前言

网上看了很多关于mp联表分页查询的文章,都没get到想要的东西,综合实际应用场景,把我自己的多表分页查询分享一下,不喜勿喷

方式一(注解方式)

直接上代码:

返回前端展示VO:

mybatis-plus多表联合分页查询最佳实践_第1张图片

mapper定义如下:

public interface JobCaseMapper extends BaseMapper {

//测试联表分页查询

@Select("SELECT j.id,j.job_no,j.client_id,c.case_no,c.script_name from job j " +

"left join job_case c on j.id = c.job_id where id= #{id}")

Page selectJobPage(Page page , @Param("id") String id);

}

调用方法:

@Test

public void testQuery(){

//模拟前端分页请求

Page query =new Page<>(1,10);

Page page = jobCaseMapper.selectJobPage(query,"1");

String pageStr = JSON.toJSONString(page);

System.out.println(pageStr);

}

Page为分页查询mybatis-plus里面的page:

mybatis-plus多表联合分页查询最佳实践_第2张图片

这种方式适合简单的联表分页,比较复杂的条件比较多的我推荐方式二

方式二(XML方式)

先来看定义前端查询参数接收对象:

/**

* @ClassName JobPageQuery

* @Description job分页查询参数

* @Author nakey

* @Date 2022/3/3 19:09

*/

@Data

public class JobPageQuery extends Page {

/**

* ID

*/

private String id;

/**

* 编号

*/

private String caseNo;

}

Page类跟上面的一样:

mybatis-plus多表联合分页查询最佳实践_第3张图片

mapper定义:

//测试联表分页查询XML的方式

IPage selectXmlPage(JobPageQuery jobPageQuery, @Param("query") JobPageQuery query);

其实上面2个参数都是同一个对象、同样的数据,但是mp定义第一个参数一定要是Page,第二个参数是条件参数,由于我把条件参数和分页参数都定义在一个类,所以就是一样的。

xml写法: