- 浏览: 222944 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- tomcat (1)
- 线程 (1)
- java基础 (7)
- jsp、EL (1)
- JSON (1)
- Struts2 (14)
- properties (1)
- log4j (1)
- Hibernate (14)
- xml (1)
- 存储过程 (1)
- 数据库 (5)
- 动态参数传递 (1)
- webservice (1)
- Spring (10)
- jar包冲突 (1)
- js (8)
- jQuery (5)
- 动态代理技术 (1)
- 负载均衡 (1)
- WebLogic (1)
- 异常处理办法 (3)
- struts1 (4)
- url重写技术 (1)
- 聊天室 (1)
- ip地址 (2)
- html (4)
- ajax (1)
- 其他 (6)
- ibatis (6)
- oracle (2)
- 服务器 (1)
- 常见异常 (3)
- jms (1)
- 乱码 (2)
- web基础 (1)
- JPA (2)
- 开发软件 (3)
- MongoDB (1)
- play (1)
最新评论
-
whjpyyyy:
有用。。
Struts2的iterator各种用法 -
cuisuqiang:
关于pushlet的使用:http://cuisuqiang. ...
网页聊天室的原理
Ibatis分页 实例
查询分页ibtais SQL语句 支持模糊查询后分页
分页查询需要两条SQL语句
第一部查询所有记录总数
<select id="selectForCount-SysParam" resultClass="int">
<![CDATA[
SELECT count(*) from PUB_SYSPARAM
<!--下面动态构成查询条件,以及表名,可自行更改-->
FROM SM_Employee
]]>
<dynamic prepend="where">
<isNotEmpty prepend="and" property="employeeCode">
EmployeeCode like '%$ employeeCode$ %'
</isNotEmpty>
<isNotEmpty prepend="and" property="employeeName">
EmployeeName like '%$ employeeName$ %'
</isNotEmpty>
</dynamic>
</select>
分页查询 ,此SQL分页,采用3层嵌套查询。
用户之需要修改表名与字段名,和最里层(红字)的代码即可。(rownum rn)蓝色字体是所必须得。
此处传入的是一个MAP对象 MAP对象由 bean
<!-- 查询分页 -->
<select id="selectForPage-SysParam" resultClass="sysParam" parameterClass="hashmap">
<![CDATA[
SELECT *
FROM (SELECT row_.*, rownum rownum_ FROM(SELECT PUB_SYSPARAM.*,rownum rn from PUB_SYSPARAM
]]>
<![CDATA[
) row_ WHERE rownum <=#end#)WHERE rownum_ >#start#
]]>
<dynamic prepend="where">
<isNotEmpty prepend="and" property="employeeCode">
EmployeeCode like '%$ employeeCode$ %'
</isNotEmpty>
<isNotEmpty prepend="and" property="employeeName">
EmployeeName like '%$ employeeName$ %'
</isNotEmpty>
</dynamic>
<![CDATA[
) row_ WHERE rownum <= #end#) WHERE rownum_ > #start#
]]>
</select>
以下为源代码
package com.exeerp.pub.util;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
/**
* ibatis 分页组件
*
* 测试版1.1
* */
public class Paginated {
/**
* 得到sqlClient模版
*/
private SqlMapClientTemplate sqlClient;
/**
* 分页action URL地址
*/
private String url;
/**
* 页面显示条数
*/
private int pageSize;
/**
* 当前页面树
*/
private int currentPage;
/**
* 总记录数
*/
private int recordSum;
/**
* 页面总数
*/
private int pageSum;
/**
* 数据取读起点
*/
private int start;
/**
* 终点
*/
private int end;
/**
* 记录集对象
*/
private List<Object> recordList;
/**
* 分页对象
*/
private Object obj;
/**
* bean 数组对象
*/
private Object[] object;
/**
* 封装
*/
private Map<Object, Object> map;
/**
* 上下页
*/
private StringBuffer toHtml;
/**
* 查询总记录数sql名
*/
private String sqlCount;
/**
* 分页sql名
*/
private String sqlPage;
/**
* 构造函数
* @param sqlClient sqlMapClient 模版
* @param obj 查询对象
* @param currentPage 当前页面
* @param pageSize 页面大小
* @param url action地址
*/
public Paginated(SqlMapClientTemplate sqlClient, Object obj,
int currentPage, int pageSize, String url) {
this.sqlClient = sqlClient;
this.obj = obj;
this.currentPage = currentPage;
this.url = url;
this.pageSize = pageSize;
init();
execute();
}
/**
* 构造函数
*
* @param sqlClient
* sqlMapClient 模版
* @param currentPage
* 当前页面
* @param pageSize
* 分页每页显示数目
* @param url
* action 连接地址
* @param object
* 可以传入0个或多个对象(对应多对多的分页情况) 第一个对象为要查询的对象 其他为辅助
*/
public Paginated(SqlMapClientTemplate sqlClient, int currentPage,
int pageSize, String url, Object... object) {
this.sqlClient = sqlClient;
this.object = object;
this.currentPage = currentPage;
this.url = url;
this.pageSize = pageSize;
init(); // 初始化
}
/**
* 初始化信息
*/
private void init() {
try {
if (obj != null) {
objToMap();
} else {
obj2Map();
}
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 执行分页
*/
public void execute()
{
try
{
pageInfo();
toHtml();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 执行bean 对象封装 封装成map
*/
private void obj2Map() throws IllegalArgumentException,
IllegalAccessException, InvocationTargetException,
SecurityException, NoSuchMethodException {
map = new HashMap<Object, Object>();
for (Object objMap : object) {
Class clazz = null;
Method method;
String fieldNames[];
clazz = objMap.getClass();
Field[] fields = clazz.getDeclaredFields();
fieldNames = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
fieldNames = fields.getName();
}
for (int i = 0; i < fields.length; i++) {
String methodName = "get"
+ Character.toUpperCase(fieldNames.charAt(0))
+ fieldNames.substring(1);
method = clazz.getMethod(methodName, new Class[] {});
if (method.invoke(objMap, null) != null
&& !"".equals(method.invoke(objMap, null))) {
map.put(fieldNames, method.invoke(objMap, null));
}
}
}
}
/**
* 执行bean 对象封装 封装成map
*/
private void objToMap() throws SecurityException, NoSuchMethodException,
IllegalArgumentException, IllegalAccessException,
InvocationTargetException {
map = new HashMap<Object, Object>();
Class clazz = null;
Method method;
String fieldNames[];
clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
fieldNames = new String[fields.length];
for (int i = 0; i < fields.length; i++) {
fieldNames = fields.getName();
}
for (int i = 0; i < fields.length; i++) {
String methodName = "get"
+ Character.toUpperCase(fieldNames.charAt(0))
+ fieldNames.substring(1);
method = clazz.getMethod(methodName, new Class[] {});
if (method.invoke(obj, null) != null
&& !"".equals(method.invoke(obj, null))) {
map.put(fieldNames, method.invoke(obj, null));
}
}
}
/**
* 页面信息的计算
*/
private void pageInfo() throws SQLException
{
if (sqlCount == null)
{
if (obj == null)//分页对象为空
{
sqlCount = "selectForCount-"
+ object[0].getClass().getSimpleName();
}
else
{
sqlCount = "selectForCount-" + obj.getClass().getSimpleName();
}
}
//查询总记录数
this.recordSum = (Integer) sqlClient.queryForObject(sqlCount, map);
if (currentPage <= 0) {
currentPage = 1;
}
if (pageSize < 5) {
pageSize = 5;
}
this.pageSum = (recordSum + pageSize - 1) / pageSize;
if (currentPage > pageSum) {
currentPage = pageSum;
}
//进行翻页时序号数控制。
this.start = (currentPage - 1) * pageSize;
this.end = currentPage * pageSize;
}
/**
* 生成上下页
*/
private void toHtml()
{
toHtml = new StringBuffer();
String tempUrl = "";
Iterator iterator = map.entrySet().iterator();
String entryName;
if (obj != null)
{
entryName = obj.getClass().getSimpleName();
} else {
entryName = object[0].getClass().getSimpleName();
}
entryName = Character.toLowerCase(entryName.charAt(0))
+ entryName.substring(1);
while (iterator.hasNext()) {
Map.Entry entry = (Entry) iterator.next();
tempUrl += entryName + "." + entry.getKey().toString() + "="
+ entry.getValue().toString() + "&";
}
tempUrl = tempUrl + "currentPage=";
toHtml.append("共" + recordSum + "条记录 " + "当前是第" + currentPage
+ "页 共" + pageSum + "页");
if (currentPage > 1 && pageSum >= 2)//在当前页面大于1和总页面数大于2时才显示首页
{
toHtml.append("<a href='" + url + "?" + tempUrl + "1'>首页</a> ");
}
if (currentPage > 1) //在当前页面大于1显示上一页
{
toHtml.append("<a href='" + url + "?" + tempUrl + (currentPage - 1)
+ "'>上一页</a> ");
}
if (currentPage < pageSum && currentPage > 0) //在当前页面小于总页数,且当前页面大于零时,显示下一页。
{
toHtml.append("<a href='" + url + "?" + tempUrl + (currentPage + 1)
+ "'>下一页</a> ");
}
if (currentPage < pageSum) //在当前页面大于总页数时显示尾页
{
toHtml.append("<a href='" + url + "?" + tempUrl + pageSum
+ "'>尾页</a> ");
}
toHtml.append("<script>");
toHtml.append("function goto(){");
toHtml.append("var currentpage=document.getElementById('currentPage').value;");
toHtml.append("window.location.href='"+url+"?"+tempUrl+"'+currentpage;");
toHtml.append("}");
toHtml.append("function num(){");
toHtml.append("return ((event.keyCode >= 48) && (event.keyCode <= 57));");
toHtml.append("}");
toHtml.append("</script>");
//选择页面进行转页
toHtml.append(" 转到第<input type='text' name='currentPage' id='currentPage' value='"+currentPage+"'size='2' onkeypress='event.returnValue=num();'>页 <input type='button' value='跳转'onclick='goto()'>");
}
/**
* 取读记分页后录集
* @return
*/
public List getRecordList()
{
map.put("start", start);
map.put("end", end);
if (sqlPage == null)
{
if (obj == null)
{
sqlPage = "selectForPage-"
+ object[0].getClass().getSimpleName();
} else {
sqlPage = "selectForPage-" + obj.getClass().getSimpleName();
}
}
this.recordList = sqlClient.queryForList(sqlPage, map);
return recordList;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSum() {
return pageSum;
}
public void setPageSum(int pageSum) {
this.pageSum = pageSum;
}
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public int getRecordSum() {
return recordSum;
}
public void setRecordSum(int recordSum) {
this.recordSum = recordSum;
}
public StringBuffer getToHtml() {
return toHtml;
}
public String getSqlCount() {
return sqlCount;
}
public void setSqlCount(String sqlCount) {
this.sqlCount = sqlCount;
}
public String getSqlPage() {
return sqlPage;
}
public void setSqlPage(String sqlPage) {
this.sqlPage = sqlPage;
}
}
Action类:
package com.exeerp.sm.ctrl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
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.pub.util.Paginated;
import com.exeerp.sm.bean.SysParam;
import com.exeerp.sm.biz.SysParamManager;
import com.opensymphony.xwork2.ActionContext;
import com.exeerp.pub.dao.SwitchDao;
/**
* Action类 调用系统参数业务层的方法。
* @author:
* 创建时间:2009-04-30
*/
public class SysParamAction extends BaseAction
{
//日志对象
static Logger logger = Logger.getLogger(SysParamAction.class);
//业务层SysParamManager对象
private SysParamManager sysParamManager;
private SysParam sysParam;
//设置当前页
private int currentPage=1;
//分页对象
private Paginated paging;
private List<SysParam> list;
/** 查询所有的系统参数信息
* @return 如果更新成功,则返回SUCCESS
*/
public String GetPage()
{
try
{
if(sysParam==null)
{
sysParam=new SysParam();
}
//调用业务层的获取所有页并进行分页的数据
paging = sysParamManager.getAllSysParamMgr(sysParam,20,currentPage,"sm/sm_sysParam/getAllSysParam.action"); //分别传递分页对象,页面记录数,当前页面数,和要访问的url地址
list = (List<SysParam>)(paging.getRecordList());//获取对象并进行保存
//保存获得的当前的数据
this.getRequest().setAttribute("list", list);
return SUCCESS;
}
catch (BizException e)
{
logger.error(e.getMessage());
e.printStackTrace();
this.setMessage(e.getMessage());
return INPUT;
}
catch (DaoException e)
{
logger.error(e.getMessage());
this.setMessage(e.getMessage());
return INPUT;
}
catch (Exception e)
{
e.printStackTrace();
logger.error(ExceptionMessage.getMessage("common.serverException"));
this.setMessage(e.getMessage());
return INPUT;
}
}
public int getCurrentPage()
{
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public Paginated getPaging() {
return paging;
}
public void setPaging(Paginated paging)
{
this.paging = paging;
}
public SysParamManager getSysParamManager() {
return sysParamManager;
}
public void setSysParamManager(SysParamManager sysParamManager) {
this.sysParamManager = sysParamManager;
}
public SysParam getSysParam() {
return sysParam;
}
public void setSysParam(SysParam sysParam) {
this.sysParam = sysParam;
}
public List<SysParam> getList() {
return list;
}
public void setList(List<SysParam> list) {
this.list = list;
}
}
3.Ibetis文件设置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<!-- 系统参数sql语句 -->
<sqlMap>
<typeAlias alias="sysParam" type="com.exeerp.sm.bean.SysParam"/>
<!-- 查询分页 -->
<select id="selectForPage-SysParam" resultClass="sysParam" parameterClass="hashmap">
<![CDATA[
SELECT *
FROM (SELECT row_.*, rownum rownum_ FROM(SELECT PUB_SYSPARAM.*,rownum rn from PUB_SYSPARAM
]]>
<![CDATA[
) row_ WHERE rownum <=#end#)WHERE rownum_ >#start#
]]>
</select>
<!-- 系统参数模糊查询记录数 -->
<select id="selectForCount-SysParam" resultClass="int" >
<![CDATA[
SELECT count(*) from PUB_SYSPARAM
]]>
</select>
<!-- 查询所有系统参数 -->
<select id="select-SysParam" resultClass="sysParam" parameterClass="sysParam">
<![CDATA[
SELECT *
FROM (SELECT row_.*, rownum rownum_ FROM(SELECT PUB_SYSPARAM.*,rownum rn from PUB_SYSPARAM
]]>
</select>
</sqlMap>
Struts.xml配置:
<!-- 系统参数管理 -->
<package name="com.exeerp.sm.ctrl.SysParamAction" extends="struts-default">
<!-- 查询所有的系统参数 -->
<action name="getAllSysParam" class="com.exeerp.sm.ctrl.SysParamAction"
method="GetPage">
<result name="success">/sm/sysparam/SysParamManage.jsp</result>
<result name="input">/sm/sm_sysPa</result>
</action>
</package>
5.业务方法和实现:
package com.exeerp.sm.biz;
import java.util.List;
import com.exeerp.pub.biz.BaseManager;
import com.exeerp.pub.exception.BizException;
import com.exeerp.pub.exception.DaoException;
import com.exeerp.pub.util.Paginated;
import com.exeerp.sm.bean.SysLog;
import com.exeerp.sm.bean.SysParam;
/**
* 系统参数业务层接口
* @author:
* 创建时间:2009-04-30
*/
public interface SysParamManager extends BaseManager {
/**
* 查询所有的系统参数信息
* @return
* @throws DaoException
*/
public Paginated getAllSysParamMgr(SysParam sysLog,int pageSize,int currentPage,String url)throws DaoException,BizException;
}
实现:
package com.exeerp.sm.biz.impl;
import java.util.List;
import org.apache.log4j.Logger;
import com.exeerp.pub.biz.AbstractBaseManager;
import com.exeerp.pub.exception.BizException;
import com.exeerp.pub.exception.DaoException;
import com.exeerp.sm.bean.SysLog;
import com.exeerp.sm.bean.SysParam;
import com.exeerp.sm.biz.SysParamManager;
import com.exeerp.sm.dao.SysParamDAO;
import com.exeerp.pub.util.ExceptionMessage;
import com.exeerp.pub.util.Paginated;
/**
* 系统参数业务实现层实现
* @author:
* 创建时间:2009-04-30
*
*/
public class SysParamManagerImpl extends AbstractBaseManager implements
SysParamManager
{
/**
* log4j用于在程序错误时,在控制台打印错误信息
*/
static Logger logger=Logger.getLogger(SysParamManagerImpl.class);
/**
* 将SysParamDAO接口作为属性
*/
private SysParamDAO sysParamDAO;
/**
* 查询所有的系统参数信息
* @param SysParam 系统参数对象
* @return 如果查找成功,则返回SysParam对象,否则返回null
*/
public Paginated getAllSysParamMgr(SysParam sysLog,int pageSize,int currentPage,String url)
{
try
{
return sysParamDAO.getAllSysParam(sysLog, pageSize, currentPage, url);
}catch(Exception ex){
logger.error(ex.getMessage());
ex.printStackTrace();
return null;
}
}
public SysParamDAO getSysParamDAO()
{
return sysParamDAO;
}
public void setSysParamDAO(SysParamDAO sysParamDAO) {
this.sysParamDAO = sysParamDAO;
}
}
Dao层接口和实现:
package com.exeerp.sm.dao;
import java.util.List;
import com.exeerp.pub.dao.BaseDAO;
import com.exeerp.pub.exception.DaoException;
import com.exeerp.pub.util.Paginated;
import com.exeerp.sm.bean.SysLog;
import com.exeerp.sm.bean.SysParam;
/**
* 系统参数操作持久层DAO接口
* @author:孙启华
* 创建时间:2009-04-29
*/
public interface SysParamDAO extends BaseDAO
{
/**
* 查询所有的系统参数信息
* @return
* @throws DaoException
*/
public Paginated getAllSysParam(SysParam sysLog,int pageSize,int currentPage,String url)throws DaoException;
}
package com.exeerp.sm.dao.impl;
import java.util.ArrayList;
import java.util.List;
import com.exeerp.pub.dao.BaseDAOImpl;
import com.exeerp.pub.exception.DaoException;
import com.exeerp.pub.util.Paginated;
import com.exeerp.sm.bean.SysLog;
import com.exeerp.sm.bean.SysParam;
import com.exeerp.sm.dao.SysParamDAO;
/**
* 系统参数持久层接口的实现
* @author:
* 创建时间:2009-04-30
*/
public class SysParamDAOImpl extends BaseDAOImpl implements SysParamDAO
{
/**
* 查询所有的系统参数信息
* @param sysPar 系统参数对象
* @return 如果查找成功,则返回List<SysParam>对象
*/
public Paginated getAllSysParam(SysParam sysLog,int pageSize,int currentPage,String url)throws DaoException
{
return this.queryForPaginatedList(sysLog, pageSize, currentPage, url);
}
}
baseDAo公用方法
package com.exeerp.pub.dao;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import com.exeerp.pub.exception.DaoException;
import com.exeerp.pub.util.ExceptionMessage;
import com.exeerp.pub.util.Paginated;
/*
* 抽象实现baseDAo公用方法
*
* @author 创建时间:(2009-04-10)
*/
public class BaseDAOImpl extends SqlMapClientDaoSupport implements BaseDAO {
static Logger logger = Logger.getLogger(BaseDAOImpl.class);
/*
* (non-Javadoc)
*
* @see com.exeerp.pub.dao.BaseDAO#addObject(java.lang.Object)
*/
/*
* (non-Javadoc)
*
* @see com.exeerp.pub.dao.BaseDAO#queryForPaginatedList(java.lang.Object,
* int, int, java.lang.String)
*/
public Paginated queryForPaginatedList(Object obj, int pageSize,
int currentPage, String url) {
return new Paginated(this.getSqlMapClientTemplate(), obj, currentPage,
pageSize, url);
}
/*
* (non-Javadoc)
*
* @see com.exeerp.pub.dao.BaseDAO#queryForPaginatedList(int, int,
* java.lang.String, java.lang.Object[])
*/
public Paginated queryForPaginatedList(int pageSize, int currentPage,
String url, Object... obj) {
return new Paginated(this.getSqlMapClientTemplate(), currentPage,
pageSize, url, obj);//调用Paginated的方法,进行分页的处理。
}
}
转自:http://sqh-me1232008.iteye.com/blog/452764
发表评论
-
ibatis 中 $与#的区别
2012-08-01 17:18 839在sql配置中比如in(#rewr#) 与in ($rewr$ ... -
ibatis 中isNotEmpty
2012-08-01 16:56 20401、ibatis 中isNotEmpty的作用 & ... -
iBATIS映射文件基础浅谈
2012-08-01 15:02 1089要了解iBATIS映射文件基 ... -
ibatis动态sql
2012-07-24 16:23 1087直接使用JDBC一个非常普遍的问题就是动态SQL。使用参数值、 ... -
ibatis的映射文件注意事项
2012-07-24 14:22 919<?xml version="1.0" ...
相关推荐
ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件ibatis_likehbm高效分页组件 ibatis_likehbm高效分页组件 ibatis_likehbm...
标题"ibatis分页功能"指的就是如何在iBATIS框架中实现数据库查询的分页效果。分页不仅提高了用户体验,还能减少不必要的数据库负载。 描述中提到,分页功能是通过`page.tld`标签实现的。`tld`文件是JSP Tag Library...
开发者只需理解并调用已有的组件,就能快速实现分页功能,无需从头编写大量代码。对于初学者或者希望提高开发效率的工程师来说,这是一个非常实用的工具。同时,项目的分层结构也符合良好的软件设计原则,易于维护和...
本知识点将深入探讨如何在Struts2框架中结合iBatis实现基于Freemarker模板的分页功能。 首先,我们需要理解iBatis,它是一个轻量级的Java持久层框架,它提供了一个SQL映射框架,允许开发者将SQL语句与Java代码分离...
在传统的iBatis框架中,分页通常采用逻辑分页的方式,即通过游标(ResultSet)来逐条处理数据,从而实现分页效果。这种方式虽然跨数据库兼容性好,但性能上不如数据库原生的物理分页高效。物理分页是直接在SQL语句中...
在本项目中,Spring作为核心框架,负责管理各种组件,如数据库连接、事务管理以及与iBatis的集成。 iBatis则是一个持久层框架,它将SQL语句与Java代码分离,提高了代码的可维护性和灵活性。在Spring+iBatis的组合中...
Struts2、Spring、iBatis以及Oracle是Java Web开发中的四大核心组件,它们共同构建了一个强大且灵活的后端架构。在这个实例中,我们将会深入探讨这些技术如何协同工作,实现分页搜索功能和上传附件操作。 1. **...
本教程将深入探讨如何使用Spring、iBatis和JSP这三个组件来集成实现数据库查询和分页功能。这三个技术结合,能够构建出高效、灵活且易于维护的数据访问层。 首先,Spring是一个开源的应用框架,提供依赖注入(DI)...
在IT行业中,分页是数据库查询的一个重要特性,特别是在数据量庞大的情况下,它能帮助...在 chap_ibatis 压缩包中,可能包含了相关的Ibatis分页源码示例,你可以进一步研究其中的细节,加深对Ibatis分页机制的理解。
综上所述,"简单公文管理 struts+spring+ibatis +ajax 分页"是一个集成了多种技术的Web应用,它利用Struts进行页面控制,Spring管理业务逻辑,iBatis处理数据访问,Ajax提升用户体验,共同构建了一个高效、易用的...
总结起来,"struts+spring+ibatis(SSI)的最简分页及标签"是一个关于如何在Java Web开发中结合Struts的MVC架构、Spring的依赖管理和iBatis的数据访问来实现分页功能以及创建自定义标签的实践。这个过程涉及到Struts的...
Spring3在本项目中起到了整合其他组件的作用,例如,它可以管理Ibatis的SqlSessionFactory和Mapper接口,以及Struts2的Action类,实现组件间的松耦合。此外,Spring的事务管理也能够确保数据操作的一致性。 4. **...
这三个组件是企业级Java应用中的常见选择,它们各自承担着不同的职责。 1. **Struts2**:这是一个用于构建MVC(模型-视图-控制器)架构的开源框架。它负责处理HTTP请求,提供动作调度,以及处理表单提交和结果转发...
在 Java Web 应用程序中,分页功能可以使用多种方法来实现,例如使用 Hibernate、iBATIS 等 ORM 工具来实现分页,或者使用自定义的分页算法来实现分页。无论是哪种方法,分页都是 Java Web 应用程序中的一个重要组件...
SSH2+IBATIS框架是Java开发中常用的一套企业级应用开发框架组合,它将Spring、Hibernate、Struts2和iBatis等组件融合在一起,以提高开发效率和实现松耦合。以下是对这些框架及其整合方式的详细说明: **Spring框架*...
同时,分页组件还应提供“上一页”、“下一页”、“首页”、“末页”等操作,并能根据当前页自动计算这些按钮的状态。 总之,这个"ssi分页模板"结合了Struts、Spring和iBatis的优势,为开发者提供了一个便捷的分页...
7. **实现存储过程分页**:在iBatis中,可以调用存储过程来实现分页查询。在Mapper接口中定义一个方法,如`selectByPage`,并编写对应的XML映射文件。存储过程通常会接受两个参数:开始位置和页大小,返回一个结果集...
定时任务通常指的是应用中用来定期执行特定任务的组件,例如清理过期数据、发送邮件通知等。这些任务可以通过Quartz、Spring Scheduler等定时任务框架来实现,它们允许开发者定义任务执行的周期和逻辑。 MyBatis中...
而DWZ则负责前端展示,提供用户友好的界面和交互效果,如DWZ的分页组件可以与后台的分页逻辑紧密结合,实现前后端的无缝对接。 具体实现时,开发者需要配置SpringMVC的DispatcherServlet、Controller、Service以及...
【Ibatis 的主要组件】 1. **SqlSessionFactoryBuilder**:构建SqlSessionFactory的工具类,通常在应用启动时创建一次。 2. **SqlSessionFactory**:它是Ibatis的核心,负责创建SqlSession对象,一个...