自己编写的分页工具类,根据不同的数据库类型,生成对应的分页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的更多相关文章

  1. PHP常用之封装分页工具类

    分页基本上是每个项目都会使用到的,所以呢,把它封装成一个工具类,以后直接调用就可以了(虽然TP框架的灰常强大,但是自己封一个也未尝不可.),这样既省时又省力还赚'工分'. 我封的这个分页工具类还比较完 ...

  2. PageUtil.java分页工具类

    package com.chabansheng.util; /** * 分页工具类 * @author Administrator * */ public class PageUtil { /** * ...

  3. 分页 工具类 前后台代码 Java JavaScript (ajax) 实现 讲解

    [博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708]http ...

  4. c#分页工具类,完美实现List分页

    using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Proje ...

  5. SpringBoot集成Mybatis-PageHelper分页工具类,实现3步完成分页

    在Mybatis中,如果想实现分页是比较麻烦的,首先需要先查询出总的条数,然后再修改mapper.xml,为sql添加limit指令. 幸运的是现在已经不需要这么麻烦了,刘大牛实现了一个超牛的分页工具 ...

  6. JAVA分页工具类

    最近写了一个代码生成工具,分享下该工具下的分页工具 一.分页工具类 package com.qy.code.api.page; import java.io.Serializable; import ...

  7. JAVA 分页工具类及其使用

    Pager.java package pers.kangxu.datautils.common; import java.io.Serializable; import java.util.List; ...

  8. mongoDB工具类以及测试类【java】

    java操作mongo工具类 package Utils; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; im ...

  9. 适用于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通用)>,现在重新整理一 ...

随机推荐

  1. unzip解压3G或者4G以上文件失败的解决方法

    Linux下,使用unzip解压时,报错:End-of-central-directory signature not found.  Either this file is nota zipfile ...

  2. Python:多线程threading模块

    目录 Thread对象 Lock对象 local对象 Thread对象: 多任务可以由多进程完成,也可以由一个进程内的多线程完成.进程是由至少1个线程组成的. threading模块在较低级的模块 _ ...

  3. 在MariaDB导入sql文件出现乱码解决方案

    第一方式: 命令: mysql -u(用户名) -p --default-character-set=utf8(设置编码) data_name(数据库名)<文件路径 示例: 这时,会有一个假死的 ...

  4. Acwing-203-同余方程(扩展欧几里得)

    链接: https://www.acwing.com/problem/content/205/ 题意: 求关于x的同余方程 ax ≡ 1(mod b) 的最小正整数解. 思路: 首先:扩展欧几里得推导 ...

  5. Redis——解决“org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'redisReferenceResolver': Unsatisfied dependency expressed through constructor parameter 0”

    错误栈: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ...

  6. c++回溯法求组合问题(取数,选取问题)从n个元素中选出m个的回溯算法

    假如现在有n个数,分别从里面选择m个出来,那么一共有多少种不同的组合呢,分别是哪些呢? 利用计算机的计算力,采用回溯算法很容易求解 程序源代码如下: #include<iostream># ...

  7. python 多线程实现循环打印 abc

    python 多线程实现循环打印 abc 好久没写过python了, 想自己实践一下把 非阻塞版 import threading import time def print_a(): global ...

  8. matplotlib(二):折线图

    import numpy as np import matplotlib.pyplot as plt import matplotlib.dates as mdates # 解决中文显示问题 plt. ...

  9. centos 6.4 扩容

    摘自 :http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c42246 ...

  10. Git常用命令详解

    1.创建版本库 git clone <url> #克隆远程版本库 git init #初始化本地版本库 通过 ls -ah 可以看到隐藏的.git目录 2.修改和提交 添加文件readme ...