
假分是得到数据集合后在去过滤.这个就是假分..所以足球说的就不确切了..得到的数据集合过滤和显示是可以在jsp页面实现也是可以在javabean中实现的..这种得到数据集合后再去分页的方法是假分.
分页其实就只有真分和假分.怎么实现就在于你真分就要在构在sql语句时去费功夫..而假分就是要在代码中下功夫..侧重点不同.性能不同..如果数据量大的话你的假分页就会把你的系统down掉.真分的行嫩个会很好,但是不容易抽象成一种公用的方法..假分页在数据量不大的情况下还是比较好用.可以抽象成一个公用方法..
就是这些区别..根据你的业务需求来区分吧..MVC只是一个规范..分页是一个方法..两个不搭嘎的...
1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示。
2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数据并显示。
对于数据量并不大的简单的管理系统而言,第一种实现方法相对来说容易使用较少的代码实现分页这一功能,本文也正是为大家介绍这种方法:
一、MyBatis数据表配置文件:
复制代码
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper
3 PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
4 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
5 <mapper namespace="ec.help.dao.UserDao">
6
7 <resultMap type="ec.help.bean.User" id="userResult" >
8 <id column="id" javaType="string" />
9 <result column="username" javaType="string" />
10 <result column="password" javaType="string" />
11 </resultMap>
12
13 <sql id="userColumn">id, username, password</sql>
14
15 <select id="getUser" parameterType="map" resultType="ec.help.bean.User" >
16 select * from User where username=#{0} and password=#{1}
17 </select>
18
19 <select id="getAllUser" parameterType="map" resultType="ec.help.bean.User" >
20 select * from User
21 </select>
22
23 <!-- 分页使用SQL -->
24 <select id="getUserByPage" resultType="ec.help.bean.User" >
25 select * from user limit #{0},#{1}
26 </select>
27
28 <insert id="addUser" parameterType="ec.help.bean.User">
29 insert into User(id,username,password) values(#{id},#{username},#{password})
30 </insert>
31
32
33 <delete id="deleteUser" parameterType="String">
34 delete from User where id=#{id}
35 </delete>
36
37 <select id="showUser" parameterType="String" resultType="ec.help.bean.User" >
38 select * from User where id=#{id}
39 </select>
40
41 <update id="updateUser" parameterType="map">
42 update User set username=#{0},password=#{1} where id=#{2}
43 </update>
44 </mapper>
复制代码
SQL中传入的第一个参数为开始的行数,第二个参数为数据条数。
二、Controller中逻辑实现:
复制代码
1 @Value("#{configProperties['userPageSize']}")
2 private String userPageSize
3
4 @RequestMapping("/listUser.do")
5 public ModelAndView listUser(String page,Model model){
6
7 //每页显示的条数
8 int pageSize = Integer.parseInt(userPageSize)
9
10 List<User>users = new ArrayList<User>()
11 users = this.userService.getAllUser()
12
13 //查到的总用户数
14 model.addAttribute("userNum", users.size())
15
16 //总页数
17 int pageTimes
18 if(users.size()%pageSize == 0)
19 {
20 pageTimes = users.size()/pageSize
21 }else
22 {
23 pageTimes = users.size()/pageSize + 1
24 }
25 model.addAttribute("pageTimes", pageTimes)
26
27 //页面初始的时候page没有值
28 if(null == page)
29 {
30 page = "1"
31 }
32
33 //每页开始的第几条记录
34 int startRow = (Integer.parseInt(page)-1) * pageSize
35 users = this.userService.getUserByPage(startRow, pageSize)
36
37 model.addAttribute("currentPage", Integer.parseInt(page))
38 model.addAttribute("users", users)
39
40 return new ModelAndView("user/listUser")
41 }
复制代码
三、分页页面文件:
复制代码
1 <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
2 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
3 <div class="pagging">
4 <div class="left">共${userNum}条记录</div>
5 <div class="right">
6 <c:if test="${currentPage == 1}">
7 <span class="disabled"><<前一页</span>
8 </c:if>
9 <c:if test="${currentPage != 1}">
10 <a href="listUser.do?page=${currentPage-1}"><<前一页</a>
11 </c:if>
12 <c:if test="${currentPage == 1}">
13 <span class="current">1</span>
14 </c:if>
15 <c:if test="${currentPage != 1}">
16 <a href="listUser.do?page=1">1</a>
17 </c:if>
18 <%
19 int pageTimes = (Integer)session.getAttribute("pageTimes")
20 for(int i=1i<pageTimesi++)
21 {
22 request.setAttribute("page", i+1)
23 %>
24 <c:if test="${currentPage == page}">
25 <span class="current"><%=i+1%></span>
26 </c:if>
27 <c:if test="${currentPage != page}">
28 <a href="listUser.do?page=<%=i+1%>"><%=i+1%></a>
29 </c:if>
30 <%} %>
31
32 <c:if test="${currentPage == pageTimes}">
33 <span class="disabled">后一页 >></span>
34 </c:if>
35 <c:if test="${currentPage != pageTimes}">
36 <a href="listUser.do?page=${currentPage+1}">后一页 >></a>
37 </c:if>
38 </div>
39 </div>
看了一下代码,大概就是执行User控制器下的List这个Action,然后就会调用GetPager()函数,这个应该是加载列表的代码,GetPager就是获取列表查询数据需要的相关属性,以便于在页面上使用。执行顺序和内部处理细节如下:
如果是首次打开/User/List这个页面,默认pagesize=10,pageindex=1,也就是每页显示10条数据,当前显示第1页内容
调用GetPager(pagesize,pageindex),在内部调用GetCount()获取Users的数据总数
声明Pager<Users>对象,用于保存针对Users集合数据的对象,并且通过构造函数传值,这四个参数代表的含义依次是:每页显示的数据数量、当前显示第几页数据、所有数据总数、数据实体List集合
由于第四个参数为null,因此在页面上是没有值的。因此想要让页面上有数据,第四个参数要补齐全,是List<Users>类型的参数,最下方有个GetList()方法,那个应该就是需要的。
Pager<Users>的作用在于向页面显示这些数据:我需要第几页的数据(pageindex)、我每页需要多少条数据(pagesize)、数据库里这张表总共有多少条数据(DataCount,实际上只是为了计算出一共需要多少页)、我需要多少页展示数据(PageCount,方便在页面展示相应数量的页码进行翻页 *** 作),当前这一页我需要展示的数据实体(InfoList,声明Pager<Users>时,相当于指定了这个属性为List<Users>类型,这是泛型的概念)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)