oracle mysql分页查询_oracle 与mysql分页查询

/*

* 描       述:  数据库方言接口类

*/

package com.xxxxxx.dhm.portalMS.base.dao;

/**

*

* 数据库方言接口类

* 用于根据各种数据库的差异生成不同的SQL语句

*

*/

public interface IDialect

{

/**

* 返回数据库是否支持分页

* @return boolean [true--支持分页,false--不支持分页]

*/

public boolean isLimit();

/**

* 得到分页语句

* 根据不同数据库返回不同的分页代码

* @param sql sql标准语句

* @param hasOffset 是否有终止参数true-有,false-没有

* @return String [返回组装好的分页SQL语句]

*/

public String getLimitString(String sql, boolean hasOffset);

/**

* 得到具体的分页语句

* 根据传入的参数不同拼装不同的数据库分页语句

* @param sql [类型:String]数据库的原始SQL语句

* @param skipResults [类型:int]起始的记录数

* @param maxResults [类型:int]结束的记录数

* @return String [返回组装好的分页SQL语句]

*/

public String getLimitString(String sql, int skipResults, int maxResults);

}

/*  * 描       述:  oracle方言的具体实现类

*/

package com.xxxxxx.dhm.portalMS.base.dialect;

import com.xxxxxx.dhm.portalMS.base.dao.IDialect;

/**

*

* oracle实现的方言接口

* 实现了IDialect,对oracle进行了特殊化处理

*

*/

public class OracleDialect implements IDialect

{

/**

* SQL语句结束的符号

*/

protected static final String SQL_END_DELIMITER = ";";

/**

* 是否支持分页true-是,false-不支持

*/

private boolean limit;

/**

* 返回是否支持分页

* @return true-支持,false-不支持

*/

public boolean isLimit()

{

return limit;

}

/**

* 设置是否支持分页

* @param  limit true-支持,false-不支持

*/

public void setLimit(boolean limit)

{

this.limit = limit;

}

/**

* 得到ORACLE的分页SQL语句

* @param sql 待分页的SQL语句

* @param hasOffset 是否有最大页

* @return [类型:String]返回带分页的SQL语句

*/

public String getLimitString(String sql, boolean hasOffset)

{

StringBuffer bufsql = new StringBuffer(

"SELECT * FROM (SELECT r.*, ROWNUM rn FROM (");

bufsql.append(sql);

bufsql.append(") r WHERE ROWNUM <= ? ");

bufsql.append(")");

if (hasOffset)

{

bufsql.append("where rn >=?");

}

return bufsql.toString();

}

/**

* 根据起始记录数和终止记录数得到分页的SQL语句

* @param sql [类型:String]待分页的SQL语句

* @param skipResults [类型:int]分页的起点记录

* @param maxResults [类型:int]分页的终止点记录

* @return [类型:String]具体的分页SQL语句

*/

public String getLimitString(String sql, int skipResults, int maxResults)

{

StringBuffer bufsql = new StringBuffer(

"select * from (select r.*, rownum rn from (");

bufsql.append(sql);

bufsql.append(") r where rownum <= ");

bufsql.append(maxResults);

bufsql.append(") where rn >= ");

bufsql.append(skipResults);

return bufsql.toString();

}

}

public class MySQLDialect implements IDialect {     protected static final String SQL_END_DELIMITER = ";";     /**      * 是否支持分页true-是,false-不支持      */     private boolean limit;     /**      * 设置是否支持分页      * @param  limit true-支持,false-不支持      */     public void setLimit(boolean limit)     {         this.limit = limit;     }     /**      *      * @param sql 查询的SQL      * @param hasOffset 是否有分页      * @return String 分页后的SQL语句      */     public String getLimitString(String sql, boolean hasOffset)     {         return new StringBuilder(sql.length() + 20).append(trim(sql)).append(hasOffset ? " limit ?,?" : " limit ?")                 .append(SQL_END_DELIMITER).toString();     }     /**      *      * @param sql 查询参数      * @param offset 分页起始点      * @param limit  分页终止点      * @return String 组装后的SQL      */     public String getLimitString(String sql, int offset, int maxResults)     {         sql = trim(sql);         StringBuilder sb = new StringBuilder(sql.length() + 20);         sb.append(sql);         if (offset > 0)         {             sb.append(" limit ").append(offset - 1).append(',').append(maxResults - offset + 1).append(                     SQL_END_DELIMITER);         }         else         {             sb.append(" limit ").append(limit).append(SQL_END_DELIMITER);         }         return sb.toString();     }     /**      * @return boolean 是否支持分页      */     public boolean isLimit()     {         return limit;     }     /**      * 去掉SQL语句中的分号(;)      * @param sql SQL语句      * @return String [去掉分号后的SQL语句]      */     private String trim(String sql)     {         sql = sql.trim();         if (sql.endsWith(SQL_END_DELIMITER))         {             sql = sql.substring(0, sql.length() - 1 - SQL_END_DELIMITER.length());         }         return sql;     } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值