- 浏览: 115280 次
- 性别:
- 来自: 合肥
最新评论
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进行分页处理。 首先,了解Ibatis的基本概念。Ibatis是由Apache基金会维护的一个开源项目,它是一...
标题中的“ibatis分页”指的是在使用iBATIS(一个SQL映射框架)时,如何实现数据库查询结果的分页显示。iBATIS通过XML配置文件或注解方式将Java代码与SQL语句分离,提供了更灵活的数据库操作方式。在处理大量数据时...
标题"ibatis分页功能"指的就是如何在iBATIS框架中实现数据库查询的分页效果。分页不仅提高了用户体验,还能减少不必要的数据库负载。 描述中提到,分页功能是通过`page.tld`标签实现的。`tld`文件是JSP Tag Library...
在IT行业中,分页是一种常见的数据处理技术,特别是在Web应用中,用于提高用户体验,避免一次性加载过多数据导致页面响应变慢。本项目基于ibatis框架实现了分页功能,覆盖了从底层数据库操作到页面展示的完整流程,...
为了简化代码,我们还可以自定义一个Ibatis分页插件,自动处理分页逻辑。例如,使用PageHelper插件,只需在配置中启用并设置相关参数,就可以自动实现分页。 四、总结 Ibatis实现分页技术主要依赖于SQL语句中的分页...
公司的大部分项目都开始使用IBatis作为O/R Mapping了,但是在使用的过程中也发现了很多不方便和存在争议的地方,其中一个不方便的地方就是分页,目前的处理方式都是在sqlMap中写针对特定数据库的物理分页Sql语句,对于...
本知识点将深入探讨如何在Struts2框架中结合iBatis实现基于Freemarker模板的分页功能。 首先,我们需要理解iBatis,它是一个轻量级的Java持久层框架,它提供了一个SQL映射框架,允许开发者将SQL语句与Java代码分离...
本篇文章将深入探讨如何在Xwork和iBatis的集成应用中实现分页功能,让开发者能够更高效地处理大量数据。 首先,让我们了解什么是分页。分页是网页显示大量数据时常用的一种技术,它将结果集分割成若干小部分(页)...
Ibatis会自动处理分页逻辑,返回指定页码的数据。 5. **处理结果**:在服务层或控制层,对返回的结果进行处理,如转换为对应的Java对象列表,或填充到视图模型中。 示例中的"ssi"可能是示例项目的名字,可能包含了...
在分页场景下,Struts2会接收用户传递的分页参数(如当前页数、每页条数等),并调用对应的业务逻辑进行处理。 Spring框架则作为一个全面的容器,管理着应用中的对象及其依赖关系。在本例中,Spring将用来注入...
在传统的iBatis框架中,分页通常采用逻辑分页的方式,即通过游标(ResultSet)来逐条处理数据,从而实现分页效果。这种方式虽然跨数据库兼容性好,但性能上不如数据库原生的物理分页高效。物理分页是直接在SQL语句中...
在处理大量数据时,分页查询是必不可少的功能,可以有效地减少数据库负载并提高用户体验。Ibatis.NET提供了分页查询的实现,下面我们将深入探讨如何在Ibatis.NET中实现分页。 首先,理解分页的基本概念。分页通常...
Ibatis分页技术的运用,不仅简化了数据库查询的复杂度,还极大地提升了数据处理的效率。通过上述步骤的实施,开发者可以轻松应对各种分页场景,同时通过合理的DTO设计和多结果集映射策略,进一步优化性能,确保系统...
Spring、iBatis和Oracle的结合提供了强大的数据处理能力。本文将深入探讨这些技术如何协同工作,实现高效的分页缓存策略。 首先,Spring是一个开源的Java框架,它为开发人员提供了依赖注入(DI)和面向切面编程...
本资源"ibatis mybatis 分页 crud 完整代码"包含了这两个框架在CRUD(创建、读取、更新、删除)操作以及分页功能上的实现,下面将详细介绍相关知识点。 1. **Ibatis**: Ibatis 是一款轻量级的Java ORM(对象关系...
通过在后台实现SQL的分页查询,Struts2和Spring配合处理请求参数,可以实现在前端展示分页结果。这不仅减少了网络传输的数据量,也使得用户能够更方便地浏览和查找所需信息。 6. **上传附件**:在很多应用场景中,...
Ibatis,作为一款轻量级的Java持久层框架,虽然功能强大,但在默认情况下,其分页方式是逻辑分页,即先查询所有数据,然后在应用程序层面进行分页处理,这种方式对于大数据量的查询来说,无疑会消耗大量的内存和CPU...
在IT行业中,数据库缓存是提高应用程序性能的关键技术之一,特别是在处理大量数据和频繁查询时。Ibatis,一个轻量级的Java持久层框架,通过与缓存系统结合,能够显著提升数据读取速度。本项目"ibatis_with_memcached...
"Ibatis连接Oracle的分页"是指利用Ibatis作为数据访问层,与Oracle数据库进行交互,并实现了分页查询功能。Oracle数据库支持多种分页方式,如ROWNUM伪列、ROWNUM配合子查询、ROW_NUMBER()窗口函数等。在这个项目中,...
- **分页处理**: 在处理大量数据时非常有用,尤其是对于Web应用中的数据展示。常用的分页技术包括使用`LIMIT`和`OFFSET`关键字来限制返回的结果集。 例如,要获取前10条记录,可以使用以下SQL命令: ```sql SELECT ...