`

Spring3 JDBC 通用DAO封装2 分页实现使用策略模式兼容不同数据库 后续不断更新

 
阅读更多
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;
    }

}
分享到:
评论

相关推荐

    spring-jdbc-orm:基于spring-jdbc 写的一个小型ORM

    orm基于spring-jdbc 写的一个小型ORM设计初衷由于公司现有的代码工程经历了无数人的手,原来的初衷已经变了模样,可以说乱的让我不能接受,代码中大部分都使用了Map封装实体信息,有伤大雅,大部分业务都聚集在dao,...

    Spring面试题

    ☆ Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    由于J2EE的开源的框架中提供了MVC模式实现框架Struts、对象关系模型中的Hibernate 的框架及拥有事务管理和依赖注入的Spring。利用现存框架可以更快开发系统。所以选择Java技术作为blog 的开发工具。 为了增加系统的...

    JAVA WEB典型模块与项目实战大全

    2.8 使用jdbc连接数据库  2.9 小结  第3章 实现各种框架的集成  3.1 spring框架与其他框架的集成原理  3.2 实现ssh三种框架环境集成  3.3 实现spring与struts 2.x集成  3.4 实现spring、struts2.x和...

    rock-0.9.1开源框架

    9 使用数据库方言支持不同的数据库 10 暂不支持aop事务 使用hibernate很烦人的地方最主要有两点: 1 不使用sql,搞个hql。其实程序员还是写sql舒服。 2 为了面向对象而面向对象,搞得太复杂,效率又低,面向对象的...

    springmybatis

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

    rock-0.9开源框架

    9 使用数据库方言支持不同的数据库 10 暂不支持aop事务 11 即使是最纯粹的sql编程,也是1行代码的事 使用hibernate很烦人的地方最主要有两点: 1 不使用sql,搞个hql。其实程序员还是写sql舒服。 2 为了面向对象而...

    Java学习笔记-个人整理的

    \contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...

    火炬博客系统5

    Hibernate用来作持久层部分和域模型层部分,负责存储、更新、删除、查询数据库记录等,用来作DAO处理,本系统使用Spring整合Hibernate,spring为Hibernate的session提供了有效的容易和安全的控制,Spring控制...

    火炬博客系统7

    Hibernate用来作持久层部分和域模型层部分,负责存储、更新、删除、查询数据库记录等,用来作DAO处理,本系统使用Spring整合Hibernate,spring为Hibernate的session提供了有效的容易和安全的控制,Spring控制...

    火炬博客系统6

    Hibernate用来作持久层部分和域模型层部分,负责存储、更新、删除、查询数据库记录等,用来作DAO处理,本系统使用Spring整合Hibernate,spring为Hibernate的session提供了有效的容易和安全的控制,Spring控制...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 16-tomcat的3种运行模式和执行器(线程池).avi │ 17-tomcat中连接器.avi │ 18-禁用AJP连接器.avi │ 19-tomcat中JVM参数优化.avi │ ├─补充2:Redis3.0新特性、主从复制、集群视频教程 │ │ 打开必读.txt ...

    百度地图开发java源码-TypicalWebProject:一个典型的JavaWeb项目

    后续,可以用Spring+SpringMVC+MyBatis对项目进行重构。 目的:主要是了解做项目的流程,练习写代码,并不会过分着重于需求的设计。 项目亮点: 对Dao层:自己模拟了Hibernate,手写了一个小型的ORM框架。原理说到底...

Global site tag (gtag.js) - Google Analytics