基于SSM框架的简易的分页功能——包含maven项目的搭建
发布日期:2022-03-30 20:19:27 浏览次数:11 分类:博客文章

本文共 19582 字,大约阅读时间需要 65 分钟。

  新人第一次发帖,有什么不对的地方请多多指教~~

    分页这个功能经常会被使用到,我之前学习的时候找了很多资源,可都看不懂(笨死算了),最后还是在朋友帮助下做出了这个分页。我现在把我所能想到的知识

  做了一个整理发上来,供大家参考参考,希望能帮助到一些和我一样的人吧@.@ 中间肯定有很多没有表述明白,请多多见谅,博主刚刚结束java 四个月,小白一只,

  还望海涵~~~

  前面八步为项目准备工作,如果maven项目搭建完成的可以跳过~ 

  最后面有附件,是完整的一个工程,包含数据库的呦

 

 

首先需要一个IDEA!

  我使用的是ideaIU-2016.2 下载地址:http://www.jetbrains.com/idea/download/#section=windows

  IDEA常用配置:http://blog.csdn.net/yelove1990/article/details/51541327

然后创建一个maven项目

  一、Create New Project 创建项目

  

  二、选择maven项目并按指示创建

  

 

  三、GroupId是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。

    ArtifactId是项目唯一的标识符,实际对应项目的名称,就是项目根目录的名称。

    一般GroupId就是填xxx.xx.xxx类似这样的。

    

  四、这里需要添加一条参数,Name是划线左边的名称,value是划线右边的值,相应的填写进去就行,然后点OK-Next

   

  五、创建工程,工程名为前面的ArtifactId

  

   六、然后IDEA就会自动创建项目

    创建完成会有BUILD SUCCESS的字样提示,表示创建成功。

   七、目录结构like this

   

 

  八、添加maven依赖太多了,不一一解释了,教程网址:http://www.yiibai.com/maven/

    直接复制粘贴到自己的maven中即可。

    maven依赖的下载地址:http://mvnrepository.com/

     
      

4.2.5.RELEASE
yyyyMMdd
UTF-8
true   
  


   com.google.guava
   guava
   18.0


   log4j
   log4j
   1.2.17


   org.slf4j
   slf4j-api
   1.7.5


   org.slf4j
   slf4j-log4j12
   1.7.5


   org.apache.commons
   commons-lang3
   3.3.2


   commons-io
   commons-io
   2.4


   junit
   junit
   4.12


   commons-collections
   commons-collections
   3.2.1


   org.quartz-scheduler
   quartz
   1.8.5


   com.alibaba
   fastjson
   1.2.8


   org.hibernate
   hibernate-validator
   4.2.0.Final




   org.springframework
   spring-core
   ${spring.version}


   org.springframework
   spring-beans
   ${spring.version}


   org.springframework
   spring-context
   ${spring.version}


   org.springframework
   spring-context-support
   ${spring.version}


   org.springframework
   spring-aop
   ${spring.version}


   org.springframework
   spring-aspects
   ${spring.version}


   org.springframework
   spring-expression
   ${spring.version}


   org.springframework
   spring-tx
   ${spring.version}


   org.springframework
   spring-test
   ${spring.version}




   jstl
   jstl
   1.2


   javax.servlet
   javax.servlet-api
   3.1.0


   taglibs
   standard
   1.1.2


   org.springframework
   spring-web
   ${spring.version}


   org.springframework
   spring-webmvc
   ${spring.version}


   com.fasterxml.jackson.core
   jackson-databind
   2.7.4




   mysql
   mysql-connector-java
   5.1.38
   runtime


   com.alibaba
   druid
   1.0.20


   org.springframework
   spring-jdbc
   ${spring.version}


   org.mybatis
   mybatis
   3.4.0


   org.mybatis
   mybatis-spring
   1.3.0


   redis.clients
   jedis
   2.8.0


   org.springframework.data
   spring-data-redis
   1.6.4.RELEASE


   com.dyuproject.protostuff
   protostuff-core
   1.0.8


   com.dyuproject.protostuff
   protostuff-runtime
   1.0.8




   commons-dbcp
   commons-dbcp
   1.4



   net.sf.jxls
   jxls-core
   1.0.6
