SpringMVC3.0+MyIbatis3.0(分页示例)【转】

主要使用Oracle的三层sql实现分页! 
一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5 
二 工程相关图片: 
1 DEMO图片 

2 工程代码图片 
 
3 相关jar包图片 
 
三 此示例是在: 
SSI:SpringMVC3+Mybatis3(登录及CRUD操作)基础上加的分页功能: 
四 主要代码文件 
1 BaseController.java用于子类调用方便

Java代码  

  1. package com.liuzd.ssm.web;
  2. import javax.servlet.http.HttpServletRequest;
  3. import com.liuzd.page.Page;
  4. import com.liuzd.page.PageState;
  5. import com.liuzd.page.PageUtil;
  6. public class BaseController {
  7. protected Page executePage(HttpServletRequest request,Long totalCount){
  8. if(null == totalCount){
  9. totalCount = 0L;
  10. }
  11. /**页面状态,这个状态是分页自带的,与业务无关*/
  12. String pageAction = request.getParameter("pageAction");
  13. String value = request.getParameter("pageKey");
  14. /**获取下标判断分页状态*/
  15. int index = PageState.getOrdinal(pageAction);
  16. Page page = null;
  17. /**
  18. * index < 1 只有二种状态
  19. * 1 当首次调用时,分页状态类中没有值为 NULL 返回 -1
  20. * 2 当页面设置每页显示多少条: index=0,当每页显示多少条时,分页类要重新计算
  21. * */
  22. Page sessionPage = getPage(request);
  23. if(index < 1){
  24. page = PageUtil.inintPage(totalCount,index,value,sessionPage);
  25. }else{
  26. page = PageUtil.execPage(index,value,sessionPage);
  27. }
  28. setSession(request,page);
  29. return page;
  30. }
  31. private Page getPage(HttpServletRequest request) {
  32. Page page = (Page)request.getSession().getAttribute(PageUtil.SESSION_PAGE_KEY);
  33. if(page == null){
  34. page = new Page();
  35. }
  36. return page;
  37. }
  38. private void setSession(HttpServletRequest request,Page page) {
  39. request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY,page);
  40. }
  41. }

2 UserController.java

Java代码  

  1. package com.liuzd.ssm.web;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. import javax.annotation.Resource;
  6. import javax.servlet.http.HttpServletRequest;
  7. import org.springframework.stereotype.Controller;
  8. import org.springframework.web.bind.annotation.PathVariable;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.SessionAttributes;
  11. import org.springframework.web.servlet.ModelAndView;
  12. import com.liuzd.page.Page;
  13. import com.liuzd.ssm.entity.User;
  14. import com.liuzd.ssm.service.UserService;
  15. @Controller
  16. @RequestMapping("/user")
  17. @SessionAttributes("userList")
  18. public class UserController extends BaseController{
  19. private UserService userService;
  20. public UserService getUserService() {
  21. return userService;
  22. }
  23. @Resource
  24. public void setUserService(UserService userService) {
  25. this.userService = userService;
  26. }
  27. @RequestMapping("/userList")
  28. public ModelAndView userList(HttpServletRequest request){
  29. Map<String,Object> params = new HashMap<String,Object>();
  30. //添加查询条件
  31. // ... params.put("name","jack");...
  32. //获取总条数
  33. Long totalCount = this.getUserService().pageCounts(params);
  34. //设置分页对象
  35. Page page = executePage(request,totalCount);
  36. //如排序
  37. if(page.isSort()){
  38. params.put("orderName",page.getSortName());
  39. params.put("descAsc",page.getSortState());
  40. }else{
  41. //没有进行排序,默认排序方式
  42. params.put("orderName","age");
  43. params.put("descAsc","asc");
  44. }
  45. //压入查询参数:开始条数与结束条灵敏
  46. params.put("startIndex", page.getBeginIndex());
  47. params.put("endIndex", page.getEndinIndex());
  48. ModelAndView mv = new ModelAndView();
  49. //查询集合
  50. List<User> users = this.getUserService().pageList(params);
  51. mv.addObject("userList",users);
  52. mv.setViewName("userList");
  53. return mv;
  54. }
  55. }

3 UserMapper.java

Java代码  

  1. package com.liuzd.ssm.mapper;
  2. import java.util.List;
  3. import java.util.Map;
  4. import org.apache.ibatis.session.RowBounds;
  5. import com.liuzd.ssm.entity.User;
  6. public interface UserMapper{
  7. // .....
  8. public List<User> pageList(Map<String,Object> params);
  9. //分页总条数
  10. public Long pageCounts(Map<String,Object> p);
  11. }

