mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
feat: 新增是否优化 count 查询的选项。
This commit is contained in:
parent
859c2a601a
commit
2cd43e4f19
@ -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));
|
||||
}
|
||||
|
||||
|
||||
@ -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) {
|
||||
// 默认总是优化
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取总页数。
|
||||
*
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user