在MVC里面 怎样实现分页

在MVC里面 怎样实现分页,第1张

现说真分和假分吧..就像'足球'说的一样 在数据库进行查询直接过滤掉不需要的数据后比如得到一个记录集的第11条道第20条.这个11到20是在数据库中进行查询出来.在代码中得到的rs,rs的记录长度就是10个..吧这10个记录显示到jsp页面上,这种分页方法就是真分..

假分是得到数据集合后在去过滤.这个就是假分..所以足球说的就不确切了..得到的数据集合过滤和显示是可以在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>类型,这是泛型的概念)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9850162.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存