复制源码到自己的项目
Dialect 增加方法
AbstractHelperDialect 实现方法
@Override
public boolean afterCount(Object obj, Object parameterObject, RowBounds rowBounds) {
//某些数据(如 TDEngine)查询 count 无结果时返回 null
Page page = getLocalPage();
Long count = 0L;
if (Objects.nonNull(obj)) {
Object data = ((List) obj).get(0);
if ("java.lang.Number".equals(data.getClass().getSuperclass().getName())) {
count = ((Number) data).longValue();
} else {
JSONObject jsonObject = ((JSONObject) data);
count = jsonObject.getLong("count");
Map<String, Object> sumList = page.getSumList();
if (CollectionUtil.isNotEmpty(sumList)) {
String[] keys = sumList.keySet().toArray(new String[]{});
page.getSumList().clear();
for (String key : keys) {
String[] ass = key.split("\\.");
String as = key;
if (ass.length > 1) {
as = ass[1];
}
page.getSumList().put(as, jsonObject.get(as));
}
}
}
}
page.setTotal(count);
if (rowBounds instanceof PageRowBounds) {
((PageRowBounds) rowBounds).setTotal(count);
}
//pageSize < 0 的时候,不执行分页查询
//pageSize = 0 的时候,还需要执行后续查询,但是不会分页
if (page.getPageSizeZero() != null) {
//PageSizeZero=false&&pageSize<=0
if (!page.getPageSizeZero() && page.getPageSize() <= 0) {
return false;
}
//PageSizeZero=true&&pageSize<0 返回 false,只有>=0才需要执行后续的
else if (page.getPageSizeZero() && page.getPageSize() < 0) {
return false;
}
}
//页码>0 && 开始行数<总行数即可,不需要考虑 pageSize(上面的 if 已经处理不符合要求的值了)
return page.getPageNum() > 0 && count > page.getStartRow();
}
修改方法
修改方法
添加属性
修改方法
使用
思路:
找到执行汇总前,把你要汇总的字段添加到sql字符串中,再想办法返回对应的对象,注意要兼容不要影响不需要汇总的conut就可以了