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代码

packagecom.liuzd.ssm.web;

importjavax.servlet.http.HttpServletRequest;

importcom.liuzd.page.Page;

importcom.liuzd.page.PageState;

importcom.liuzd.page.PageUtil;

publicclassBaseController {

protectedPage executePage(HttpServletRequest request,Long totalCount){

if(null== totalCount){

totalCount = 0L;

}

/**页面状态,这个状态是分页自带的,与业务无关*/

String pageAction = request.getParameter("pageAction");

String value = request.getParameter("pageKey");

/**获取下标判断分页状态*/

intindex = PageState.getOrdinal(pageAction);

Page page =null;

/**

* index < 1 只有二种状态

* 1 当首次调用时,分页状态类中没有值为 NULL 返回 -1

* 2 当页面设置每页显示多少条: index=0,当每页显示多少条时,分页类要重新计算

* */

Page sessionPage = getPage(request);

if(index <1){

page = PageUtil.inintPage(totalCount,index,value,sessionPage);

}else{

page = PageUtil.execPage(index,value,sessionPage);

}

setSession(request,page);

returnpage;

}

privatePage getPage(HttpServletRequest request) {

Page page = (Page)request.getSession().getAttribute(PageUtil.SESSION_PAGE_KEY);

if(page ==null){

page =newPage();

}

returnpage;

}

privatevoidsetSession(HttpServletRequest request,Page page) {

request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY,page);

}

}

2 UserController.java

Java代码

packagecom.liuzd.ssm.web;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importjavax.annotation.Resource;

importjavax.servlet.http.HttpServletRequest;

importorg.springframework.stereotype.Controller;

importorg.springframework.web.bind.annotation.PathVariable;

importorg.springframework.web.bind.annotation.RequestMapping;

importorg.springframework.web.bind.annotation.SessionAttributes;

importorg.springframework.web.servlet.ModelAndView;

importcom.liuzd.page.Page;

importcom.liuzd.ssm.entity.User;

importcom.liuzd.ssm.service.UserService;

@Controller

@RequestMapping("/user")

@SessionAttributes("userList")

publicclassUserControllerextendsBaseController{

privateUserService userService;

publicUserService getUserService() {

returnuserService;

}

@Resource

publicvoidsetUserService(UserService userService) {

this.userService = userService;

}

@RequestMapping("/userList")

publicModelAndView userList(HttpServletRequest request){

Map params =newHashMap();

//添加查询条件

// ... params.put("name","jack");...

//获取总条数

Long totalCount =this.getUserService().pageCounts(params);

//设置分页对象

Page page = executePage(request,totalCount);

//如排序

if(page.isSort()){

params.put("orderName",page.getSortName());

params.put("descAsc",page.getSortState());

}else{

//没有进行排序,默认排序方式

params.put("orderName","age");

params.put("descAsc","asc");

}

//压入查询参数:开始条数与结束条灵敏

params.put("startIndex", page.getBeginIndex());

params.put("endIndex", page.getEndinIndex());

ModelAndView mv =newModelAndView();

//查询集合

List users =this.getUserService().pageList(params);

mv.addObject("userList",users);

mv.setViewName("userList");

returnmv;

}

}

3 UserMapper.java

Java代码

packagecom.liuzd.ssm.mapper;

importjava.util.List;

importjava.util.Map;

importorg.apache.ibatis.session.RowBounds;

importcom.liuzd.ssm.entity.User;

publicinterfaceUserMapper{

// .....

publicList pageList(Map params);

//分页总条数

publicLong pageCounts(Map p);

}

4 UserMapper.xml

Java代码


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

select ttt.* from(select tt.*,rownum rn from(select * from users


特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。

在开发时使用: $,方便调试sql,发布时使用: #

and name like #{name},

-->

and name like'%${name}%'

and sex = #{sex}

order by ${orderName} ${descAsc} )tt)ttt

rn > ${startIndex}


select count(*) from users

and name like #{name}

and sex = #{sex}

5 userList.jsp

Java代码

<%@ page language="java"pageEncoding="UTF-8"contentType="text/html; charset=UTF-8"%>

<%@ taglib uri="/WEB-INF/c.tld"prefix="c"%>

<%@ include file="/common/meta.jsp"%>

姓名${page.sortName eq"name"? page.sortInfo : page.defaultInfo}

年龄${page.sortName eq"age"? page.sortInfo : page.defaultInfo}

性别${page.sortName eq"sex"? page.sortInfo : page.defaultInfo}

地址${page.sortName eq"address"? page.sortInfo : page.defaultInfo}

操作

${user.name}

${user.age}

${user.sex eq1?"男": user.sex eq2?"女":"未知"}

${user.address}

hrf="${pageContext.request.contextPath}/user/toAddUser.do">添加

href="${pageContext.request.contextPath}/user/getUser/${user.id}.do">编辑

href="${pageContext.request.contextPath}/user/delUser/${user.id}.do">删除

返回

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

Java代码<%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>

<%@ taglib uri="/WEB-INF/c.tld"prefix="c"%>

共${page.totalCount}条记录 共${page.totalPage}页 每页显示${page.everyPage}条

当前第${page.currentPage}页

<<首页 <上页

<<首页

<上一页

||

下页> 尾页>>

下一页>

末页>>


onchange="getCurrentPage(this.value);">

第${index}页


每页显示:

${pageCount}条

function getCurrentPage(index){

var a = document.getElementById("indexPageHref");

a.href ='${pathurl}?pageAction=gopage&pageKey='+index+'${urlParams}';

a.setAttribute("onclick",'');

a.click("return false");

}

function setEveryPage(everyPage){

var a = document.getElementById("indexPageHref");

var currentPage = document.getElementById('indexChange').value;

a.href ='${pathurl}?pageAction=setpage&pageKey='+everyPage+'${urlParams}';

a.setAttribute("onclick",'');

a.click("return false");

}

function sortPage(sortName){

var a = document.getElementById("indexPageHref");

a.href ='${pathurl}?pageAction=sort&pageKey='+sortName+'${urlParams}';

a.setAttribute("onclick",'');

a.click("return false");

}

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项目构建,您可以直接做架构,可以提升自己的学习能力,使您成为真正的架构师。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 这部分主要是开源Java EE框架方面的内容,包括Hibernate、MyBatis、Spring、Spring ...
    杂货铺老板阅读 1,357评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 说实话,当我一篇不落地读完这些温暖得让人落泪的文字,我是有些羡慕潇潇和歌平的,她们有一位这么好的爷爷,何其幸运!我...
    简之宁阅读 461评论 8 14
  • 理解:在表单的验证过程中,我们不仅要验证是否为空,格式是否正确也非常重要。就像邮箱,如果我们没有格式验证的话,那么...
    snoweek阅读 466评论 0 2
  • 项目中使用了renderscript-v8.jar,在Eclipse中项目可以正常run,但是android st...
    MrRock阅读 1,972评论 0 2