maven

 

  九、配置tomcat,教程地址如下:

     来自于:chenshun123的博客

       网址:http://blog.csdn.net/chenshun123/article/details/51285890

 

 

 —————————————————————————————————分割线————————————————————————————————————————

 

接下来是正文部分!

  首先需要一个分页工具类(Page),和实体类(Record),包装类(seeRecord)。中间内容基本不需要改动,您可以根据需要改动每页显示的记录条数。

1 package po;  2   3 import java.io.Serializable;  4   5 public class Page implements Serializable{  6   7
 private static final long serialVersionUID = -3198048449643774660L;  8   9
 private int pageNow = 1; // 当前页数 10  11
 private int pageSize = 5; // 每页显示记录的条数 12  13
 private int totalCount; // 总的记录条数 14  15
 private int totalPageCount; // 总的页数 16  17
 @SuppressWarnings("unused") 18
 private int startPos; // 开始位置,从0开始 19  20
 @SuppressWarnings("unused") 21
 private boolean hasFirst;// 是否有首页 22  23
 @SuppressWarnings("unused") 24
 private boolean hasPre;// 是否有前一页 25  26
 @SuppressWarnings("unused") 27
 private boolean hasNext;// 是否有下一页 28  29
 @SuppressWarnings("unused") 30
 private boolean hasLast;// 是否有最后一页 31  32
 /** 33
  * 通过构造函数 传入  总记录数  和  当前页 34
  * @param totalCount 35
  * @param pageNow 36
  */ 37
 public Page(int totalCount, int pageNow) { 38
 this.totalCount = totalCount; 39
 this.pageNow = pageNow; 40
 } 41  42
 /** 43
  * 取得总页数,总页数=总记录数/总页数 44
  * @return 45
  */ 46
 public int getTotalPageCount() { 47
 totalPageCount = getTotalCount() / getPageSize(); 48
 return (totalCount % pageSize == 0) ? totalPageCount 49
 : totalPageCount + 1; 50
 } 51  52
 public void setTotalPageCount(int totalPageCount) { 53
 this.totalPageCount = totalPageCount; 54
 } 55  56
 public int getPageNow() { 57
 return pageNow; 58
 } 59  60
 public void setPageNow(int pageNow) { 61
 this.pageNow = pageNow; 62
 } 63  64
 public int getPageSize() { 65
 return pageSize; 66
 } 67  68
 public void setPageSize(int pageSize) { 69
 this.pageSize = pageSize; 70
 } 71  72
 public int getTotalCount() { 73
 return totalCount; 74
 } 75  76
 public void setTotalCount(int totalCount) { 77
 this.totalCount = totalCount; 78
 } 79
 /** 80
  * 取得选择记录的初始位置 81
  * @return 82
  */ 83
 public int getStartPos() { 84
 return (pageNow - 1) * pageSize; 85
 } 86  87
 public void setStartPos(int startPos) { 88
 this.startPos = startPos; 89
 } 90  91
 /** 92
  * 是否是第一页 93
  * @return 94
  */ 95
 public boolean isHasFirst() { 96
 return (pageNow == 1) ? false : true; 97
 } 98  99
 public void setHasFirst(boolean hasFirst) {100
 this.hasFirst = hasFirst;101
 }102
 /**103
  * 是否有首页104
  * @return105
  */106
 public boolean isHasPre() {107
 // 如果有首页就有前一页,因为有首页就不是第一页108
 return isHasFirst() ? true : false;109
 }110 111
 public void setHasPre(boolean hasPre) {112
 this.hasPre = hasPre;113
 }114
 /**115
  * 是否有下一页116
  * @return117
  */118
 public boolean isHasNext() {119
 // 如果有尾页就有下一页,因为有尾页表明不是最后一页120
 return isHasLast() ? true : false;121
 }122 123
 public void setHasNext(boolean hasNext) {124
 this.hasNext = hasNext;125
 }126
 /**127
  * 是否有尾页128
  * @return129
  */130
 public boolean isHasLast() {131
 // 如果不是最后一页就有尾页132
 return (pageNow == getTotalCount()) ? false : true;133
 }134 135
 public void setHasLast(boolean hasLast) {136
 this.hasLast = hasLast;137
 }138 139 }
