当前位置:   article > 正文

mybatis-plus中分页(借助pagehelper插件)_mybatisplus pageinfo

mybatisplus pageinfo

mybatis-plus中分页(借助pagehelper插件,属于mybatis中分页,需要自定义sql语句)


springboot项目导入的依赖:
		<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

普通maven项目:

	<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>4.2.1</version>
    </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

示例:

//Controlller API接口:
	@ApiOperation("系统日志-分页查询")
	@PostMapping("/page")
	public R<PageInfo<SysLog>> page(SysLogDTO dto, Query query){
		int page = query.getCurrent() == null ? 1 : query.getCurrent();
		int pageSize = query.getSize() == null ? 10 : query.getSize();
		PageInfo<SysLog> logPageInfo = logService.selectPage(dto, page, pageSize);
		return R.data(logPageInfo);
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

首先了解一下Query这个对象,它是一个我应用框架中封装好的对象。我们可以看到 Query 有四个字段,分别代表 当前页 , 每页的数量 , 排序的字段名 , 排序方式。如果我们需要查第 2 页,并且每页数量为 2 条,只需要传入对应的属性值current=2和size=2

@Data @Accessors(chain = true) 
@ApiModel(description = "查询条件") 
public class Query { 
	/*** 当前页 */ 
 	@ApiModelProperty(value = "当前页") 
 	private Integer current; 

	/*** 每页的数量 */ 
 	@ApiModelProperty(value = "每页的数量") 
	private Integer size; 
	
	/*** 排序的字段名 */ 
	@ApiModelProperty(hidden = true) 
 	private String ascs; 
 	
 	/*** 排序方式 */ 
	@ApiModelProperty(hidden = true) 
 	private String descs; 
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

这里的一个高明之处:在service里面不是直接调用mapper中提供的一些方法,而是自定义了一个selectPage(SysLog sysLog)方法,它可以有一些条件判断,连表查询sql语句;我们的分页语句limit是由分页插件帮我们加的,不影响

//Service层
@Service
@AllArgsConstructor
public class SysLogServiceImpl extends ServiceImpl<SysLogMapper, SysLog>  implements ISysLogService {

	private SysLogMapper mapper;

	
	@Override
	public PageInfo<SysLog> selectPage(SysLogDTO sysLogDTO, int page, int pageSize) {
		PageHelper.startPage(page, pageSize);
		//这里通过调用PageHelper的静态方法,设置了PageHelper的起始页以及每页的数量
		List<SysLog> list = mapper.selectPage(sysLogDTO);
		PageInfo<SysLog> pageInfo = new PageInfo<>(list);
		//这里用查询出来的数据初始化PageInfo对象,由PageInfo自动帮我们完成分页数据的采集。这里最后得到的pageInfo里面存储着的便是我们想要获取的该页的数据。
		return pageInfo;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
//mapper层
public interface SysLogMapper extends BaseMapper<SysLog> {
	List<SysLog> selectPage(SysLogDTO logDTO);
	int add(SysLog log);
}

//mapper.xml文件
 <!-- 通用查询映射结果 -->
    <resultMap id="LogResultMap" type="org.springblade.iot.entity.SysLog">
        <id column="id" property="id"/>
        <result column="user_name" property="userName"/>
        <result column="ip" property="ip"/>
        <result column="type" property="type"/>
        <result column="text" property="text"/>
        <result column="create_time" property="createTime"/>
        <result column="param" property="param"/>
    </resultMap>
    <select id="selectPage" parameterType="org.springblade.iot.dto.SysLogDTO" resultMap="LogResultMap">
        select * from sys_log
        <where>
            <if test="userName!=null and userName!=''">
                and user_name like concat('%',#{userName},'%')
            </if>
            <if test="type!=null and type!=''">
                and `type` like concat('%',#{type},'%')
            </if>
        </where>
        order by create_time desc
    </select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

postman调用截图:
在这里插入图片描述

讲解

在这里插入图片描述
仔细一看发现,pageHelper插件会拦截第一个select语句,进行总数统计以及自动加入物理分页limit语句,返回的list集合也不是普通的list,而是Page对象。该Page对象是ArrayList的子类,此处是用父类接收子类对象。
在这里插入图片描述
在这里插入图片描述
然后初始化这个PageInfo对象的时候,会向下转型;给各属性进行赋值;
在这里插入图片描述
在这里插入图片描述
在测试中我们发现,第二个select语句并没有进行拦截,后续的setList方法,只是将pageInfo对象中的list属性进行重新赋值(这一点我们可以利用进行查出来的数据进行处理重新封装,进行赋值)。

拓展:
在这里插入图片描述

自定义分页,可以根据PageHelper.startPage()所返回的Page对象,获取total总数,以及list内容对象进行重新封装返回给前端;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/993870
推荐阅读
相关标签
  

闽ICP备14008679号