工具类 分页工具类PageParamBean
自己编写的分页工具类,根据不同的数据库类型,生成对应的分页sql信息,分享给大家,希望大家共勉,工具类有些地方,大家可能不需要,请根绝自己的需要进行修改使用,核心逻辑都在,如果大家觉得有什么不妥,欢迎大家随时指正
package com.ideal.ieai.server.util; import com.ideal.ieai.core.JudgeDB; /**
* @ClassName: PageParamBean
* @Description: 根据数据库类型不同生成不同的分页方法的工具类
* @author: yue_sun
* @date: 2019年1月3日 下午12:53:09
*
* @Copyright: 2019-2027 www.idealinfo.com Inc. All rights reserved.
*
*/
public class PageParamBean
{
private String sql;
private int pagePara1 = 0;
private int pagePara2 = 0; private static String mysql = "mysql";
private static String oracle = "oracle";
private static String db2 = "db2"; private static PageParamBean instance = null; private PageParamBean()
{ } public static PageParamBean getInstance ()
{
if (null == instance)
{
instance = new PageParamBean();
}
return instance;
} public String getSql ()
{
return sql;
} public void setSql ( String sql )
{
this.sql = sql;
} public int getPagePara1 ()
{
return pagePara1;
} public void setPagePara1 ( int pagePara1 )
{
this.pagePara1 = pagePara1;
} public int getPagePara2 ()
{
return pagePara2;
} public void setPagePara2 ( int pagePara2 )
{
this.pagePara2 = pagePara2;
} /**
* @Title: getParamPageBean
* @Description: 获取分页sql及分页参数方法
* @param sql
* @param start
* @param limit
* @return
* @author: yue_sun
* @date: 2019年1月2日 上午10:09:25
*/
public PageParamBean getParamPageBean ( String sql, int start, int limit )
{
PageParamBean paramBean = new PageParamBean();
int pageParam1 = 0;
int pageParam2 = 0;
switch (JudgeDB.IEAI_DB_TYPE)
{
case 1:
sql = getQueryPageSQL(oracle, sql);
pageParam1 = start + limit;
pageParam2 = start;
break;
case 2:
sql = getQueryPageSQL(db2, sql);
pageParam1 = start + 1;
pageParam2 = start + limit;
break;
case 3:
sql = getQueryPageSQL(mysql, sql);
pageParam1 = start;
pageParam2 = limit;
break;
default:
break;
}
paramBean.setSql(sql);
paramBean.setPagePara1(pageParam1);
paramBean.setPagePara2(pageParam2);
return paramBean;
} public PageParamBean getParamPageBean ( String sql, String order, int start, int limit )
{
PageParamBean paramBean = new PageParamBean();
int pageParam1 = 0;
int pageParam2 = 0;
switch (JudgeDB.IEAI_DB_TYPE)
{
case 1:
sql = getQueryPageSQLNew(oracle, order, sql);
pageParam1 = start + limit;
pageParam2 = start;
break;
case 2:
sql = getQueryPageSQLNew(db2, order, sql);
pageParam1 = start;
pageParam2 = start + limit;
break;
case 3:
sql = getQueryPageSQLNew(mysql, order, sql);
pageParam1 = start;
pageParam2 = limit;
break;
default:
break;
}
paramBean.setSql(sql);
paramBean.setPagePara1(pageParam1);
paramBean.setPagePara2(pageParam2);
return paramBean;
} /**
* @Title: getQueryPageSQL
* @Description: 组织各种数据库的分页查询sql
* @param dbType
* @param sql
* @return
* @author: yue_sun
* @date: 2019年1月3日 上午9:40:40
*/
public static String getQueryPageSQL ( String dbType, String sql )
{
StringBuilder stringBuffer = new StringBuilder();
if (dbType.equals("mysql"))
{
stringBuffer.append(sql);
stringBuffer.append(" limit ?,?");
}
if (dbType.equals("oracle"))
{
stringBuffer.append("select * from ( select row_.*, rownum rownum_ from ( ");
stringBuffer.append(sql);
stringBuffer.append(" ) row_ where rownum <= ?) where rownum_ > ?");
}
if (dbType.equals("microsoft sql server"))
{
stringBuffer.append("select top ? ");
if (sql.indexOf("order by") != -1)
{
stringBuffer.append(sql.substring(sql.indexOf("select") + 7, sql.indexOf("order by"))); } else if (sql.indexOf("group by") != -1)
{ } else
{
stringBuffer.append(sql.substring(sql.indexOf("select") + 7, sql.length()));
}
stringBuffer.append(" where 1 not in (select top ? 1 ");
stringBuffer.append(sql.substring(sql.indexOf("from"), sql.length()));
stringBuffer.append(" )");
}
if (dbType.equals("postgresql"))
{
stringBuffer.append(sql);
stringBuffer.append(" limit ? offset ?");
}
if (dbType.indexOf("db2") != -1)
{
stringBuffer.append("select * from( select rownumber() over() as rownum_ ,a1.* from ( "); stringBuffer.append(sql); stringBuffer.append(" ) a1) a2 where a2.rownum_ between ? and ? ");
} if (dbType.indexOf("hsql") != -1)
{
stringBuffer.append("select limit ? ? * from (");
stringBuffer.append(sql);
stringBuffer.append(" )");
} return stringBuffer.toString();
} /**
* @Title: getQueryPageSQLNew
* @Description: 重载该方法,oracle 和 DB2 都用 > 和 <= 来做分页(加入order排序条件)
* @param dbType
* @param order
* @param sql
* @return
* @author: yue_sun
* @date: 2019年1月3日 上午9:40:40
*/
public static String getQueryPageSQLNew ( String dbType, String order, String sql )
{
StringBuilder stringBuffer = new StringBuilder();
if (dbType.equals("mysql"))
{
stringBuffer.append(sql);
stringBuffer.append(" " + order + " ");
stringBuffer.append(" limit ?,?");
}
if (dbType.equals("oracle"))
{
stringBuffer.append("SELECT * FROM ( SELECT row_number() over(" + order + ") AS RN , A.* FROM ( ");
stringBuffer.append(sql);
stringBuffer.append(" ) A ) B WHERE B.RN <= ? and B.RN > ?");
}
if (dbType.equals("microsoft sql server"))
{
stringBuffer.append("select top ? ");
if (sql.indexOf("order by") != -1)
{
stringBuffer.append(sql.substring(sql.indexOf("select") + 7, sql.indexOf("order by"))); } else
{
stringBuffer.append(sql.substring(sql.indexOf("select") + 7, sql.length()));
}
stringBuffer.append(" where 1 not in (select top ? 1 ");
stringBuffer.append(sql.substring(sql.indexOf("from"), sql.length()));
stringBuffer.append(" )");
}
if (dbType.equals("postgresql"))
{
stringBuffer.append(sql);
stringBuffer.append(" limit ? offset ?");
}
if (dbType.indexOf("db2") != -1)
{
stringBuffer.append("SELECT * FROM ( SELECT ROW_NUMBER() OVER(" + order + ") AS RN , A.* FROM ("); stringBuffer.append(sql); stringBuffer.append(" ) A ) B WHERE B.RN > ? and B.RN <= ?");
} if (dbType.indexOf("hsql") != -1)
{
stringBuffer.append("select limit ? ? * from (");
stringBuffer.append(sql);
stringBuffer.append(" )");
} return stringBuffer.toString();
} /**
* @Title: toCount
* @Description: 生成查询总数的sql的方法
* @param sql
* @return
* @author: yue_sun
* @date: 2019年1月2日 上午10:12:25
*/
public String toCount ( String sql )
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("SELECT COUNT(1) AS COUNT FROM ( ");
stringBuilder.append(sql);
stringBuilder.append(" ) TOTAL");
return stringBuilder.toString();
} }
工具类 分页工具类PageParamBean的更多相关文章
- PHP常用之封装分页工具类
分页基本上是每个项目都会使用到的,所以呢,把它封装成一个工具类,以后直接调用就可以了(虽然TP框架的灰常强大,但是自己封一个也未尝不可.),这样既省时又省力还赚'工分'. 我封的这个分页工具类还比较完 ...
- PageUtil.java分页工具类
package com.chabansheng.util; /** * 分页工具类 * @author Administrator * */ public class PageUtil { /** * ...
- 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解
[博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...
- c#分页工具类,完美实现List分页
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Proje ...
- SpringBoot集成Mybatis-PageHelper分页工具类,实现3步完成分页
在Mybatis中,如果想实现分页是比较麻烦的,首先需要先查询出总的条数,然后再修改mapper.xml,为sql添加limit指令. 幸运的是现在已经不需要这么麻烦了,刘大牛实现了一个超牛的分页工具 ...
- JAVA分页工具类
最近写了一个代码生成工具,分享下该工具下的分页工具 一.分页工具类 package com.qy.code.api.page; import java.io.Serializable; import ...
- JAVA 分页工具类及其使用
Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...
- mongoDB工具类以及测试类【java】
java操作mongo工具类 package Utils; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; im ...
- 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式
适用于app.config与web.config的ConfigUtil读写工具类 之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...
随机推荐
- Python twisted事件驱动网络框架 源码剖析
一.Twisted简介 Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如:网络协议.线程.数据库管理.网络操作.电子邮件等. 事件驱动简而言之,事件驱动分为二个部分:第一,注册事件:第 ...
- MYSQL获得查询记录的行号
对于获得查询记录的行号这一功能,Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的ROWNUM,MS SQL Server 则在 2005 版本中提供了ROW_NUMBER()函数. ...
- Summer training #9
A:树形DP 给出一棵树,但是它的边是有向边,选择一个城市,问最少调整多少条边的方向能使一个选中城市可以到达所有的点,输出最小的调整的边数,和对应的点 要改变的边的权值为1,不需要改变的边的权值为0, ...
- Linux之more命令
命令解释 more命令类似与cat命令,却比cat命令强大,它以全屏幕的方式按页显示文本文件的内容,支持vi中的关键字定位操作. 命令说明 more [选项] 文件.. 命令选项 -d 显示帮助 ...
- Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader
Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/SAXReader ...
- 【技巧 二进制分组】bzoj4398: 福慧双修&&2407: 探险
二进制分组也可以说是一种比较优美的拆贡献方式吧? Description 菩萨为行,福慧双修,智人得果,不忘其本.——唐朠立<大慈恩寺三藏法师传>有才而知进退,福慧双修,这才难得.——乌雅 ...
- Linux Bonding
https://www.cnblogs.com/huangweimin/articles/6527058.html 管理 linux下网卡bonding配置 章节 bonding技术 cent ...
- react-缓存
目录结构: 用到缓存的地方: 缓存的方法 清楚缓存
- jquery clearQueue方法 语法
jquery clearQueue方法 语法 作用:clearQueue() 方法停止队列中所有仍未执行的函数.与 stop() 方法不同,(只适用于动画),clearQueue() 能够清除任何排队 ...
- java常用数据类型转换
在Java开发过程中经常会涉及到数据类型的转换问题,比如数字型转字符型,字符型转日期型,字符串转数组等等,以及其他类型的强制转换等.经常出现,所以有必要总结一下. 1.如何将字串 String 转换成 ...