基本原理
sqlsessionFactory -> sqlSession-> executor -> mybatis sql statement
通过mybatis plugin 增加拦截器,然后拼装分页
使用方法
一、引入依赖
<!-- 分页插件依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
二、增加配置文件
import com.github.pagehelper.PageHelper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
@Configuration
public class MyBatisConfig {
@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties p = new Properties();
p.setProperty("offsetAsPageNum","true");
p.setProperty("rowBoundsWithCount","true");
p.setProperty("reasonable","true");
pageHelper.setProperties(p);
return pageHelper;
}
}
三、包装类
PageHelper.startPage(page, size);
PageInfo<VideoOrder> pageInfo = new PageInfo<>(list);
例如:某个视频接口
@RestController
@RequestMapping("/api/v1/video")
public class VideoController {
@Autowired
private VideoService videoService;
/**
* 分页接口
*
* @param page 当前第几页,默认是第一页
* @param size 每页显示几条
* @return
*/
@GetMapping("page")
public Object pageVideo(@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "3") int size) {
PageHelper.startPage(page, size); // 进行分页
List<Video> list = videoService.findAll(); //从数据库获取查询的所有结果
PageInfo<Video> pageInfo = new PageInfo<>(list);
Map<String, Object> data = new HashMap<>();
data.put("total_size", pageInfo.getTotal());//总条数
data.put("total_page", pageInfo.getPages());//总页数
data.put("current_page", page);//当前页
data.put("data", pageInfo.getList());//数据
return data;
}
}