java web jdbc oracle 分页_springboot集成jdbcTemplate,分页查询(oracle)数据

package xxx.utils;

import oracle.sql.TIMESTAMP;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.dao.DataAccessException;

import org.springframework.data.domain.*;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.core.ResultSetExtractor;

import org.springframework.jdbc.core.RowMapper;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.*;

/**

* @author 张茂原

* @date 2021-01-02

* @description jdbcTemplate操作工具类

*

*/

public class DataBaseHelper {

private static final Logger log = LoggerFactory.getLogger("DataBaseHelper");

/**

* @description 查询Map格式的数据集

*/

public static List> findList(String sql, Object[] params, String[] resultParams, JdbcTemplate jdbcTemplate) {

return jdbcTemplate.query(sql, new RowMapper>() {

@Override

public Map mapRow(ResultSet rs, int i) throws SQLException {

Map map = new HashMap();

for(String resultParam: resultParams){

if(rs.getObject(resultParam) instanceof TIMESTAMP){

map.put(resultParam, rs.getTimestamp(resultParam));

}else{

map.put(resultParam, rs.getObject(resultParam));

}

}

return map;

}

},params);

}

/**

* @description 分页查询数据,返回Page分页需要的数据内容

*/

public static Page> fetchPageForOracle(

String sql,

final Object[] params, final int pageNo, final int pageSize, final String[] resultParams, JdbcTemplate jdbcTemplate) {

final String sqlCount = "select count(*) " + (sql.replaceAll(" ", "").toLowerCase().contains("orderby") ?

sql.substring(sql.toLowerCase().indexOf("from"), sql.toLowerCase().lastIndexOf("order")) :

sql.substring(sql.toLowerCase().indexOf("from")));

final Long rowCount = jdbcTemplate.queryForObject(sqlCount, Long.class, params);

sql = proOracleSql(sql, pageNo, pageSize);

Object queryData = jdbcTemplate.query(sql, new ResultSetExtractor() {

@Override

public List> extractData(ResultSet rs) throws SQLException, DataAccessException {

List> dataList = new ArrayList>();

while(rs.next()){

Map map = new HashMap<>();

for(String resultParam : resultParams){

if(rs.getObject(resultParam) instanceof TIMESTAMP){

map.put(resultParam, rs.getTimestamp(resultParam));

}else{

map.put(resultParam, rs.getObject(resultParam));

}

}

dataList.add(map);

}

return dataList;

}

}, params);

return new PageImpl>((List>)queryData, PageRequest.of(pageNo - 1, pageSize), rowCount.longValue());

}

/**

* @description 将不带分页参数的oracle数据库查询sql修改为优化性能的分页sql 带*号的sql记得在*前加表别名

*/

public static String proOracleSql(String sql, int pageNo, int pageSize){

String sqlRep = sql.replaceAll(" ","").toLowerCase();

if(sqlRep.contains("orderby")){

sql = "SELECT * " +

"FROM (SELECT ROWNUM AS rowno,r.* " +

"FROM (" + sql + ") r " +

"where ROWNUM <= " + pageNo*pageSize +

") table_alias " +

"WHERE table_alias.rowno > " + (pageNo-1)*pageSize;

}else{

sql = "SELECT * " +

"FROM (SELECT ROWNUM AS rowno, " + sql.substring(sql.toLowerCase().indexOf("select") + 7) +

(sqlRep.contains("where") ? " AND" : " where") + " ROWNUM <= " + pageNo*pageSize + ") table_alias " +

"WHERE table_alias.rowno > " + (pageNo-1)*pageSize;

}

return sql;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值