PageHelper的使用和一些错误总结

    技术2022-07-10  117

    使用PageHelper犯的错

    以为pagehelper很简单,直接将全部查询结果全部给与pageInfo就行了,结果犯了大错,,分页结果显示不出来,只是将全部结果显示出来。

    解决方案:将SQL查询语句的返回值放在pageHelper.startPage(pageNum,pageSize)后面

    PageHelper.startPage(pageNum, pageSize); List<Video> videos = videoService.findAll(); PageInfo pageInfo = new PageInfo(videos);
    pageHelper一些参数:
    public class PageInfo<T> implements Serializable { private static final long serialVersionUID = 1L; //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private int size; //由于startRow 和endRow 不常用,这里说个具体的用法 //可以在页面中"显示startRow 到endRow 共size 条数据" //当前页面第一个元素在数据库中的行号 private int startRow; //当前页面最后一个元素在数据库中的行号 private int endRow; //总记录数 private long total; //总页数 private int pages; //结果集 private List<T> list; //前一页 private int prePage; //下一页 private int nextPage; //是否为第一页 private boolean isFirstPage = false; //是否为最后一页 private boolean isLastPage = false; //是否有前一页 private boolean hasPreviousPage = false; //是否有下一页 private boolean hasNextPage = false; //导航页码数 private int navigatePages; //所有导航页号 private int[] navigatepageNums; //导航条上的第一页 private int navigateFirstPage; //导航条上的最后一页 private int navigateLastPage; }

    pagehelper的使用

    第一步:导入依赖
    <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.10</version> </dependency>
    第二步:配置到spring整合配置文件applicationContext.xml中或者mybatis配置文件中
    <!--配置sqlsessionFactoryBean--> <!--在基础的 MyBatis 用法中,是通过 SqlSessionFactoryBuilder 来创建 SqlSessionFactory 的,而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来创建。--> <bean name="sessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <!-- <property name="configLocation" value="classpath:mybatis-config.xml.bak"></property>--> <property name="plugins"> <set> <bean class="com.github.pagehelper.PageInterceptor"> <property name="properties"> <props> <!--配置数据库--> <prop key="helperDialect">mysql</prop> <!--当pageNum<1,默认查询一页 当pageNum>totalpage时,查最后一页--> <prop key="reasonable">true</prop> <!--支持接口传值--> <prop key="supportMethonsArguments">true</prop> </props> </property> </bean> </set> </property> </bean>
    第三步:controller层直接调用
    @RequestMapping("list") public String list(@RequestParam(value = "pageNum",required = false,defaultValue = "1") Integer pageNum, @RequestParam(value = "pageSize",required = false,defaultValue = "3") Integer pageSize, Model model){ PageHelper.startPage(pageNum, pageSize); List<Video> videos = videoService.findAll(); for (Video video : videos) { System.out.println(video); } PageInfo pageInfo = new PageInfo(videos); model.addAttribute("pageInfo",pageInfo); return "/list.jsp"; }

    自动的对PageHelper.startPage 方法下的第一个sql 查询进行分页 PageHelper.startPage(pageNum,pageSize); //紧跟着的第一个select 方法会被分页 List videos = videoService.findAll();

    也就是说再controller层PageHelper.startPage(pageNum,pageSize);语句后一定是紧跟查询语句。

    Processed: 0.013, SQL: 9