page工具类
package po;public class SeeRecord {
/*当前登录的用户名*/
private String loginName;
/*分页对象*/
private Page page;
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}}
seeRecord
package po;public class Record {
private int nub;
private String username;
private String loginName;
private String days;
private String business;
private String note;
public int getNub() {
return nub;
}
public void setNub(int nub) {
this.nub = nub;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getDays() {
return days;
}
public void setDays(String days) {
this.days = days;
}
public String getBusiness() {
return business;
}
public void setBusiness(String business) {
this.business = business;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}}
Record

 

  然后编写Mybatis的Recordmapper.xml配置文件,编写sql语句

     "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    
     
     


SELECT * FROM record WHERE loginName = #{loginName} limit #{page.startPos},#{page.pageSize}



select count(*) from record where loginName = #{value}

  接下来编写Dao接口(RecordDao)

package Dao;import org.springframework.stereotype.Repository;import po.Record;import po.SeeRecord;import java.util.List;@Repositorypublic interface RecordDao {
/*取得操作记录*/
List  queryAllRecord(SeeRecord seeRecord);
/*取得记录条数信息,通过当前用户的loginName查询*/
int getCount(String loginName);}

  接口编写完成后需要慌里面传值,此时就需要编写Controller。

    先获取到当前页和用户名,然后调用DAO接口查询数据库,获得总记录条数,把总记录条数和当前页传入到page的构造方法中,page工具类会根据传入的参数,算出共几页。然后查出当前用户的所有操作记录,存到recordList中并返回给页面,页面就可以显示了。

package controller;import Dao.RecordDao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import po.Page;import po.Record;import po.SeeRecord;import javax.servlet.http.HttpServletRequest;import java.util.List;@Controllerpublic class RecordController {
@Autowired
private RecordDao recordDao;
/*查看操作记录*/
@RequestMapping("/queryAll")
public String record(String loginName , Model model, SeeRecord seeRecord, String pageNow){
String user_Name;
Page page = null;//new 对象在下面
user_Name = loginName;//获取当前登录的用户的loginName
int totalCount = recordDao.getCount(user_Name);//获取当前用户总记录条数
if(pageNow != null && pageNow != "") {//防止出现空指针异常
int pageNow1 = Integer.parseInt(pageNow);
page = new Page(totalCount, pageNow1);//这样写的好处,判断完成外面可以继续调用
}
seeRecord.setLoginName(user_Name);
seeRecord.setPage(page);
List  recordList = recordDao.queryAllRecord(seeRecord);//取得当前用户的所有操作记录
model.addAttribute("page",page);
model.addAttribute("recordList",recordList);
return "recordPage";
}}

  

编写jsp页面接收并显示。

由于测试需要,我加了一个跳转页面。向Controller中传入了两个值,pageNow和loginName,表示当前登录的用户和当前的页数。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
用于跳转到分页页面

 

   分页功能显示页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
操作记录

body{
margin: 0px;
padding: 0px;
}
table{
width: 100%;
height: 400px;
border: #000 1px solid;
}
tr td{
height: 40px;
text-align: center;
border: #000 1px solid;
}


操作记录



流水号
姓名
用户名
操作日期
操作记录
操作方式




${record.nub}
${record.username}
${record.loginName}
${record.days}
${record.business}
${record.note}






共 ${page.totalPageCount} 页 
${page.pageNow} 页  首页

 0}">
上一页

<= 0}">
上一页




下一页

< page.totalPageCount}">
下一页

= page.totalPageCount}">
下一页




尾页


尾页






 

—————————————————————————————分割线2号———————————————————————————————————————————

