1.分页插件的方案?
可以使用mybatis的拦截器机制,在SQL执行前做一个拦截,然后对SQL语句加上limit ,这样所有需要分页的SQL就自动实现分页逻辑了。
2,拦截器实现分页的原理图:
对于以上原理图,主要就是基于拦截器机制,在执行sql语句之前,进行拦截,在你需要查询的语句前,加上limit ?,?
3.案例
需求:客户端传来两个参数:page,rows,实现分页
返回的是数据的总数和查询的数据
1)请求路径: GET请求
2)请求参数:page(当前页码),rows(每页条数)
3)响应结果:必须包含两个内容:总条数xx.getTotal() ,数据集合xx.getList()
3.1添加依赖
com.github.pagehelper pagehelper 3.7.5 com.github.jsqlparser jsqlparser 0.9.1
3.2定义Mybatis核心配置文件添加插件
3.3定义controller类
/* * 关于分页的参数 : * 异步 * 有参page,rows * 有返回值List,total * */ @RequestMapping(value="list",method=RequestMethod.POST) public ResponseEntity queryUserList(@RequestParam("page")Integer page,@RequestParam("rows")Integer rows){ try { PageInfo pageInfo = userService.queryUserList(page, rows); PageResult pageResult = new PageResult(pageInfo.getList(),pageInfo.getTotal()); return ResponseEntity.status(HttpStatus.OK).body(pageResult); } catch (Exception e) { e.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } }
3.4.调用service层
@Servicepublic class UserServiceImpl implements UserService{ @Autowired private UserMapper userMapper; @Override public PageInfoqueryUserList(Integer page, Integer rows) { PageHelper.startPage(page, rows); List list = this.userMapper.select(null); PageInfo pageInfo = new PageInfo (list); return pageInfo; }
3.5,因为单表的操作,这里使用通用Mapper类。调用dao
编写接口继承Mapper即可