MybatisPlus联合分页查询
跟单表分页查询差不多
1.编写查询语句
1 public interface QuestionMapper extends BaseMapper<Question> { 2 @Select("SELECT * FROM question,result WHERE question_id=result_id ") 3 List<QuestionResultPagingVo> getQuestionResultPage(Page page); 4 }
2.编写service
1 @Service 2 public class QuestionServiceImpl implements QuestionService { 3 @Resource 4 private QuestionMapper questionMapper; 5 6 /** 7 * public Page<T> setRecords(List<T> records) { 8 * this.records = records; 9 * return this; 10 * } 11 * records包含查询数据列表,setRecords返回一个简单分页模型 12 * questionMapper.getQuestionResultPage(page)返回一个查询分页查询数据, 13 * 如果Page<QuestionResultPagingVo> pages = new Page<>(1,2); 14 * 那么questionMapper.getQuestionResultPage(pages)就会以一页2个元素大小,返回第一页的数据。 15 * 使用page.setRecords主要是为了使用Page.getTotal()获取共有多少页这个属性 16 * 17 * @param page 18 * @return 19 */ 20 @Override 21 public Page<QuestionResultPagingVo> getQuestionResultPage(Page<QuestionResultPagingVo> page) { 22 return page.setRecords(questionMapper.getQuestionResultPage(page)); 23 } 24 }
本质上是使用MybatisPlus提供的分页插件Page完成的
其实Page<QuestionResultPagingVo> pages = new Page<>(1,2);后再执行questionMapper.getQuestionResultPage(pages);
然后同样可以使用pages.getTotal()获取总条数,Page是个很灵活好用的东西,不用用死了,看看源码分析分析方法
3.controller调用
1 @RequestMapping("/questionResult/page") 2 @ResponseBody 3 public Map<String, Object> resultPage( 4 @RequestParam(defaultValue = "1") Integer page, 5 @RequestParam(defaultValue = "5")Integer limit) { 6 7 Map<String, Object> map = new LinkedHashMap<>(); 8 9 Page<QuestionResultPagingVo> pages = new Page<>(page,limit); 10 11 Page<QuestionResultPagingVo> resultPage = questionService.getQuestionResultPage(pages); 12 if (resultPage.getRecords().size() == 0) { 13 map.put("code", 400); 14 } else { 15 map.put("code", 0); 16 map.put("msg", ""); 17 map.put("count", resultPage.getTotal()); 18 map.put("data", resultPage.getRecords()); 19 } 20 return map; 21 }
附上demo
其实这是个问卷的结果统计,用了layui的分页,还有echarts的图表
源码在github