4 UserMapper.xml

Java代码  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.liuzd.ssm.mapper.UserMapper">
  5. <resultMap type="com.liuzd.ssm.entity.User" id="userMap">
  6. <id property="id" column="id"/>
  7. <result property="name" column="name"/>
  8. <result property="age" column="age"/>
  9. <result property="sex" column="sex"/>
  10. <result property="address" column="address"/>
  11. <result property="password" column="password"/>
  12. </resultMap>
  13. <select id="pageList" parameterType="map" resultType="list" resultMap="userMap">
  14. select ttt.* from(select tt.*,rownum rn from(select * from users
  15. <where>
  16. <if test="name != null and name != ‘‘">
  17. <!--
  18. 特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。
  19. 在开发时使用: $,方便调试sql,发布时使用: #
  20. and name like #{name},
  21. -->
  22. and name like ‘%${name}%‘
  23. </if>
  24. <if test="sex != null and sex != ‘‘">
  25. and sex = #{sex}
  26. </if>
  27. </where>
  28. order by ${orderName} ${descAsc} )tt)ttt
  29. <where>
  30. <if test="startIndex != null and startIndex != ‘‘">
  31. rn > ${startIndex}
  32. </if>
  33. <if test="endIndex != null and endIndex != ‘‘">
  34. <![CDATA[ and rn <= ${endIndex}  ]]>
  35. </if>
  36. </where>
  37. </select>
  38. <select id="pageCounts" parameterType="map" resultType="long">
  39. select count(*) from users
  40. <where>
  41. <if test="name != null and name != ‘‘">
  42. and name like #{name}
  43. </if>
  44. <if test="sex != null and sex != ‘‘">
  45. and sex = #{sex}
  46. </if>
  47. </where>
  48. </select>
  49. </mapper>

5 userList.jsp

Java代码  

  1. <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
  2. <%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6. <%@ include file="/common/meta.jsp"%>
  7. </head>
  8. <body>
  9. <table width="60%" border="1" cellpadding="0" align="center">
  10. <thead>
  11. <tr>
  12. <th style="cursor: hand;" title="按姓名进行排序" onclick="sortPage(‘name‘)" valign="top">
  13. 姓名<font color=‘red‘>${page.sortName eq "name" ? page.sortInfo : page.defaultInfo}</font>
  14. </th>
  15. <th style="cursor: hand;" title="按年龄进行排序" onclick="sortPage(‘age‘)" valign="top">
  16. 年龄<font color=‘red‘>${page.sortName eq "age" ? page.sortInfo : page.defaultInfo}</font>
  17. </th>
  18. <th style="cursor: hand;" title="按性别进行排序" onclick="sortPage(‘sex‘)" valign="top">
  19. 性别<font color=‘red‘>${page.sortName eq "sex" ? page.sortInfo : page.defaultInfo}</font>
  20. </th>
  21. <th style="cursor: hand;" title="按地址进行排序" onclick="sortPage(‘address‘)" valign="top">
  22. 地址<font color=‘red‘>${page.sortName eq "address" ? page.sortInfo : page.defaultInfo}</font>
  23. </th>
  24. <th style="cursor: hand;" >
  25. 操作
  26. </th>
  27. </tr>
  28. </thead>
  29. <tbody>
  30. <c:forEach items="${userList}" var="user">
  31. <tr align="center">
  32. <td>
  33. ${user.name}
  34. </td>
  35. <td>
  36. ${user.age}
  37. </td>
  38. <td>
  39. ${user.sex eq 1 ? "男" : user.sex eq 2 ? "女" : "未知"}
  40. </td>
  41. <td>
  42. ${user.address}
  43. </td>
  44. <td>
  45. <a
  46. href="${pageContext.request.contextPath}/user/toAddUser.do">添加</a>
  47. |
  48. <a
  49. href="${pageContext.request.contextPath}/user/getUser/${user.id}.do">编辑</a>
  50. |
  51. <a
  52. href="${pageContext.request.contextPath}/user/delUser/${user.id}.do">删除</a>
  53. </td>
  54. </tr>
  55. </c:forEach>
  56. <jsp:include page="/page/page.jsp">
  57. <jsp:param name="url" value="user/userList.do" />
  58. </jsp:include>
  59. </tbody>
  60. </table>
  61. <br>
  62. <a href="${pageContext.request.contextPath}/index.jsp">返回</a>
  63. </body>
  64. </html>

