package com.dahua.core.page;
public final class DataDialect {
public final static String ORACLE = "oracle";
public final static String MYSQL = "mysql";
public final static String DB2 = "db2";
public final static String SQLSERVER = "sqlserver";
public final static String MONGODB = "mongodb";
}
package com.dahua.core.page;
/**
* 分页器接口
*
* @author Administrator
*
*/
public interface LimitPage {
String getPageList(String sql, Pager pager);
}
package com.dahua.core.page;
/*
* 使用策略模式构造分页类
* */
public class LimitPageContext {
//持有一个具体策略的对象
private LimitPage limitpage;
/**
* 构造函数,传入一个具体策略对象
* @param strategy 具体策略对象
*/
public LimitPageContext( LimitPage limitPage){
this.limitpage = limitPage;
}
/**
* 策略方法
*/
public String LimitPage(String sql,Pager pager){
return limitpage.getPageList(sql, pager);
}
}
package com.dahua.core.page;
import java.util.ResourceBundle;
/*
* 根据数据库类型不同调用不能策略
*/
public class LimitPageHepler {
public static String getLimitPage(String sql,Pager pager) {
LimitPageContext limitpageContext;
ResourceBundle res = ResourceBundle.getBundle("jdbc");
String db = res.getString("system.dbtype");
if(db.equals(DataDialect.ORACLE)){
limitpageContext = new LimitPageContext(new OracleLpageImpl());
}else if(db.equals(DataDialect.MYSQL)){
limitpageContext = new LimitPageContext(new MysqlLPageImpl());
}else{
limitpageContext = new LimitPageContext(new OracleLpageImpl());
}
String pagesql=limitpageContext.LimitPage(sql, pager);
return pagesql;
}
}
package com.dahua.core.page;
public class MysqlLPageImpl implements LimitPage {
public String getPageList(String sql,Pager pager) {
String result = "";
Integer startIndex = (pager.getCurrentPage()-1)*pager.getPageSize();
Integer pageSize=pager.getPageSize();
if (null != startIndex && null != pageSize) {
result = sql + " limit " + startIndex + "," + pageSize;
} else if (null != startIndex && null == pageSize) {
result = sql + " limit " + startIndex;
} else {
result = sql;
}
return result;
}
}
package com.dahua.core.page;
import org.apache.commons.lang.StringUtils;
public class OracleLpageImpl implements LimitPage {
@Override
public String getPageList(String sql, Pager pager) {
if (StringUtils.isEmpty(sql)) {
return null;
}
int startIndex = (pager.getCurrentPage()-1)*pager.getPageSize();
int endIndex = startIndex + pager.getPageSize();
String endSql = "select * from (select rOraclePageSQL.*,ROWNUM as currentRow from ("
+ sql
+ ") rOraclePageSQL where rownum <"
+ endIndex
+ ") where currentRow>" + startIndex;
return endSql;
}
}
/**
* *********************** 版权声明 *********************************
*
* 版权所有:浙江大华技术股份有限公司
* ©CopyRight DahuaTech 2012
*
* Pager.java
* com.dahua.om.pojo
*
* 描述 :从OSS2.6 Copy过来
*
* ver date author
* ──────────────────────────────────
* Ver 1.1 2012-3-26 15599
* *******************************************************************
*/
package com.dahua.core.page;
import java.util.ArrayList;
import java.util.List;
/**
* 基于Spring3 JDBC
* User: szj
* Date: 2012-04-01
* Time: 14:09:44
* 分页bean
*/
public class Pager {
private int totalPage;
private int currentPage=1;
private int previousPage;
private int nextPage;
private String url;
private int pageSize=20;
private int total;
private int pageListSize = 8;
private String countHsql; //查询总数sql
/**排序字段*/
private String sortName;
/**排序 asc/desc*/
private String sortOrder;
/**
* add by 17351 当前页的起始索引数
*/
private int startIndex;
/**
* initStartIndex:(设置当前页的起始索引数)
*
* @since Ver 1.1
* @author 17351(Jiang_Wei)
*/
private void initStartIndex(){
startIndex = (currentPage - 1)*pageSize;
}
public int getStartIndex(){
return startIndex;
}
public void setCurrentPage(int currentPage){
this.currentPage = currentPage;
}
public int getPreviousPage() {
return previousPage;
}
public void setPreviousPage(int previousPage) {
this.previousPage = previousPage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageListSize() {
return pageListSize;
}
public void setPageListSize(int pageListSize) {
this.pageListSize = pageListSize;
}
public int getCurrentPage() {
return currentPage;
}
public void setTotal(int total){
this.total= total;
}
public int getTotal() {
return total;
}
/*
* 计算有关分页参数
*/
public void init() {
if (currentPage <= 0)
this.currentPage = 1;
if (total <= 0)
this.total = 0;
this.totalPage = (int) Math.ceil((double) total / (double) pageSize);
this.totalPage = this.totalPage==0?1:this.totalPage;
if (this.currentPage > this.totalPage)
this.currentPage = this.totalPage;
if(currentPage==total){
this.nextPage = currentPage;
}else{
this.nextPage = currentPage+1;
}
if(currentPage==1){
this.previousPage = 1;
}else{
this.previousPage = currentPage-1;
}
initStartIndex();
}
public List<Integer> getPageList(){
List<Integer> pageList = new ArrayList<Integer>();
int startPage = currentPage-pageListSize/2;
if(startPage<1)startPage = 1;
int endPage = startPage+pageListSize-1;
if(endPage>totalPage)endPage = totalPage;
for(int i=startPage; i<=endPage; i++)pageList.add(i);
return pageList;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public String getCountHsql() {
return countHsql;
}
public void setCountHsql(String countHsql) {
this.countHsql = countHsql;
}
public String getSortName() {
return sortName;
}
public void setSortName(String sortName) {
this.sortName = sortName;
}
public String getSortOrder() {
return sortOrder;
}
public void setSortOrder(String sortOrder) {
this.sortOrder = sortOrder;
}
}
分享到:
相关推荐
在Java开发中,数据访问对象(DAO)模式是一种常见的设计模式,用于封装对数据库的操作,使得业务逻辑与数据访问逻辑分离。JDBC(Java Database Connectivity)是Java平台中用于访问数据库的标准API,但它直接使用...
Spring JDBC是Spring框架的一个核心模块,它为Java开发者提供了对JDBC(Java Database Connectivity)的高级封装,使得数据库访问变得更加简单、易管理。在“spring-jdbc-1.0.723.zip”这个压缩包中,我们关注的是...
"ext3+struts2+hibernate+spring的CRUD+分页"是一个典型的Java Web开发组合,用于实现全面的数据管理功能。这个组合充分利用了各个框架的优势,提供了一个强大的后端数据处理和前端展示的解决方案。 首先,EXT3是一...
总的来说,这个项目涵盖了Spring MVC的MVC设计模式、JDBC与Oracle的数据库操作、Ajax实现的动态分页加载以及前端UI组件的使用。通过学习和实践这个项目,开发者可以深入理解如何在实际应用中整合这些技术,实现高效...
在Java的Spring框架中,`JdbcTemplate`是一个非常重要的组件,它提供了数据库操作的简单抽象,使得开发者可以方便地执行SQL语句而无需编写复杂的DAO(数据访问对象)层。在处理大量数据时,传统的分页方法可能会导致...
对于前端展示分页效果,可以使用各种Java Web框架(如Spring MVC、Struts2)的视图组件,如JSP的JSTL标签库,或者使用现代的前端框架(React、Vue、Angular)进行异步请求获取分页数据,并动态渲染页面。 总结,...
在Java Web开发中,Struts框架常常被用来构建MVC(Model-View-Controller)架构的应用程序,而DAO(Data Access Object)模式则用于数据库访问层,以分离业务逻辑和数据操作。当我们需要处理大量数据时,分页功能是...
本项目结合了Spring 4和Hibernate 4,旨在提供一个基础的数据访问层(DAO)实现,包括基本的CRUD操作(创建、读取、更新、删除)以及分页功能。以下是关于这个项目的详细知识点: 1. **Spring 4**:Spring框架是...
Spring整合JDBC主要涉及到Spring框架中的JdbcTemplate模块,这是一个用于简化数据库访问的API,它将JDBC相关的繁琐工作进行了封装,比如管理数据库连接、处理事务、执行SQL语句等,从而使得开发人员能够更加专注于...
6. **工厂模式**:为了方便地获取DAO实例,可以使用工厂模式来创建DAO对象,这样可以隐藏具体的DAO实现类,同时也方便替换不同的数据访问策略。 7. **单元测试**:为了确保DAO层的功能正确,通常会编写单元测试,...
在Spring 3版本中,它提供了对JDBC的全面支持,以帮助开发者更高效、更安全地处理数据库操作。本篇将深入探讨Spring 3如何集成Spring JDBC以及最佳实践。 首先,Spring JDBC的核心组件是JdbcTemplate,它是Spring...
为了解决这个问题,程序员们通常会创建一个通用Dao(Data Access Object),来封装这些基础操作,提供更高级别的抽象,使得业务代码更加简洁。 通用Dao的核心思想是将数据库操作进行抽象,形成一套通用的方法,如增...
封装JDBC操作可以简化数据库访问代码,常见的封装形式包括将查询结果封装为Map、Bean或List,以及应用策略模式和模板模式来提高代码的可扩展性和可维护性。 #### 十五、高级JDBC主题 深入探讨JDBC的高级主题,包括...
Struts2、Spring和iBatis是Java Web开发中常用的三大框架,它们分别负责MVC模式中的动作控制、依赖注入和数据库操作。本教程将详细讲解如何整合这三大框架,并利用存储过程实现分页功能。 首先,让我们了解这三个...
6. **工厂模式**:为了进一步解耦,可以使用工厂模式来创建DAO实例,如`DAOFactory`,这样可以在不修改代码的情况下更换不同的数据库实现。 7. **单元测试**:由于DAO层与业务逻辑分离,可以方便地编写单元测试,对...
此外,还可以使用Spring的JdbcTemplate或NamedParameterJdbcTemplate进行更灵活的SQL操作,它们提供了一种简便的方式来执行SQL查询和更新,而无需直接与JDBC API打交道。 在实际项目中,SSH框架的数据库操作封装还...
orm基于spring-jdbc 写的一个小型ORM设计初衷由于公司现有的代码工程经历了无数人的手,原来的初衷已经变了模样,可以说乱的让我不能接受,代码中大部分都使用了Map封装实体信息,有伤大雅,大部分业务都聚集在dao,...
在实际的分页实现中,通常会有一个Service层来封装业务逻辑,例如获取当前页码、每页大小等信息,然后调用Mybatis的DAO接口进行分页查询。DAO接口会映射到具体的SQL语句,如`SELECT * FROM table LIMIT #{offset}, #...
此外,Spring框架的JDBC模板或Hibernate ORM工具可以进一步简化DAO的实现。 系统开发过程中,还需考虑以下几个关键点: 1. 安全性:Struts2框架提供了丰富的安全控制机制,如防止XSS攻击的过滤器和防止SQL注入的...
4. **DAO(Data Access Object)设计模式**:如何创建DAO接口和实现,以及通过Spring的JDBC模板或Hibernate Session来执行数据库操作。 5. **Service层设计**:业务逻辑处理,调用DAO进行数据操作,通常封装在...