springMVC详细配置+Mysql+jdbcTemplate实现分页功能
来源:互联网 发布:oppo手机自动开启数据 编辑:程序博客网 时间:2024/06/05 07:06
本例子使用到的相关技术有:springMVC+MySQL+jQuery+jdbcTemplate+jstl+json+bootstrap等
(P:网上很少找到完整的springMVC+mysql实现分页查询,所以就自己详细的做了一个完整的例子)
(环境:jdk1.6 +tomcat7.0+mysql+eclipse....)
(包/文件:json.lib+jquery.js+spring3.0相关jar+jstl.jar+bootstrap相关css\js.....)
(传输数据格式为:json)
(
SpringMVC 的核心原理:
1,用户发送请求给服务器:url:user.do
2,服务器收到请求。发现DispatchServlet 可以处理。于是调用DispatchServlet。
3,DispatchServlet 内部,通过HandleMapping 检查这个url 有没有对应的Controller。如果有,则调用Controller.
4,Controller 开始执行。
5,Controller 执行完后,如果返回字符串,则ViewResolver 将字符串转化成相对应的视图对象;如果返回ModelAndView ,该对象本身就包含了视图对象信息。
6,DispatchServlet 将执行视图对象中的数据,输出给服务器。
7,服务器将数据输出给客户端。
)
一,先秀效果图(不是很美观,只为实现效果):
二:整体结构
1,src(由于工程名较敏感,所以******)
2, webContent
三:主要配置文件
1.web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Spring3MVC</display-name> <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> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
2.spring-servlet.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"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"><!-- 对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --><context:component-scan base-package="com.fingerknow.project" /> <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 --><beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"><property name="cacheSeconds" value=http://blog.csdn.net/huahuagongzi9999/article/details/"0" /><property name="messageConverters"><list><beanclass="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean></list></property></bean><!--对模型视图名称的解析,即在模型视图名称添加前后缀 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"p:prefix="/WEB-INF/views/" p:suffix=".jsp" /><!--文件上传配置 --><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"p:defaultEncoding="utf-8"><property name="maxUploadSize"><value>104857600</value></property><property name="maxInMemorySize"><value>4096</value></property></bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value=http://www.07net01.com/program/"com.mysql.jdbc.Driver">
3.***.properties
projectURL=http://localhost:8080/fk/downloadURL=http://localhost:8080/fk/upload/download/ uploadURL=http://localhost:8080/fk/temp/
四:Java类(business为本例实例)
1,AbstractDao
public class AbstractDao extends JdbcDaoSupport {@Resource(name = "dataSource")public void setSuperDataSource(DataSource dataSource) {super.setDataSource(dataSource);}}
2,BusinessDao(只展示分页查询方法)
@Repository("businessDao")public class BusinessDao extends AbstractDao{ /** * 分页查询 * @param currentPage 当前页 * @param numPerPage 每页记录数 * @return */public Pagination queryPageBusiness(Integer currentPage,Integer numPerPage) { String sql="SELECT * FROM business ORDER BY businessId ASC ";Pagination page=new Pagination(sql, currentPage, numPerPage, getJdbcTemplate());return page; }}
3,PageInation(分页工具类)
public class Pagination extends JdbcDaoSupport{public static final int NUMBERS_PER_PAGE = 10; //一页显示的记录数 private int numPerPage; //记录总数 private int totalRows; //总页数 private int totalPages; //当前页码 private int currentPage; //起始行数 private int startIndex; //结束行数 private int lastIndex; //结果集存放List private List resultList; //JdbcTemplate jTemplate private JdbcTemplate jTemplate; /** * 每页显示10条记录的构造函数,使用该函数必须先给Pagination设置currentPage,jTemplate初值 * @param sql oracle语句 */ public Pagination(String sql){ if(jTemplate == null){ throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. "); }else if(sql.equals("")){ throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. "); } new Pagination(sql,currentPage,NUMBERS_PER_PAGE,jTemplate); } /**分页构造函数 * @param sql 根据传入的sql语句得到一些基本分页信息 * @param currentPage 当前页 * @param numPerPage 每页记录数 * @param jTemplate JdbcTemplate实例 */ public Pagination(String sql,int currentPage,int numPerPage,JdbcTemplate jTemplate){ if(jTemplate == null){ throw new IllegalArgumentException("com.deity.ranking.util.Pagination.jTemplate is null,please initial it first. "); }else if(sql == null || sql.equals("")){ throw new IllegalArgumentException("com.deity.ranking.util.Pagination.sql is empty,please initial it first. "); } //设置每页显示记录数 setNumPerPage(numPerPage); //设置要显示的页数 setCurrentPage(currentPage); //计算总记录数 StringBuffer totalSQL = new StringBuffer(" SELECT count(*) FROM ( "); totalSQL.append(sql); totalSQL.append(" ) totalTable "); //给JdbcTemplate赋值 setJdbcTemplate(jTemplate); //总记录数 setTotalRows(getJdbcTemplate().queryForInt(totalSQL.toString())); //计算总页数 setTotalPages(); //计算起始行数 setStartIndex(); //计算结束行数 setLastIndex(); System.out.println("lastIndex="+lastIndex);////////////////// //构造oracle数据库的分页语句 /** StringBuffer paginationSQL = new StringBuffer(" SELECT * FROM ( "); paginationSQL.append(" SELECT temp.* ,ROWNUM num FROM ( "); paginationSQL.append(sql); paginationSQL.append(" ) temp where ROWNUM <= " + lastIndex); paginationSQL.append(" ) WHERE num > " + startIndex); */ //装入结果集 setResultList(getJdbcTemplate().queryForList(getMySQLPageSQL(sql,startIndex,numPerPage))); } /** * 构造MySQL数据分页SQL * @param queryString * @param startIndex * @param pageSize * @return */public String getMySQLPageSQL(String queryString, Integer startIndex, Integer pageSize){String result = "";if (null != startIndex && null != pageSize){result = queryString + " limit " + startIndex + "," + pageSize;} else if (null != startIndex && null == pageSize){result = queryString + " limit " + startIndex;} else{result = queryString;}return result;} public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getNumPerPage() { return numPerPage; } public void setNumPerPage(int numPerPage) { this.numPerPage = numPerPage; } public List getResultList() { return resultList; } public void setResultList(List resultList) { this.resultList = resultList; } public int getTotalPages() { return totalPages; } //计算总页数 public void setTotalPages() { if(totalRows % numPerPage == 0){ this.totalPages = totalRows / numPerPage; }else{ this.totalPages = (totalRows / numPerPage) + 1; } } public int getTotalRows() { return totalRows; } public void setTotalRows(int totalRows) { this.totalRows = totalRows; } public int getStartIndex() { return startIndex; } public void setStartIndex() { this.startIndex = (currentPage - 1) * numPerPage; } public int getLastIndex() { return lastIndex; } public JdbcTemplate getJTemplate() { return jTemplate; } public void setJTemplate(JdbcTemplate template) { jTemplate = template; } //计算结束时候的索引 public void setLastIndex() { System.out.println("totalRows="+totalRows);/////////// System.out.println("numPerPage="+numPerPage);/////////// if( totalRows < numPerPage){ this.lastIndex = totalRows; }else if((totalRows % numPerPage == 0) || (totalRows % numPerPage != 0 && currentPage < totalPages)){ this.lastIndex = currentPage * numPerPage; }else if(totalRows % numPerPage != 0 && currentPage == totalPages){//最后一页 this.lastIndex = totalRows ; } }}
4,BusinessService
/** * 业务处理 * @author Administrator * */@Service("BusinessService") public class BusinessService { @Resource private BusinessDao businessDao;/** * 分页查询 * @param currentPage 当前页 * @param numPerPage 每页记录数 * @return */public Pagination queryPageBusiness(Integer currentPage,Integer numPerPage) { return businessDao.queryPageBusiness(currentPage, numPerPage); }}
5,BusinessController
@Controller@RequestMapping(value = http://blog.csdn.net/huahuagongzi9999/article/details/"/business")public class BusinessController {@Resourceprivate BusinessService businessService;private final static String uploadURL=propertiesUtil.getUrl("uploadURL"); /** * 分页查询所有 * @param request * @param response */ @RequestMapping(value = "queryPageBusiness.do") public void queryPageBusiness(HttpServletRequest request,HttpServletResponse response) {String message = "";String status = ""; PrintWriter out = null;List<Map<String, Object>> businessList =null;Pagination page=null; Map<String, Object> map = new HashMap<String, Object>();try {out = response.getWriter();String currentPage = URLDecoder.decode(request.getParameter("currentPage"));String numPerPage = URLDecoder.decode(request.getParameter("numPerPage"));if("".equals(currentPage)||"".equals(numPerPage)){ page =businessService.queryPageBusiness(1, 10); }else{ page =businessService.queryPageBusiness(StringUtil.getInteger(currentPage), StringUtil.getInteger(numPerPage)); } List list=page.getResultList();businessList=new ArrayList<Map<String,Object>>(); for (int i = 0,len=list.size();i<len; i++) {Map<String, Object> maps=new HashMap<String, Object>();Map mapRe=(Map)list.get(i); maps.put("businessPic", StringUtil.nullOrBlank(mapRe.get("businessPic")+"")?"?"":uploadURL+mapRe.get("businessPic"));maps.put("businessName", mapRe.get("businessName"));maps.put("businessId", mapRe.get("businessId"));maps.put("businessEname", mapRe.get("businessEname")); maps.put("createTime", FormatDateTime.formatDateTime("yyyy-MM-dd", mapRe.get("createTime")+""));businessList.add(maps); }message="success"; status = Constants.RETURN_STATUS_0;} catch (Exception e1) { e1.printStackTrace();message="failure";status = Constants.RETURN_STATUS_1;}finally{ map.put("message", message); map.put("totalPage", page.getTotalPages()); map.put("currentPage", page.getCurrentPage()); map.put("totalRows", page.getTotalRows()); map.put("numPerPage", page.getNumPerPage()); map.put("status", status); map.put("businessList", businessList); //必须设置字符编码,否则返回json会乱码 response.setContentType("text/html;charset=UTF-8"); out.write(JSONSerializer.toJSON(map).toString());out.flush();out.close();} } }
五,web(分页jsp代码)
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <c:set var="ctx" value="${pageContext.request.contextPath }" /><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>分页列表</title><link href="${ctx}/bootstrap/css/bootstrap.css" rel="stylesheet"><link href="${ctx}/bootstrap/css/bootstrap-responsive.css" rel="stylesheet"><link rel="stylesheet" href="${ctx}/css/bootstrap-responsive.min.css" /> <link rel="stylesheet" href="${ctx}/css/jquery-ui.css" /><link rel="stylesheet" href="${ctx}/css/uniform.css" /> <link rel="stylesheet" href="${ctx}/css/select2.css" /><link rel="stylesheet" href="${ctx}/css/unicorn.main.css" /><link rel="stylesheet" href="${ctx}/css/common.css" /> <script src="${ctx}/js/jquery-1.9.0.js"></script> </head><body> <div class="container" id="businessEname_div"><div class="row"> <div class="span1"></div> <div class="span10"> <div class="widget-box"><div class="widget-title"><h5>商圈列表</h5> </div><div class="widget-content nopadding"><table class="table table-bordered table-striped table-hover data-table"> <thead><tr> <th style="vertical-align:middle;width:10px;"><input type="checkbox" name="chkAll" id="chkAll"></th> <th>logo</th><th>名称</th> <th>英文名</th> <th>注册日期</th> </tr> </thead><tbody id="tby"> </tbody> </table> </div> </div> <div class="pagination"> <input type="hidden" id="totalPage_input"/> <ul> <li><a href="javascript:void(0);" id="firstPage">首页</a></li> <li><a href="javascript:void(0);" id="shang">上一页</a></li> <li><a href="javascript:void(0);" id="xia">下一页</a></li> <li><a href="javascript:void(0);" id="lastPage">末页</a></li> <li>共<lable id="totalPage"></lable>页</li> <li>第<lable id="currentPage"></lable>页</li> <li>共<lable id="totalRows"></lable>条记录</li> </ul> </div></div> <div class="span1"></div> </div> </div> <script type="text/javascript"> /** * V1.0 */ $(document).ready(function() { var currentPage=1; //第几页 var numPerPage=5; //每页显示条数 //分页查询 var queryByPage=function(){ $("#tby tr").remove(); $.ajax({ type: "post", url: "${ctx}/business/queryPageBusiness.do?¤tPage="+currentPage+"&numPerPage="+numPerPage, dataType: "json", /*这句可用可不用,没有影响*/ contentType: "application/json; charset=utf-8", success: function (data) { var array=data.businessList; var tby=$("#tby"); var totalPage=data.totalPage; $("#totalPage_input").val(totalPage); $("#currentPage").html(currentPage); $("#totalRows").html(data.totalRows); $("#totalPage").html(totalPage); //循环json中的数据 for(var i=0,len=array.length;i<len;i++){ var td1=$("<td style='vertical-align:middle;width:10px;'><input type='checkbox' name='chk'></td>"); var td2 =$("<td width='140px'><img src='http://blog.csdn.net/huahuagongzi9999/article/details/"+array[i].businessPic+"' style='width:135px;height:125px;background-color: none;border: none;'></td>"); var td3 =$("<td>"+array[i].businessName+"</td>"); var td4 =$("<td>"+array[i].businessEname+"</td>"); var td5 =$("<td>"+array[i].createTime+"</td>"); var tr=$("<tr></tr>"); tr.append(td1).append(td2).append(td3).append(td4).append(td5); tr.appendTo(tby); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert(errorThrown); } }); } //初始化列表 queryByPage(currentPage,numPerPage); //首页 $("#firstPage").bind("click",function(){ currentPage=1; queryByPage(currentPage,numPerPage); }); //上一页 $("#shang").click(function(){ if(currentPage==1){ alert("已经到达第一页"); return ; }else{ currentPage--; queryByPage(); } }); //下一页 $("#xia").click(function(){ if(currentPage==$("#totalPage_input").val()){ alert("已经到达最后一页"); return ; }else{ currentPage++; queryByPage(); } }); //末页 $("#lastPage").bind("click",function(){ currentPage=$("#totalPage_input").val(); queryByPage(currentPage,numPerPage); }); //隔行变色 function changeColor(){$("#tby>tr:odd").css("background-color","#E9EBEF");$("#tby>tr:even").css("background-color","#ffffff"); } }); </script> </body></html>
- springMVC详细配置+Mysql+jdbcTemplate实现分页功能
- springMVC详细配置+Mysql+jdbcTemplate实现分页功能
- springMVC详细配置+Mysql+jdbcTemplate实现分页功能
- springMVC详细配置+Mysql+jdbcTemplate实现分页功能
- 使用Spring的JdbcTemplate实现分页功能
- 用Spring的JdbcTemplate实现分页功能
- 用Spring的JdbcTemplate实现分页功能
- 用Spring的JdbcTemplate实现分页功能
- springMvc +Jdbctemplate+分页
- springmvc配置myBatis,并实现增删改查、分页功能
- springmvc + jdbcTemplate + mysql
- 用Spring的JdbcTemplate实现分页功能 转
- SpringMVC+MyBatis+MySQL实现分页
- spring+springmvc+hibernate,实现分页功能
- spring+springmvc+hibernate,实现分页功能
- MyBatis+SpringMVC+Spring 实现分页功能
- JSP+MySQL实现分页功能
- 使用mysql实现分页功能
- 最长公共子序列
- 自定义PulltoRefresh刷新的样式 以及集成PulltoRefresh
- 三轴加速度传感器BMA250解读
- 死锁预防策略
- 算法-5-字符串-汇总(持续更新)-目录呈现
- springMVC详细配置+Mysql+jdbcTemplate实现分页功能
- java内存模型
- Android音频处理——通过AudioRecord去保存PCM文件进行录制,播放,停止,删除功能
- 安全中国PHP网站开发工程师就业指导班
- 验证码Kaptcha参数详解
- 邓白氏编码(D-U-N-S Number)申请详细流程
- 2017最新Application loader 上传app更简单更快捷
- ant 删除bin,gen文件夹之后打包错误解决方法
- 黄金连分数