6 page.jsp,此页面你不用关心,只管引用就行了

Java代码  

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
  2. <%@ taglib uri="/WEB-INF/c.tld" prefix="c"%>
  3. <c:set var="page" value="${sessionScope.page}" />
  4. <c:set var="path" value="${pageContext.request.contextPath}" />
  5. <c:set var="url" value="${param.url}" />
  6. <c:set var="urlParams" value="${param.urlParams}" />
  7. <c:set var="pathurl" value="${path}/${url}" />
  8. <tr>
  9. <td colspan="5">
  10. 共${page.totalCount}条记录 共${page.totalPage}页 每页显示${page.everyPage}条
  11. 当前第${page.currentPage}页&nbsp;
  12. <c:choose>
  13. <c:when test="${page.hasPrePage eq false}">
  14. &lt&lt首页&nbsp;&lt上页&nbsp;
  15. </c:when>
  16. <c:otherwise>
  17. <a href="${pathurl}?&pageAction=first${urlParams}">&lt&lt首页&nbsp;</a>&nbsp;
  18. <a href="${pathurl}?pageAction=previous${urlParams}" />&lt上一页</a>
  19. </c:otherwise>
  20. </c:choose>
  21. &nbsp;||&nbsp;
  22. <c:choose>
  23. <c:when test="${page.hasNextPage eq false}">
  24. &nbsp;下页&gt&nbsp;尾页&gt&gt
  25. </c:when>
  26. <c:otherwise>
  27. <a href="${pathurl}?&pageAction=next${urlParams}">下一页&gt&nbsp;</a>&nbsp;
  28. <a href="${pathurl}?pageAction=last${urlParams}" />末页&gt&gt</a>
  29. </c:otherwise>
  30. </c:choose>
  31. &nbsp;
  32. <SELECT name="indexChange" id="indexChange"
  33. onchange="getCurrentPage(this.value);">
  34. <c:forEach var="index" begin="1" end="${page.totalPage}" step="1">
  35. <option value="${index}" ${page.currentPage eq index ? "selected" : ""}>
  36. 第${index}页
  37. </option>
  38. </c:forEach>
  39. </SELECT>
  40. &nbsp;
  41. 每页显示:<select name="everyPage" id="everyPage" onchange="setEveryPage(this.value);">
  42. <c:forEach var="pageCount" begin="5" end="${page.totalCount}" step="5">
  43. <option value="${pageCount}" ${page.everyPage eq pageCount ? "selected" : ""}>
  44. ${pageCount}条
  45. </option>
  46. </c:forEach>
  47. </select>
  48. </td>
  49. </tr>
  50. <div style=‘display: none‘>
  51. <a class=listlink id="indexPageHref" href=‘#‘></a>
  52. </div>
  53. <script>
  54. function getCurrentPage(index){
  55. var a = document.getElementById("indexPageHref");
  56. a.href = ‘${pathurl}?pageAction=gopage&pageKey=‘+index+‘${urlParams}‘;
  57. a.setAttribute("onclick",‘‘);
  58. a.click("return false");
  59. }
  60. function setEveryPage(everyPage){
  61. var a = document.getElementById("indexPageHref");
  62. var currentPage = document.getElementById(‘indexChange‘).value;
  63. a.href = ‘${pathurl}?pageAction=setpage&pageKey=‘+everyPage+‘${urlParams}‘;
  64. a.setAttribute("onclick",‘‘);
  65. a.click("return false");
  66. }
  67. function sortPage(sortName){
  68. var a = document.getElementById("indexPageHref");
  69. a.href = ‘${pathurl}?pageAction=sort&pageKey=‘+sortName+‘${urlParams}‘;
  70. a.setAttribute("onclick",‘‘);
  71. a.click("return false");
  72. }
  73. </script>
  74. 
    

    1. 使用阿里巴巴Druid连接池(高效、功能强大、可扩展性好的数据库连接池、监控数据库访问性能、支持Common-Logging、Log4j和JdkLog,监控数据库访问)
    2. 提供高并发JMS消息处理机制
    3. 所有功能模块化、所有模块服务化、所有服务原子化的方式,提供可拓展的服务模型,使程序稳定运行,永不宕机
    4. 提供Wink Rest、Webservice服务,故可作为独立服务平台部署

    框架整合:

    Springmvc + Mybatis + Shiro(权限) + REST(服务) + WebService(服务) + JMS(消息) + Lucene(搜搜引擎) + Quartz(定时调度) + Bootstrap Html5(支持PC、IOS、Android)

    框架简介:


    项目Maven构建,真实大型互联网架构,做到高并发,大数据处理,整个项目使用定制化服务思想,提供模块化、服务化、原子化的方案,将功能模块进行拆分,可以公用到所有的项目中。架构采用分布式部署架构,所有模块进行拆分,使项目做到绝对解耦,稳定压倒一切~~

    持续集成:

    1. 我的待办工作流服务(提供Webservice服务)

    2. 我的待办工作流集成JMS消息服务(支持高并发,可支持成千上万系统集成)

    3. 我的任务提供Rest服务,完成日常的工作管理,通过定时调度平台,动态生成我的任务、循环周期任务、定时邮催提醒完成任务等

    4. 文件上传、多线程下载服务化、发送邮件、短信服务化、部门信息服务化、产品信息服务化、信息发布服务化、我的订阅服务化、我的任务服务化、公共链接、我的收藏服务化等

    系统模块:

     1.  用户管理:

    用户信息管理(添加、删除、修改、用户授权、用户栏目管理、查询等)

    用户组管理(添加、删除、修改、用户组栏目授权,栏目授权、查询、用户组人员添加查询等)

    用户角色管理(添加、删除、修改、用户角色授权、用户角色栏目信息查询设置等)
     2.  文章管理:

    栏目管理:查询无限极栏目树、创建无限极栏目树分类(导航栏目、图片列表栏目、文章列表栏目、文章内容栏目等)、删除、修改栏目信息。

    文章管理:创建、删除、修改文章,多维度文章查询,包括已发布、未发布、所有文章等。文章富文本编辑器、文章多文件上传、文章状态控制等。
    3.  系统设置:

    数据字典管理:支持中、英文信息,支持无限级别分类配置,动态控制是否可用等。

    部门信息管理:支持中、英文无限级别部门信息增加,删除,修改操作,部门列表、树心查询等。

    日志管理:系统日志列表查询、在线查看、在线下载等

    路线管理:集成百度地图API,提供线路查询管理功能

    Druid Monitor(监控):集成阿里巴巴连接池,提供在线连接池监控程序,包括:数据源、SQL监控、URL监控、Session监控、Spring监控等

    网站信息管理:通过系统配置文件进行网站内容操作,包括邮件服务器配置、公司基本信息配置等。

     4.  集成REST服务,可以用作独立服务平台(提供大量实例及测试平台,包括:文件上传下载、邮件短信发送、部门、产品、公共连接、我的收藏、我的任务、信息发布等)

     5.  集成Quartz调度,可以用作定时调度平台(动态配置调度类、调度时间,使程序自动执行某些业务)

     6.  Lucene搜索引擎,可以将文件资料索引化,支持文件内容搜索、关键字搜索、高亮关键字等,使信息在毫秒内提取查询出来

     7.  用户设置功能:包括修改用户信息,修改密码、发送消息,修改个人图片,查看角色、查看用户组,管理员修改角色、用户、用户组等。

     8.  集成Webservice平台,包括jaxws服务、CXF框架,配置双加密的权限认证。使服务集成更加安全。

     9.  Bootstrap html5提供了两套前台开环境,包括CMS和电子商务网站,使您的开发更加的简洁。

    技术点:

    1.  Springmvc + Mybatis集成、SpringSecurity权限控制、Spring AOP事务处理。

    2.   Wink Rest服务、Webservice服务:jaxws、CXF等

    3.  IO 流上传下载文件,多线程操作

    4.  发送邮件,配置邮件服务器,发基于html、纯文本格式的邮件

    5.  MD5加密 (登陆密码校验加密等),用户统一Session、Cookie管理,统一验证码校验等。

    6.  数据库连接池统一配置

    7.  Quartz定时调度任务集成(直接通过配置即可)

    8.  Httpclient破解验证码,登陆联通充值平台

    9.  汉字、英文拆分、可以用作文档关键字搜索等。

    10.  Base64图片处理,支持PC,Android,IOS

    11.  Service Socket 、Client Socket 通信技术(已经做过GPRS数据获取,并用到了项目中)

    12.  提供大量工具类,可以直接使用

    13.  Maven项目构建,您可以直接做架构,可以提升自己的学习能力,使您成为真正的架构师。

