oracle 分页 count 语句拼接工具类
时间: 2023-11-20 22:06:28 浏览: 159
在Oracle中实现分页查询需要用到ROWNUM,而查询总记录数需要用到COUNT函数。我们可以使用以下工具类来实现Oracle的分页查询和总记录数查询:
```java
public class OraclePageHelper {
/**
* 获取分页SQL
*
* @param sql 原始SQL
* @param pageNo 当前页码
* @param pageSize 每页显示数量
* @return 分页SQL
*/
public static String getPageSql(String sql, int pageNo, int pageSize) {
int startRow = (pageNo - 1) * pageSize + 1;
int endRow = startRow + pageSize - 1;
StringBuilder pageSql = new StringBuilder();
pageSql.append("SELECT * FROM (SELECT A.*, ROWNUM RN FROM (");
pageSql.append(sql);
pageSql.append(") A WHERE ROWNUM <= ");
pageSql.append(endRow);
pageSql.append(") WHERE RN >= ");
pageSql.append(startRow);
return pageSql.toString();
}
/**
* 获取总记录数SQL
*
* @param sql 原始SQL
* @return 总记录数SQL
*/
public static String getCountSql(String sql) {
StringBuilder countSql = new StringBuilder();
countSql.append("SELECT COUNT(*) FROM (");
countSql.append(sql);
countSql.append(")");
return countSql.toString();
}
}
```
使用该工具类,我们可以很方便地实现Oracle的分页查询和总记录数查询。例如:
```java
// 原始SQL
String sql = "SELECT * FROM user";
// 查询第1页,每页显示10条记录
int pageNo = 1;
int pageSize = 10;
// 获取分页SQL
String pageSql = OraclePageHelper.getPageSql(sql, pageNo, pageSize);
// 获取总记录数SQL
String countSql = OraclePageHelper.getCountSql(sql);
// 查询总记录数
long total = jdbcTemplate.queryForObject(countSql, Long.class);
// 查询数据页
List<User> userList = jdbcTemplate.query(pageSql, new BeanPropertyRowMapper<>(User.class));
```
其中,jdbcTemplate是Spring框架提供的JDBC操作模板,我们可以使用它来执行SQL语句。
阅读全文