`
morning2008
  • 浏览: 112648 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

iBATIS 分页处理

 
阅读更多

ibatis分页实现主要步骤:

a. 创建Page类。
b.创建bean类,并继承Page类。
b. 在dao层,定义两个方法。并实现该方法。
c. 在业务层,同样定义两个方法。并实现它。
d. 在配置文件中注入有关的page类。并设置相应的get和set方法。
e. 在action中调用有关的方法。
f.进行配置文件的设置。


详细步骤
1. Page类
package com.exeerp.sm.bean;
public class Page
{
private int pagesize;//单页记录
private int currentpage = 1;//当前页面
private int countdate;//总记录数
private int lastPage;
private int nextPage;
private int countPage;
public int getCurrentpage()
{
return currentpage;
}
public void setCurrentpage(int currentpage)
{

if(currentpage>getCountpage())
{
this.currentpage = getCountpage();
}else {
if(currentpage < 1)
{
this.currentpage = 1;
}
else
{
this.currentpage = currentpage;
}
}
}
public int getPagesize() {
return pagesize;
}
public void setPagesize(int pagesize) {
this.pagesize = pagesize;
}
public int getCountdate()
{
return countdate;
}
public void setCountdate(int countdate)
{
this.countdate = countdate;
}
//由记录数设定有关的页面数。
public int getCountpage()
{
int i = this.countdate / this.pagesize;
if((this.countdate % this.pagesize)!=0)
{
i+=1;
}
return i;
}
public int getLastPage()
{
return this.getCurrentpage()-1;
}
public int getNextPage()
{
return this.getCurrentpage()+1;
}
//给ibatis用数据
public int getCurrent()
{
return (this.currentpage-1)*pagesize;
}
public int getNext() {
return this.currentpage*pagesize;
}
public int getCountPage() {
return countPage;
}
public void setCountPage(int countPage) {
this.countPage = countPage;
}
public void setLastPage(int lastPage) {
this.lastPage = lastPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}

}


2. 创建bean类,并继承Page类
package com.exeerp.sm.bean;
import com.exeerp.sm.bean.Page;
import java.util.*;
/**
* 实体类 审批流程信息描述
*

*/
public class Flow extends Page
{
//审批编号
private String flowId;
//审批名称
private String flowName;
//审批路径
private String flowUrl;
//审批描述
private String flowClass;
public String getFlowId() {
return flowId;
}
public void setFlowId(String flowId) {
this.flowId = flowId;
}
public String getFlowName() {
return flowName;
}
public void setFlowName(String flowName) {
this.flowName = flowName;
}
public String getFlowUrl() {
return flowUrl;
}
public void setFlowUrl(String flowUrl) {
this.flowUrl = flowUrl;
}
public String getFlowClass() {
return flowClass;
}
public void setFlowClass(String flowClass) {
this.flowClass = flowClass;
}




}


3.在dao层,定义两个方法,并实现该方法

dao层接口
package com.exeerp.sm.dao;
import java.util.List;
import com.exeerp.pub.exception.BizException;
import com.exeerp.pub.exception.DaoException;
import com.exeerp.sm.bean.Flow;;
public interface FlowDAO
{
public List getPageList(Object obj)throws BizException, DaoException;
public int getCountSize(Object obj)throws BizException, DaoException;

}
dao层接口实现
package com.exeerp.sm.dao.impl;
import java.util.*;
import com.exeerp.sm.bean.Flow;
import com.exeerp.sm.dao.FlowDAO;
import com.exeerp.pub.dao.AbstractBaseDAO;
import com.exeerp.pub.exception.BizException;
import com.exeerp.pub.exception.DaoException;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
/**
* 审批流程管理数据持久层实现
*

*/
public class FlowDAOImpl extends AbstractBaseDAO implements FlowDAO
{
public List getPageList(Object obj)throws BizException, DaoException
{
return this.getSqlMapClientTemplate().queryForList("select-Flow", obj);
}
public int getCountSize(Object obj)throws BizException, DaoException
{

return(Integer)this.getSqlMapClientTemplate().queryForObject("selectcountsize-Flow");
}
}


4.在业务层,同样定义两个方法。并实现它。


package com.exeerp.sm.biz;
import java.util.List;
import com.exeerp.sm.bean.Flow;
import com.exeerp.pub.exception.BizException;
import com.exeerp.pub.exception.DaoException;
/**
* 业务层接口 审批流程信息接口
*

*/
public interface FlowManager
{

public List<Flow> findAll(Object obj)throws BizException,DaoException,Exception;
public int getCountSize(Object obj)throws BizException,DaoException;
}
业务层实现类
package com.exeerp.sm.biz.impl;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.BeanFactory;
org.springframework.context.support.ClassPathXmlApplicationContext;
import com.exeerp.sm.dao.*;
import com.exeerp.sm.bean.Flow;
import com.exeerp.sm.biz.*;
import com.exeerp.pub.exception.BizException;
import com.exeerp.pub.exception.DaoException;
import com.exeerp.pub.util.ExceptionMessage;
import java.util.*;
/**
* 审批环节管理业务逻辑层实现
*

*/
public class FlowManagerImpl implements FlowManager
{
static Logger logger = Logger.getLogger(FlowManagerImpl.class);
private FlowDAO flowDao;

public int getCountSize(Object obj)throws BizException,DaoException
{
return flowDao.getCountSize(obj);
}
public List<Flow> findAll(Object obj)throws BizException,DaoException,Exception
{
List<Flow> all=new ArrayList();
try
{
//all=flowDao.findAll(obj);
all = flowDao.getPageList(obj);
if(all!=null)
{
System.out.println("-----FlowManagerImpl.findAll()"+all);
}
}
catch(Exception ex)
{
ex.printStackTrace();

}
return all;
}

public FlowDAO getFlowDao() {
return flowDao;
}
public void setFlowDao(FlowDAO flowDao) {
this.flowDao = flowDao;
}
}



Action类:
package com.exeerp.sm.ctrl;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.exeerp.sm.biz.FlowManager;
import com.exeerp.sm.dao.*;
import com.exeerp.pub.action.BaseAction;
import com.exeerp.pub.exception.BizException;
import com.exeerp.pub.exception.DaoException;
import com.exeerp.pub.util.ExceptionMessage;
import com.exeerp.sm.bean.*;
import org.apache.struts2.ServletActionContext;//引出request对象
import java.io.*;
/**
* Action类 审批环节信息管理
*

*/
public class FlowManagerAction extends BaseAction
{
//记录日志信息
static Logger logger = Logger.getLogger(FlowManagerAction.class);
//引用的业务层的对象,
private FlowManager flowManager;//
//引用审批的bean对象
private Flow flow;
private List<Flow> all;
private final static int pagesize = 10;
private int countdate;//总记录
private Page page;//在action中注入该对象
public List<Flow> getAll()
{
return all;
}
public void setAll(List<Flow> all)
{
this.all = all;
}
public FlowManager getFlowManager() {
return flowManager;
}
public void setFlowManager(FlowManager flowManager) {
this.flowManager = flowManager;
}
public Flow getFlow() {
return flow;
}
public void setFlow(Flow flow) {
this.flow = flow;
}
public int getCountdate() {
return countdate;
}
public void setCountdate(int countdate) {
this.countdate = countdate;
}
public Page getPage() {
return page;
}
public void setPage(Page page) {
this.page = page;
}
public static int getPagesize() {
return pagesize;
}
/**
* 显示所有的审批流程信息
* @return String SUCCESS则查找成功,反之查找失败。
* @throws Exception
*/
public String findAll()throws Exception
{
String result=this.ERROR;
try
{
//查询并获取该记录数
countdate = flowManager.getCountSize(new Flow());
flow.setPagesize(10);
flow.setCountdate(countdate);
all=flowManager.findAll(flow);
if(all.size()>0)
{
result=this.SUCCESS;
//保存查找的对象到request
ServletActionContext.getRequest().setAttribute("all",all);
}
}
catch (BizException e)//进行业务层异常的捕获
{
e.printStackTrace()
;
logger.error(e.getMessage());
this.setMessage(e.getMessage());
result ="error";
}
catch (DaoException e) //进行数据访问层异常的捕获
{
e.printStackTrace();
logger.error(e.getMessage());
this.setMessage(e.getMessage());
}
catch (Exception e)//进行其他异常的捕获
{
e.printStackTrace();
logger.error(ExceptionMessage.getMessage("common.serverException"));
this.setMessage(e.getMessage());
}
finally
{
return result;
}
}


Spring的xml的配置:
<bean id="flow" class="com.exeerp.sm.bean.Flow"></bean>
<bean id="page" class="com.exeerp.sm.bean.Page"></bean>

<bean id="app-FlowManagerAction" class="com.exeerp.sm.ctrl.FlowManagerAction" scope="prototype">
<property name="flowManager" ref="flowManager"/>
<property name="flow" ref="flow"/>
<property name="page" ref="page"/>
</bean>

Ibetis配置:
<!-- 显示所有的审批信息 -->
<select id="select-Flow" resultClass="hashmap" parameterClass="Flow">

<![CDATA[
select * from (
select ROWNUM r,t.* from (
select * from Pub_Flow ) t)
where r > #current# and r <= #next#
]]>
<!-- 显示时只要修改对应的表名即可 -->
<!-- 注:t代表select * from Pub_Flow的字符集
t.* 代表他t下的所有字符集
ROWNUM :行数
current next起止页


-->
</select>
<select id="selectcountsize-Flow" resultClass="Integer">
<![CDATA[select count(*) from Pub_Flow ]]>
</select>



Main.jsp页面:
<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@page import="com.exeerp.sm.bean.Page"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ page import="java.util.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>审批流程管理</title>
<link href="css/style.css" rel="stylesheet"/>
<script language="JavaScript" type="text/javascript">

function choice(who)//全选和反选
{
var inputs=document.getElementsByName("check");
var selectedNum = 0;
for (var j=0;j<inputs.length;j++) //获取选中数量
{
if (inputs[j].checked == true) {selectedNum += 1;}
}
if (selectedNum = inputs.length) {who = 0;} //如果checkbox处于全部选中状态,则实现取消全选
if (who == 1) //全选
{
for (var i=0;i<inputs.length;i++)
{inputs.checked = true;}
}
else //反选
{
for (var i=0;i<inputs.length;i++)
{inputs.checked = !(inputs.checked);}
}
}
function panduan()//在删除删除进行选中的判定
{
var cked = false;
var inputs=document.getElementsByName("check");
var selectedNum = 0;
for (var j=0;j<inputs.length;j++) //获取选中数量
{
if (inputs[j].checked == true)
{
selectedNum += 1;
}
}
if (selectedNum==0) {
alert("必须选择一个");
return false;
}else{
if(confirm("您确定要删除"))
{
cked=true;
return true;
}else{
return false;
}

}
}
function selOpenPage()//选择有关的页面数时,进行页面的跳转
{
var aa=document.getElementById("selpage").value;//获取选项的值
document.location.href="findAllAction-Flow.action?flow.currentpage="+aa; //转向查询所有的action并传递值
}
</script> </head>


<body>
<style>
body{
text-align:center;
}

.datatable{
border:1px solid #d6dde6;
border-collapse:collapse;
}
.datatable td{
border:1px solid #d6dde6;
text-align:right;
padding:4px;
}

.datatable th{
border:1px solid #828282;
background:#bcbcbc;
font-weight:bold;
text-align:left;
padding:4px;
}
.datatable caption{
font:bold 1.9em "Times New Roman",Times,serif;
background:#b0c4de;
color:333517;
border:1px solid #78a367;
}

.datatable tr:hover, .datatable .highlight{
background:#ffff00;

}
.altrow{
background:#eefeef;
color:#000000;
}
</style>
<%int i=1;%>
你好
<h3><a href="flowadd.jsp">新增审批流程信息</a></h3>
<a href="../sm_flowstep/findAllAction-Flowstep.action?flowstep.currentpage=1">进入审批环节管理主页</a>
<a href="../sm_flowstepemp/findAllAction-Flowstepemp.action?flowstepemp.currentpage=1">进入审批环节处理管理主页</a>
<a href="../sm_coderule/findAllAction-Coderule.action?coderule.currentpage=1">进入编码规则管理主页</a>
<s:form theme="simple" action="./deleteAction-Flow.action" onsubmit="return panduan()">
<table>
<tr height="20px" bgcolor="red">
<td>选择<br></td>
<td>序号<br></td>
<td>审批编号<br></td>
<td>审批名称<br></td>
<td>审批路径<br></td>
<td>审批描述<br></td>
<td>修改<br></td>
<td>添加审批环节<br></td>
</tr>
<s:if test="#request.all==null">
<tr>
<td>记录不存在!!!</td>
</tr>
</s:if>
<s:iterator value="#request.all">
<tr onmouseover="this.style.backgroundColor='#cccccc'" onmouseout="this.style.backgroundColor=''">
<td><s:checkbox name="check" id="check"fieldValue="%{FLOWID}" > </s:checkbox> <br></td>
<td><%=i++%></td>
<td><s:property value="FLOWID"/></td>
<td><s:property value="FLOWNAME"/></td>
<td><s:property value="FLOWURL"/></td>
<td><s:property value="FLOWCLASS"/></td>
<td><a href="findByIdAction-Flow.action?id=<s:property value="FLOWID"/>">修改</a><br></td>
<td><a href="../sm_flowstep/flowstepadd.jsp?id=<s:property value="FLOWID"/>">添加审批环节</a><br></td>
</tr>
</s:iterator>

<tr><td><s:submit value="删除" onclick="return panduan()"/></td>
<td><s:if test="#request.flow.currentpage>1"><a href="findAllAction-Flow.action?flow.currentpage=1">首页</a></s:if>
<s:if test="#request.flow.currentpage>1"><a href="findAllAction-Flow.action?flow.countpage=<s:property value="flow.lastPage"/>">上一页</a></s:if>
<s:if test="#request.flow.countpage>1 && #request.flow.currentpage<#request.flow.countpage"><a href="findAllAction-Flow.action?flow.currentpage=<s:property value="flow.nextPage"/>">下一页</a></s:if>
<s:if test="#request.flow.currentpage<#request.flow.countpage"><a href="findAllAction-Flow.action?flow.currentpage=<s:property value="flow.countpage"/>">尾页</a></s:if>
<s:property value="flow.currentpage"/>/<s:property value="flow.countpage"/>
</td>
<td width="80px">
共<s:property value='countdate'/>条数据</td>
<%

int maxPage=(Integer)request.getAttribute("flow.countpage");
int cur=(Integer)request.getAttribute("flow.currentpage");

%>
<td>跳转到
<select name="selpage" id="selpage" onChange="selOpenPage()">
<%

for (int x = 1; x <= maxPage; x++) {
%>
<option value="<%=x%>"
<%=cur== x ? "selected"
: ""%>><%=x%></option>
<%
}
%>
</select>
页</td>
<td><input type="button" value="全选/全不选"onclick="choice(1)"/>|</td>
<td><input type="button" value="反 选"onclick="choice(0)"/></td>
</tr>
</table>
</s:form>
</body>
</html>
<script language="javascript">
onload=function(){
var rows=document.getElementsByTagName("tr");
for(var i=1;i<rows.length;i++)
{
rows.index=i
rows.className=(i%2==0)?"":"altrow"
rows.onmouseover=function()
{
this.className="highlight";
}
rows.onmouseout=function()
{
this.className=this.index%2==0?"":"altrow";
}
}
}
</script>

分享到:
评论

相关推荐

    对IBatis分页的改进,使ibatis支持hibernate式的物理分页

    公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在争议的地方,其中一个不方便的地方就是分页,目前的处理方式都是在sqlMap中写针对特定数据库的物理分页Sql语句,对于...

    mysql,jdbc详解,与ibatis对比。批量查询,分页处理。

    mysq增删改查,jdbc 驱动加载 各个类和接口详解,与ibatis对比。批量查询,分页处理。

    iBatis开发指南和一个iBatis实例

    其中包含iBatis精讲PDF iBatis实例 iBatis开发指南 iBatis分页 spring+iBatis处理1对多数据表实例等等若干帮助文档。希望可以帮助大家学习iBatis...

    struts2+spring+ibatis学生管理demo

    struts2整合spring、ibatis学生信息管理系统。事务管理、分页处理

    spring batch 学习多种场景练习demo项目源码

    spring batch 学习多种场景练习demo项目源码,包括: 1.读取文件--处理--写入文件; 2.读取文件--处理--写入数据库 ; 3.读数据库--处理--写入数据库;...Hibernate 游标,Hibernate分页,ibatis分页,jpa分页。

    Bootstrap分页

    //username必须要和ibatis配置的property=username一致 Integer totalCount = this.userService.getUserCount(map); this.initPage(map, pageNum, pageSize, totalCount); List list = this.userService....

    基于jsp的团购网站

    完完全全可以用的,放心下载! 1、日期控件 2、ajax 其他框架 ext ...6、各种数据库的分页方法 7、数据库的优化 8、海量数据的处理 9、sql 注入 10、java 设计模式 11、iBatis 使用 12、webservice 13、Hessian

    springmybatis

    mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis ...

    DBKING使用指南

     这类工具已经很多了,比如大家耳熟能详的Hibernate、iBatis,包括Apache的DBUtils、Spring的JdbcTemplate。为什么我们还要推出db-unifier这样一个功能类似的东西呢?  这些工具的主要目的都是对JDBC进行包装...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    B .iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。 C .定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。 D .可使用存储过程写分页逻辑...

    AppFramework_V1.0

    这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在DataGrid里或界面上。有一种规避的方法,就是避免向数据库插入NULL,即要求所有业务数据入库的值都不为空。但这样作实际上是限制...

    AppFramework_V1.0_New

    这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在DataGrid里或界面上。有一种规避的方法,就是避免向数据库插入NULL,即要求所有业务数据入库的值都不为空。但这样作实际上是限制...

    bug解决思路.txt

    import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; @Repository @Mapper public interface SysLogInfoDao { // ...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    这样,程序就要对int.MinVaue这个值进行特殊处理,例如不能把int.MinValue直接显示在DataGrid里或界面上。有一种规避的方法,就是避免向数据库插入NULL,即要求所有业务数据入库的值都不为空。但这样作实际上是限制...

    Spring面试题

    ☆ Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。 ☆ Spring Web 模块:...

    Java面试宝典2010版

    11、iBatis与Hibernate有什么不同? 12、写Hibernate的一对多和多对一双向关联的orm配置? 9、hibernate的inverse属性的作用? 13、在DAO中如何体现DAO设计模式? 14、spring+Hibernate中委托方案怎么配置? 15、...

    最新Java面试宝典pdf版

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

    Java面试笔试资料大全

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

    JAVA面试宝典2010

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

    Java面试宝典-经典

    11、iBatis与Hibernate有什么不同? 122 12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么...

Global site tag (gtag.js) - Google Analytics