最后配置XML文件:

  db.properties:

jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/pagedemo?characterEncoding=utf-8jdbc.username=rootjdbc.password=123456

  

  log4j.properties:

log4j.rootLogger=DEBUG, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

  

  spring-mvc.xml

    
    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
   


















application/json;charset=UTF-8






  

  spring-mybatis.xml

    
    
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     
   xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/context/spring-context-3.1.xsd
  http://www.springframework.org/schema/tx
  http://www.springframework.org/schema/tx/spring-tx.xsd">








destroy-method="close">















 

  web.xml: 这里有个问题,创建完maven项目自动生成的web.xml头部版本可能是2.3左右的,如果版本低于2.4,会导致jsp页面的EL表达式失效。只要把头部改到2.4以上即可。

  详见:http://blog.csdn.net/hanshileiai/article/details/46619777

    
    
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     
   xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
 version="3.1">     
SpringMVC
org.springframework.web.servlet.DispatcherServlet

   contextConfigLocation
   classpath:spring-*.xml

1
true   
  
log4jConfigLocation
classpath:log4j.properties   
     
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter

   encoding
   UTF-8
  
  
encodingFilter
/*   
     
org.springframework.web.util.IntrospectorCleanupListener

org.springframework.web.context.request.RequestContextListener   
  
SpringMVC

/   
  
transferPage.jsp   
   Archetype Created Web Application

  

效果图如下:

 

工程文件下载:http://pan.baidu.com/s/1pLNcykb

 

转载地址:https://www.cnblogs.com/AfricanChief/p/6098853.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:MPLAB IDE 编译器文件归类整理
下一篇:WCF服务端消息监测

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2023年03月04日 07时49分11秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

重命名找不到该项目_知乎话题:和喜欢的女生聊天找不到话题该怎么办 2019-08-28 18:34:14
mysql使用变量填值为数组_GOLANG:使用SQLX库执行简单的SQL语句 2019-08-28 18:34:14
python提取文件指定列_python 提取文件指定列的方法示例 2019-08-28 18:34:13
mysql设置自动递增_面试题:mysql 数据类型 2019-08-28 18:34:13
potainer 日志_10个好用的Web日志安全分析工具 2019-08-28 18:34:12
java实现三天免登陆_基于Java的学生信息管理系统 2019-08-28 18:34:12
python 读excel是把所有数据都读到内存里吗_python直接读txt(或者excel)里面的文件名,然后找到那个目录里,把他们复制出来到新的文件,求代码... 2019-08-28 18:34:11
python图像识别数字_Python图像识别+KNN求解数独的实现 2019-08-28 18:34:11
已知空间中的三点 求三角形面积_高考数学复习突破策略,空间几何体的结构及其表面积、体积... 2019-08-28 18:34:10
python3知识点汇总_Python常用知识点汇总 2019-08-28 18:34:09
想学python怎么学习_怎么学习Python爬虫技术 想学Python如何入门 2019-08-28 18:34:09
python的if和else的缩进问题_Python if else对缩进的要求 2019-08-28 18:34:08
python中label函数_Python之sklearn:LabelEncoder函数简介(编码与编码还原)、使用方法、具体案例之详细攻略... 2019-08-28 18:34:08
ad中按钮开关的符号_收藏:电路图形符号大全!!! 2019-08-28 18:34:07
python按比例生成数据组_python,批量生成指定格式的审核数据(传输参数格式为数组时)... 2019-08-28 18:34:06
python有免费版吗_python下载_python3.5.1 免费版下载 - 全方位下载 2019-08-28 18:34:06
angular高级编程第3版下载_UNIX系统编程宝典,每一本都值得程序员珍藏 2019-08-28 18:34:05
python调用训练好的模型_TensorFlow 调用预训练好的模型—— Python 实现 2019-08-28 18:34:05
safari快捷图标不见了_桌面图标不见了怎么办?这里有妙招 2019-08-28 18:34:05
并联串联混合的电压和电流_初中物理归纳并联和串联的区别 2019-08-28 18:34:04