feat: 新增是否优化 count 查询的选项。

This commit is contained in:
Suomm 2023-06-18 16:54:59 +08:00
parent 859c2a601a
commit 2cd43e4f19
4 changed files with 42 additions and 2 deletions

View File

@ -675,7 +675,12 @@ public interface BaseMapper<T> {
// 这样方便用户做总数缓存而非每次都要去查询总量
// 一般的分页场景中只有第一页的时候有必要去查询总量第二页以后是不需要的
if (page.getTotalRow() < 0) {
QueryWrapper countQueryWrapper = MapperUtil.optimizeCountQueryWrapper(queryWrapper);
QueryWrapper countQueryWrapper;
if (page.isOptimizeCountSql()) {
countQueryWrapper = MapperUtil.optimizeCountQueryWrapper(queryWrapper);
} else {
countQueryWrapper = MapperUtil.rawCountQueryWrapper(queryWrapper);
}
page.setTotalRow(selectCountByQuery(countQueryWrapper));
}

View File

@ -84,6 +84,24 @@ public interface IPage<T> extends Serializable {
*/
void setRecords(List<T> records);
/**
* 是否自动优化 COUNT 查询语句默认优化
*
* @return {@code true} 优化{@code false} 不优化
*/
default boolean isOptimizeCountSql() {
return true;
}
/**
* 设置是否自动优化 COUNT 查询语句
*
* @param optimizeCountSql 是否优化
*/
default void setOptimizeCountSql(boolean optimizeCountSql) {
// 默认总是优化
}
/**
* 获取总页数
*

View File

@ -31,6 +31,8 @@ public class Page<T> implements IPage<T> {
private long totalPage = INIT_VALUE;
private long totalRow = INIT_VALUE;
private boolean optimizeCountSql = true;
public static <T> Page<T> of(int pageNumber, int pageSize) {
return new Page<>(pageNumber, pageSize);
}
@ -63,6 +65,16 @@ public class Page<T> implements IPage<T> {
}
@Override
public boolean isOptimizeCountSql() {
return optimizeCountSql;
}
@Override
public void setOptimizeCountSql(boolean optimizeCountSql) {
this.optimizeCountSql = optimizeCountSql;
}
@Override
public List<T> getRecords() {
return records;

View File

@ -440,7 +440,12 @@ public interface RowMapper {
// 这样方便用户做总数缓存而非每次都要去查询总量
// 一般的分页场景中只有第一页的时候有必要去查询总量第二页以后是不需要的
if (page.getTotalRow() < 0) {
QueryWrapper countQueryWrapper = MapperUtil.optimizeCountQueryWrapper(queryWrapper);
QueryWrapper countQueryWrapper;
if (page.isOptimizeCountSql()) {
countQueryWrapper = MapperUtil.optimizeCountQueryWrapper(queryWrapper);
} else {
countQueryWrapper = MapperUtil.rawCountQueryWrapper(queryWrapper);
}
page.setTotalRow(selectCountByQuery(schema, tableName, countQueryWrapper));
}