Springmvc分页
目录
用 [TOC]
来生成目录:
结构图
JAR包
spring-common.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
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.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="你的地址"/>
<property name="username" value="test"/>
<property name="password" value="test"/>
</bean>
<!--
2. mybatis的SqlSession的工厂: SqlSessionFactoryBean dataSource:引用数据源
MyBatis定义数据源,同意加载配置
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:config/mybatis-config.xml" />
</bean>
<!--
3. mybatis自动扫描加载Sql映射文件/接口 : MapperScannerConfigurer sqlSessionFactory
basePackage:指定sql映射文件/接口所在的包(自动扫描)
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.test.cn.mapper"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
<!--
4. 事务管理 : DataSourceTransactionManager dataSource:引用上面定义的数据源
-->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 5. 使用声明式事务
transaction-manager:引用上面定义的事务管理器
-->
<tx:annotation-driven transaction-manager="txManager" />
</beans>
spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
<!-- 注解扫描包 -->
<context:component-scan base-package="com.test.cn" />
<!-- 开启注解 -->
<mvc:annotation-driven />
<!--
配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd
-->
<!-- 定义跳转的文件的前后缀 ,视图模式配置-->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
<property name="prefix" value="/web/" />
<property name="suffix" value=".jsp" />
</bean>
<!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="10485760" />
</bean>
<!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException
该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
</props>
</property>
</bean>
</beans>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 实体类,简称 -设置别名
<typeAliases>
<typeAlias alias="Contact" type="com.tyzd.pact.model.Contact" />
</typeAliases>-->
<typeAliases>
<!--批量扫描配置别名,别名就是类名-->
<package name="com.test.cn.entity"/>
</typeAliases>
<!-- 实体接口映射资源 -->
<!-- 说明:如果xxMapper.xml配置文件放在和xxMapper.java统一目录下,mappers也可以省略,因为org.mybatis.spring.mapper.MapperFactoryBean默认会去查找与xxMapper.java相同目录和名称的xxMapper.xml
<mappers>
<mapper resource="com/tyzd/pact/mapper/ContactMapper.xml" />
</mappers>-->
<!--批量加载mapper,这里的mapper.java必须和mapper.xml名称相同-->
<mappers>
<package name="com.test.cn.mapper"/>
</mappers>
</configuration>
log4j.properties
### set log levels ###
log4j.rootLogger = info , Console , D
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=INFO
log4j.logger.java.sql.Statement=INFO
log4j.logger.java.sql.PreparedStatement=INFO
#output2file
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D:/logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO ## \u8F93\u51FAinfo\u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
we.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Springmvc_1</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring-*.xml</param-value>
</context-param>
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:config/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>web/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>测试</title>
</head>
<script
src="http://cdn.static.runoob.com/libs/jquery/1.10.2/jquery.min.js"></script>
<body>
<!-- 分页测试 start -->
<div>
<table border="1">
<tr>
<td align="center"><input type="text" value="0"
style="display: none;" /> <input class="inbtnone" type="button"
value="第一页" /> <input class="nextnone" type="button" value="下一页" />
<input class="prevnone" type="button" value="上一页" /></td>
<td><input class="insert_num" type="text" value="${pagecount }"
style="text-align: right;"
onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/\D/g,'')}"
onafterpaste="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/\D/g,'')}" />条记录/页</td>
</tr>
<tr>
<td style="color: blue;"><label>第 </label> <label
class="l_f_pageNum"><c:if test="${ not empty pageNum}">
<input class="l_f_inp_pageNum" type="text" value="${pageNum+1 }"
style="text-align: right;"
onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/\D/g,'')}"
onafterpaste="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,'')}else{this.value=this.value.replace(/\D/g,'')}" />
</c:if> <c:if test="${empty pageNum}">1</c:if> </label> <label>页/</label> <label>共
</label> <label class="l_f_totalPage">${totalPage }</label> <label>页</label>
</td>
</tr>
<c:if test="${ not empty list}">
<c:forEach var="user" items="${list}" varStatus="st">
<tr>
<td align="center">${user.username }</td>
<td align="center">${user.fullname }</td>
</tr>
</c:forEach>
</c:if>
</table>
</div>
<!-- 分页测试 end -->
</body>
<!-- 分页测试 start -->
<script type="text/javascript">
// 第一页按钮点击事件
$('.inbtnone').click(function(){
var p = $(this).prev().val();
var p1;
if($('.insert_num').val()==''){
p1 = 10;
}else{
p1 = $('.insert_num').val();
}
$.ajax({
type:"post",
url:'<%=basePath%>u_user/getAllUser',
data : {
page : p,
pagecount : p1
},
success : function(data) {
location.reload();
},
error : function(requst){
location.reload();
}
});
});
// 下一页按钮点击事件
$('.nextnone').click(function(){
var p = $(".l_f_pageNum").children(".l_f_inp_pageNum").val();
p = parseInt(p) + 1;
var p1;
if($('.insert_num').val()==''){
p1 = 10;
}else{
p1 = $('.insert_num').val();
}
$.ajax({
type:"post",
url:'<%=basePath%>u_user/getAllUser',
data : {
page : p,
pagecount : p1
},
success : function(data) {
location.reload();
},
error : function(requst){
location.reload();
}
});
});
// 上一页按钮点击事件
$('.prevnone').click(function(){
var p = $(".l_f_pageNum").children(".l_f_inp_pageNum").val();
p = parseInt(p) - 1;
var p1;
if($('.insert_num').val()==''){
p1 = 10;
}else{
p1 = $('.insert_num').val();
}
$.ajax({
type:"post",
url:'<%=basePath%>u_user/getAllUser',
data : {
page : p,
pagecount : p1
},
success : function(data) {
location.reload();
},
error : function(requst){
location.reload();
}
});
});
// 每页记录数,回车事件
$('.insert_num').bind('keypress',function(ev){
if(ev.keyCode==13) {
var p = $(".l_f_pageNum").children(".l_f_inp_pageNum").val();
p = parseInt(p);
var p1;
if($('.insert_num').val()==''){
p1 = 10;
}else{
p1 = $('.insert_num').val();
}
$.ajax({
type:"post",
url:'<%=basePath%>u_user/getAllUser',
data : {
page : p,
pagecount : p1
},
success : function(data) {
location.reload();
},
error : function(requst) {
location.reload();
}
});
}
});
// 每页记录数,失去焦点事件
$(".insert_num").blur(function(){
var p = $(".l_f_pageNum").children(".l_f_inp_pageNum").val();
p = parseInt(p);
var p1;
if($('.insert_num').val()==''){
p1 = 10;
}else{
p1 = $('.insert_num').val();
}
$.ajax({
type:"post",
url:'<%=basePath%>u_user/getAllUser',
data : {
page : p,
pagecount : p1
},
success : function(data) {
location.reload();
},
error : function(requst) {
location.reload();
}
});
});
// 跳转页,回车事件
$('.l_f_inp_pageNum').bind('keypress',function(ev){
if(ev.keyCode==13) {
var p = $(".l_f_pageNum").children(".l_f_inp_pageNum").val();
p = parseInt(p);
var p1;
if($('.insert_num').val()==''){
p1 = 10;
}else{
p1 = $('.insert_num').val();
}
$.ajax({
type:"post",
url:'<%=basePath%>u_user/getAllUser',
data : {
page : p,
pagecount : p1
},
success : function(data) {
location.reload();
},
error : function(requst) {
location.reload();
}
});
}
});
// 跳转页,失去焦点事件
$(".l_f_inp_pageNum").blur(function(){
var p = $(".l_f_pageNum").children(".l_f_inp_pageNum").val();
p = parseInt(p);
var p1;
if($('.insert_num').val()==''){
p1 = 10;
}else{
p1 = $('.insert_num').val();
}
$.ajax({
type:"post",
url:'<%=basePath%>u_user/getAllUser',
data : {
page : p,
pagecount : p1
},
success : function(data) {
location.reload();
},
error : function(requst) {
location.reload();
}
});
});
</script>
<!-- 分页测试 end -->
</html>
U_userController:
package com.test.cn.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.test.cn.entity.U_user;
import com.test.cn.service.U_userService;
import com.test.cn.util.PageBean;
@Controller
@RequestMapping("u_user")
public class U_userController {
@Autowired
private U_userService u_userService;
@RequestMapping("/getAllUser")
public String getAllUser(HttpServletRequest request,
HttpServletResponse response, int page, int pagecount)
throws Exception {
PageBean<U_user> bean = u_userService.getAllUser(page-1, pagecount);
request.getSession().setAttribute("list", bean.getList());
request.getSession().setAttribute("pageNum", bean.getPageNum());
request.getSession().setAttribute("totalPage", bean.getPages());
request.getSession().setAttribute("pagecount", pagecount);
return "index";
}
}
U_user.java
package com.test.cn.entity;
import java.util.Date;
public class U_user {
int id;
String username;
String fullname;
String userpass;
int roleId;
Date create_time;
Date update_time;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getFullname() {
return fullname;
}
public void setFullname(String fullname) {
this.fullname = fullname;
}
public String getUserpass() {
return userpass;
}
public void setUserpass(String userpass) {
this.userpass = userpass;
}
public int getRoleId() {
return roleId;
}
public void setRoleId(int roleId) {
this.roleId = roleId;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public Date getUpdate_time() {
return update_time;
}
public void setUpdate_time(Date update_time) {
this.update_time = update_time;
}
}
UuserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.cn.mapper.UuserMapper">
<resultMap type="U_user" id="u_userResultMap">
<id property="id" column="id"></id>
<result property="username" column="username"></result>
<result property="fullname" column="fullname"></result>
<result property="userpass" column="userpass"></result>
<result property="roleId" column="roleId"></result>
<result property="create_time" column="create_time"></result>
<result property="update_time" column="update_time"></result>
</resultMap>
<select id="getAllUser" parameterType="map" resultType="U_user">
SELECT * FROM u_user limit ${page},${pagecount}
</select>
<select id="getAllUserByCount" resultType="int">
SELECT count(*) FROM u_user
</select>
</mapper>
UuserMapper.java
package com.test.cn.mapper;
import java.util.List;
import java.util.Map;
import com.test.cn.entity.U_user;
public interface UuserMapper {
public List<U_user> getAllUser(Map<String, String> map) throws Exception;
public int getAllUserByCount() throws Exception;
}
U_userService.java
package com.test.cn.service;
import com.test.cn.entity.U_user;
import com.test.cn.util.PageBean;
public interface U_userService {
public PageBean<U_user> getAllUser(int page, int pagecount)
throws Exception;
public int getAllUserByCount() throws Exception;
}
U_userServiceImpl.java
package com.test.cn.serviceimpl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.test.cn.entity.U_user;
import com.test.cn.mapper.UuserMapper;
import com.test.cn.service.U_userService;
import com.test.cn.util.PageBean;
@Transactional
@Service
public class U_userServiceImpl implements U_userService {
private UuserMapper mapper;
@Resource
public void setMapper(UuserMapper mapper) {
this.mapper = mapper;
}
public PageBean<U_user> getAllUser(int page, int pagecount)
throws Exception {
int count = this.getAllUserByCount();
int pages = (count % pagecount == 0) ? (count / pagecount)
: ((count / pagecount) + 1);
page = page < 0 ? 0 : page;
page = (page > (pages - 1)) ? (pages - 1) : page;
Map<String, String> map = new HashMap<String, String>();
map.put("page", (page * pagecount) + "");
map.put("pagecount", pagecount + "");
List<U_user> list = mapper.getAllUser(map);
PageBean<U_user> pageBean = new PageBean<U_user>(list);
pageBean.setPageNum(page);// 第几页
pageBean.setPageSize(pagecount);// 每页记录数
pageBean.setPages(pages);// 总页数
pageBean.setSize(list.size());// 当前页的数量
pageBean.setTotal(count);// 总计录数
pageBean.setList(list);// 结果集
return pageBean;
}
public int getAllUserByCount() throws Exception {
int count = mapper.getAllUserByCount();
return count;
}
}
运行效果图
好的了