工具类 分页工具类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虚拟环境
有点气,是真的有点气,以为安装错误了,没想到是命令问题 参考链接: https://cloud.tencent.com/developer/article/1176291 https://www.cn ...
- git生成公钥public key并添加SSH key。git乌龟gerrit下推送git【server sent :publickey】
一.key 码云链接:http://git.mydoc.io/?t=180845#text_180845 博客链接: 方式一:https://blog.csdn.net/xb12369/article ...
- JS 函数基础
函数简介 函数 函数也是一个对象 函数中可以封装一些功能(代码),在需要时可以指向这些功能(代码) 函数中可以保存一些代码在需要时调用 使用typeof检查一个函数对象时,会返回function 创建 ...
- python学习_新闻联播文字版爬虫(V 1.0版)
python3的爬虫练习,爬取的是新闻联播文字版网站 #!/usr/bin/env python # -*- coding: utf-8 -*- ''' __author__ = 'wyf349' _ ...
- join on 和group
左边的表是article文章表,右边的是comment文章回复表. 今天mysql查询的时候,遇到了有趣的事,任务是查询数据库需要得到以下格式的文章标题列表,并按 ...
- canvas addHitRegion()
CanvasRenderingContext2D.addHitRegion() 是 Canvas 2D API 给位图添加点击区域的方法. 但是 mobile 都不兼容
- Hibernate 5 Maven 仓库的 Artifacts
Hibernate artifacts 官方发布的仓库在 JBoss Maven repository 中.Hibernate 发布的 artifacts 也会同时同步到 Maven Central ...
- 关于MapReduce的测试
题目:数据清洗以及结果展示 要求: Result文件数据说明: Ip:106.39.41.166,(城市) Date:10/Nov/2016:00:01:02 +0800,(日期) Day:10,(天 ...
- Oracle实现分页,每页有多少条记录数
分页一直都是关系数据库的热门,在数据量非常多的情况下,需要根据分页展示,每页展示多少条记录,以此减轻数据的压力; 1实现原理,根据rownum取记录数,根据公式(页数-1)*每页想要展示的记录数 AN ...
- MySQL_(Java)提取工具类JDBCUtils
MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC创建用户名和密码校验查询方法 传送门 MySQL_(Java)使用preparestatement ...