mybatis-plus自带了一个分页插件Interceptor,帮我们封装好了分页的功能,节省大量的开发时间。
我们可以看一下mybatis-plus 的官方文档
记录一下我是怎么去使用mybatis-plus分页插件的使用的
- 在pom文件中引入mybatis-plus的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
- 创建mybatis-plus分页插件的配置类
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//@MapperScan("**.mapper") //官方文档说要加MapperScan
//主要是扫描到mapper包下的接口交给spring管理,我这里在启动类上添加过了,这里就不加了
public class MybatisPlusConfig {
/**
* mybatis-plus自带的分页插件
* @return
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
}
- UserMapper.class定义查询接口,mapper.xml写查询语句,当然你也可以条件分页查询,在page参数后添加额外的条件即可
public interface UsereMapper extends BaseMapper<User> {
/**
* 分页查询
* @param page
* @return
*/
IPage<User> selectPage(Page<User> page);
}
- UserMapper.xml,等同于编写一个普通 list 查询,mybatis-plus 自动替你分页
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gxuwz.mapper.UserMapper">
<!-- 通用查询映射结果 -->
<resultMap id="resultMap" type="com.gxuwz.entity.User">
<result column="id" property="id"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="sex" property="sex"/>
<result column="is_deleted " property="is_deleted "/>
</resultMap>
<select id="selectPage" resultMap="resultMap">
SELECT
*
FROM
app_update
WHERE
is_deleted = 0
</select>
</mapper>
- 实现,我这里按实际的业务要求来实现的,前端传来 current当前页,size每页显示多少条数据
定义一个返回给前端的VO对象,PageVo,返回当前页的数据data,和总记录的条数
public PageVo<User> selectPage(int current, int size) {
Page page = new Page(current, size);
IPage iPage = appUpdateMapper.selectPage(page);
PageVo<User> pageVo = new PageVo<>();
pageVo.setData(iPage.getRecords());
pageVo.setTotal(iPage.getTotal());
return pageVo;
}
PageVo 和前端的交互对象
@Data
public class PageVo<T> {
/**
* 分页的数据
*/
@ApiModelProperty(value = "分页的数据")
private List<T> data;
/**
* 数据总条数
*/
@ApiModelProperty(value = "总记录条数")
private Long total;
}