原文地址:https://blog.csdn.net/nakey_xie/article/details/123263034
前言
网上看了很多关于mp联表分页查询的文章,都没get到想要的东西,综合实际应用场景,把我自己的多表分页查询分享一下,不喜勿喷
方式一(注解方式)
直接上代码:
返回前端展示VO:
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
}
调用方法:
@Test
public void testQuery(){
//模拟前端分页请求
Page
Page
String pageStr = JSON.toJSONString(page);
System.out.println(pageStr);
}
Page为分页查询mybatis-plus里面的page:
这种方式适合简单的联表分页,比较复杂的条件比较多的我推荐方式二
方式二(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类跟上面的一样:
mapper定义:
//测试联表分页查询XML的方式
IPage
其实上面2个参数都是同一个对象、同样的数据,但是mp定义第一个参数一定要是Page,第二个参数是条件参数,由于我把条件参数和分页参数都定义在一个类,所以就是一样的。
xml写法:
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 1=1
and c.job_no like "%"#{query.caseNo}"%"
and c.create_time =]]> #{query.startTime}
and c.create_time #{query.endTime}
ORDER BY c.create_time DESC
方法调用:
/**
* @Description xml的方式联表分页查询
* @Author nakey
* @Date 2021/11/19 14:05
* @param
* @return void
*/
@Test
public void testXmlQuery(){
//模拟前端传输数据:
JobPageQuery query = new JobPageQuery();
//当前页
query.setCurrent(1);
//每页数量
query.setSize(10);
//查询参数
query.setId("123");
query.setCaseNo("no1");
IPage
String pageStr = JSON.toJSONString(page);
System.out.println(pageStr);
}
总结
以上是我自己总结的2种方式,代码测试是可以的,希望可以帮到大家。