day8 SSM项目实现分页功能

碎碎念

今天上午的主要内容是分页。在没有框架的时候,分页是一个非常麻烦的事,分页一个功能就能写贼多的代码。而现在我们的直接用框架,实现起来就非常地简单。
下午的主要内容就是写简历和学习一下bootstrap,我们组由我负责前端,因为没有什么基础,还是需要去学习一下。
这里为大家推荐一个bootstrap的模板(收费,但不贵)bootstrapmb

SSM项目实现分页功能

本次实现分页的方式:前台选择相对应的操作(如首页、下一页等),点击的同时传递参数到后台,后台通过接受的参数调用相应的方法实现分页。(本次分页基于SSM项目搭建成功的情况下)
SSM项目搭建–数据库的增删改查

  1. 在pom.xml文件中导入pagehelper的包
<dependency>
   <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
</dependency>
  1. 在applicationContext.xml文件中为sqlsessionfactroy加入以下配置。为下面的plugins的property。
    <!-- 3.配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 扫描bean包 使用别名 -->
        <property name="typeAliasesPackage" value="com.suelta.bean"></property>

        <!--配置加载映射文件 UserMapper.xml-->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>

        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <props>
                            <!--设置用的哪个数据库-->
                            <prop key="helperDialect">mysql</prop>
                            <!--设置默认为可以处理页面异常-->
                            <prop key="reasonable">true</prop>
                        </props>
                    </property>
                </bean>
            </array>
        </property>
    </bean>
  1. 在使用pagehelper进行分页之前,我们看看pagehelper的相关属性。这里主要关注size,pageNum,pages,list这几个参数。
    	//当前页  
        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 firstPage;  
        //前一页  
        private int prePage;  
      
        //是否为第一页  
        private boolean isFirstPage = false;  
        //是否为最后一页  
        private boolean isLastPage = false;  
        //是否有前一页  
        private boolean hasPreviousPage = false;  
        //是否有下一页  
        private boolean hasNextPage = false;  
        //导航页码数  
        private int navigatePages;  
        //所有导航页号  
        private int[] navigatepageNums;  
  1. 这一过程我们分三步,因为我们是通过前台传递的参数来确定是哪一页分页和每一页所展示的数据量。所以,(1)我们在Controller层使用page和size来接收前端传来的数据。Controller层调用service层,故将值往下传,(2)并在service层所调用的函数中,加入**PageHelper.startPage(page,size);**即可。(3)最后通过在Controller层使用PageInfo,对其初始化,并传给ModelAndView中即可(是不是很简单)

下面是Controller层的函数
在这里插入图片描述
下面是service层
在这里插入图片描述

	//下面的函数是Controller层
    @RequestMapping("/findAll.do")
    public ModelAndView findAll(@RequestParam(defaultValue = "1")int page, @RequestParam(defaultValue = "4")int size){
        List<Userinfo> userinfos = userService.findAll(page,size);
        PageInfo pageInfo = new PageInfo(userinfos);
        ModelAndView mv = new ModelAndView();
        mv.addObject("pageInfo",pageInfo);
        mv.setViewName("user-list");
        return mv;
    }
    
	//下面的函数是Service层
	    @Override
    public List<Userinfo> findAll(int page,int size) {
        //这里调用startPage进行分页
        PageHelper.startPage(page,size);
        return userDao.findAll();
    }
  1. 下面为前端的页面代码。通过**${pageContext.request.contextPath}/user/findAll.do?page=1&size=5**来实现传值。
    pageInfo.pages代表总页数;
    pageInfo.pageNum代表当前页码;
<li><a href="${pageContext.request.contextPath}/user/findAll.do?page=1&size=5" aria-label="Previous">首页</a></li>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfo.pageNum-1}&size=5">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.pages}" var="pagenum">
   <li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pagenum}&size=5">${pagenum}</a> </li>
</c:forEach>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfo.pageNum+1}&size=5">下一页</a></li>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?page=${pageInfo.pages}&size=5" aria-label="Next">尾页</a></li>
   		

完成上述操作即可完成分页。效果图如下:

在这里插入图片描述如有问题,欢迎留言讨论

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章