时间: 2024-08-03 14:35:42

SpringMVC3.0+MyIbatis3.0(分页示例)【转】的相关文章

SpringMVC3.0+MyIbatis3.0(分页示例)

参考资料 1 ibatis2.x与mybatis(ibatis3.x)的比较 http://zhaohe162.blog.163.com/blog/static/382167972011111114742371/2 MyBatis学习 之 三.动态SQL语句 http://limingnihao.iteye.com/blog/782190主要使用Oracle的三层sql实现分页! 一 环境:XP3+Oracle10g+MyEclipse6+(Tomcat)+JDK1.5 二 工程相关图片: 1

微软企业库5.0 调用 MySql 分页存储过程

1.需要完成两个前置条件后才可以使用 微软企业库5.0 调用 MySql 存储过程 微软企业库5.0 支持 MySql MySql 分页存储过程 2.需要添加一个继承 IParameterMapper 接口的类分配查询参数 using System.Data; using System.Data.Common; using Microsoft.Practices.EnterpriseLibrary.Data; using Grass.Extend; namespace Grass.MySqlDa

示例Oracle 10.2.0.1.0升级到10.2.0.4.0一例

1.查看当前系统版本 [[email protected] Disk1]$ sqlplus '/as sysdba' SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jan 15 16:21:40 2015 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.

SSRS 2012 聚合函数 -- 指定分页示例

SSRS 2012 聚合函数 -- 指定分页示例 在一般报表中,若是使用者希望明确数据行能够以每20笔一页的方式呈现.也可以利用刚才介绍的Rownumber函数. 步骤1: 利用刚才隔行换色示例的报表,在产品大类组外加入父组,并在组对象的表达式方格中写入: =Rownumber(Nothing)\20 步骤2: 在设置组时,请勿勾选"添加组页眉"与"添加组页脚"选项,同时请将系统自动产生的组数据行删除. 步骤3: 此外,在产生组时,系统会自动把组定义式作为排序的依据

MvcPager 概述 MvcPager 分页示例 — 标准Ajax分页 对SEO进行优化的ajax分页 (支持asp.net mvc)

该示例演示如何使用MvcPager最基本的Ajax分页模式. 使用AjaxHelper的Pager扩展方法来实现Ajax分页,使用Ajax分页模式时,必须至少指定MvcAjaxOptions的UpdateTargetId属性,该属性值即是分页后要通过Ajax来更新的 DOM 元素的 ID. Ajax.Pager()方法返回AjaxPager对象,您可以通过Ajax.Pager()方法的重载来传递PagerOptions和MvcAjaxOptions参数,也可以通过新的AjaxPager的Opti

SenchaTouch2.3.1 中使用listpaging以及pullrefresh插件 做的分页示例

本实例其实也比较简单,自己定义一个PullRefreshFn插件继承Ext.plugin.PullRefresh. 主要给其添加了refreshFn下拉监听事件.listpaging插件未做任何修改.再将这两个插件添加到 list中. 本例未采用MVC模式. app.js代码如下: Ext.require(['Ext.form.Panel', 'Ext.data.Store', 'Ext.dataview.DataView']); //------------------------------

c# .net 3.5 4.0 4.5 5.0 6.0各个版本新特性战略规划总结【转载】

引用:http://blog.csdn.net/attilax/article/details/42014327 c# .net 3.5 4.0 各个版本新特性战略规划总结 1. --------------.Net Framework版本同CLR版本的关系1 2. paip.------------SDK2.0功能-------------2 2.1. 泛型:2 3. --------------sdk3.0  增加了以下功能..2 3.1. LINQ 3 4.  ----------sdk4

Atitit jquery &#160;1.4--v1.11 &#160;v1.12 &#160;v2.0 &#160;3.0 的新特性

Atitit jquery  1.4--v1.11  v1.12  v2.0  3.0 的新特性 1.1. Jquery1.12  jQuery 2.2 和 1.12 新版本发布 - OPEN资讯.html   2016.11 1.1.1. jQuery.htmlPrefilter()1 1.2. 2016.7  jq3.0 新特性1 1.3. Jq3.1新特性 jQuery 3.1.1 发布了,该版本包括一些 BUG 修复和改进.3 1.1. Jquery1.12  jQuery 2.2 和

source $0 &amp; bash $0

bash file.sh这种形式启动时,$0才被设置成文件名. source是bash的内建命令,把文件读取到当前bash中执行,相当于在当前bash手动输入命令,所以$0是bash. 示例代码如下: a.sh echo "in a.sh. \$0 is: $0" b.sh echo "in b.sh. \$0 is: $0" . ./a.sh 运行如下: lxw ~$ echo $0 bash lxw ~$ source a.sh in a.sh. $0 is: