diff --git a/src/com/wentch/redkale/source/DataDefaultSource.java b/src/com/wentch/redkale/source/DataDefaultSource.java index 920cd04d1..f473b0684 100644 --- a/src/com/wentch/redkale/source/DataDefaultSource.java +++ b/src/com/wentch/redkale/source/DataDefaultSource.java @@ -108,7 +108,7 @@ public final class DataDefaultSource implements DataSource, Nameable { } } - private final Function fullloader = (t) -> querySheet(false, t, null, null, (FilterNode) null, null).list(true); + private final Function fullloader = (t) -> querySheet(false, false, t, null, null, (FilterNode) null, null).list(true); public DataDefaultSource() throws IOException { this(""); @@ -1059,7 +1059,7 @@ public final class DataDefaultSource implements DataSource, Nameable { if (cache == null) return; String column = info.getPrimary().field(); for (Serializable id : ids) { - Sheet sheet = querySheet(false, clazz, null, FLIPPER_ONE, FilterNode.create(column, id), null); + Sheet sheet = querySheet(false, true, clazz, null, FLIPPER_ONE, FilterNode.create(column, id), null); T value = sheet.isEmpty() ? null : sheet.list().get(0); if (value != null) cache.update(value); } @@ -1309,12 +1309,12 @@ public final class DataDefaultSource implements DataSource, Nameable { */ @Override public List queryList(final Class clazz, final FilterBean bean) { - return queryList(clazz, null, bean); + return queryList(clazz, (SelectColumn) null, bean); } @Override public List queryList(final Class clazz, final FilterNode node) { - return queryList(clazz, null, node); + return queryList(clazz, (SelectColumn) null, node); } /** @@ -1328,12 +1328,37 @@ public final class DataDefaultSource implements DataSource, Nameable { */ @Override public List queryList(final Class clazz, final SelectColumn selects, final FilterBean bean) { - return querySheet(clazz, selects, null, bean).list(true); + return queryList(clazz, selects, (Flipper) null, bean); } @Override public List queryList(final Class clazz, final SelectColumn selects, final FilterNode node) { - return querySheet(clazz, selects, null, node).list(true); + return queryList(clazz, selects, (Flipper) null, node); + } + + @Override + public List queryList(Class clazz, final Flipper flipper, String column, Serializable key) { + return queryList(clazz, flipper, FilterNode.create(column, key)); + } + + @Override + public List queryList(final Class clazz, final Flipper flipper, final FilterNode node) { + return queryList(clazz, null, flipper, node); + } + + @Override + public List queryList(final Class clazz, final Flipper flipper, final FilterBean bean) { + return queryList(clazz, null, flipper, bean); + } + + @Override + public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + return querySheet(true, false, clazz, selects, flipper, node, null).list(true); + } + + @Override + public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { + return querySheet(true, false, clazz, selects, flipper, null, bean).list(true); } //-----------------------sheet---------------------------- @@ -1359,7 +1384,7 @@ public final class DataDefaultSource implements DataSource, Nameable { } private Sheet queryColumnSheet(String selectedColumn, Class clazz, final Flipper flipper, final FilterNode node, final FilterBean bean) { - Sheet sheet = querySheet(true, clazz, SelectColumn.createIncludes(selectedColumn), flipper, node, bean); + Sheet sheet = querySheet(true, true, clazz, SelectColumn.createIncludes(selectedColumn), flipper, node, bean); final Sheet rs = new Sheet<>(); if (sheet.isEmpty()) return rs; rs.setTotal(sheet.getTotal()); @@ -1404,15 +1429,15 @@ public final class DataDefaultSource implements DataSource, Nameable { */ @Override public Sheet querySheet(Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { - return querySheet(true, clazz, selects, flipper, null, bean); + return querySheet(true, true, clazz, selects, flipper, null, bean); } @Override public Sheet querySheet(Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { - return querySheet(true, clazz, selects, flipper, node, null); + return querySheet(true, true, clazz, selects, flipper, node, null); } - private Sheet querySheet(boolean readcache, Class clazz, final SelectColumn selects, final Flipper flipper, FilterNode node, final FilterBean bean) { + private Sheet querySheet(boolean readcache, boolean needtotal, Class clazz, final SelectColumn selects, final Flipper flipper, FilterNode node, final FilterBean bean) { final EntityInfo info = loadEntityInfo(clazz); final EntityCache cache = info.getCache(); if (node == null && bean != null) node = loadFilterBeanNode(bean.getClass()); @@ -1420,7 +1445,7 @@ public final class DataDefaultSource implements DataSource, Nameable { Predicate filter = node == null ? null : node.createFilterPredicate(info, bean); if (node == null || node.isJoinAllCached()) { if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " cache query predicate = " + filter); - Sheet sheet = cache.querySheet(selects, filter, flipper, FilterNode.createFilterComparator(info, flipper)); + Sheet sheet = cache.querySheet(needtotal, selects, filter, flipper, FilterNode.createFilterComparator(info, flipper)); if (!sheet.isEmpty() || info.isVirtualEntity() || cache.isFullLoaded()) return sheet; } } @@ -1437,17 +1462,15 @@ public final class DataDefaultSource implements DataSource, Nameable { if (flipper != null && flipper.index() > 0) set.absolute(flipper.index()); final int limit = flipper == null ? Integer.MAX_VALUE : flipper.getSize(); int i = 0; - long total; while (set.next()) { i++; list.add(info.getValue(sels, set)); if (limit <= i) break; } - if (flipper != null) { + long total = list.size(); + if (needtotal && flipper != null) { set.last(); total = set.getRow(); - } else { - total = list.size(); } set.close(); ps.close(); diff --git a/src/com/wentch/redkale/source/DataSource.java b/src/com/wentch/redkale/source/DataSource.java index e1d23893f..181d76a99 100644 --- a/src/com/wentch/redkale/source/DataSource.java +++ b/src/com/wentch/redkale/source/DataSource.java @@ -100,11 +100,11 @@ public interface DataSource { public void updateColumnIncrement(final Class clazz, Serializable id, String column, long incvalue); public void updateColumnIncrement(final DataConnection conn, Class clazz, Serializable id, String column, long incvalue); - + public void updateColumnAnd(final Class clazz, Serializable id, String column, long incvalue); public void updateColumnAnd(final DataConnection conn, Class clazz, Serializable id, String column, long incvalue); - + public void updateColumnOr(final Class clazz, Serializable id, String column, long incvalue); public void updateColumnOr(final DataConnection conn, Class clazz, Serializable id, String column, long incvalue); @@ -197,7 +197,7 @@ public interface DataSource { * @param key * @return */ - public List queryList(Class clazz, String column, Serializable key); + public List queryList(final Class clazz, final String column, final Serializable key); public List queryList(final Class clazz, final FilterNode node); @@ -207,6 +207,16 @@ public interface DataSource { public List queryList(final Class clazz, final SelectColumn selects, final FilterBean bean); + public List queryList(final Class clazz, final Flipper flipper, final String column, final Serializable key); + + public List queryList(final Class clazz, final Flipper flipper, final FilterNode node); + + public List queryList(final Class clazz, final Flipper flipper, final FilterBean bean); + + public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node); + + public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean); + //-----------------------sheet---------------------------- /** * 根据指定参数查询对象某个字段的集合 @@ -219,16 +229,16 @@ public interface DataSource { * @param bean * @return */ - public Sheet queryColumnSheet(String selectedColumn, Class clazz, final Flipper flipper, final FilterBean bean); + public Sheet queryColumnSheet(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean); - public Sheet queryColumnSheet(String selectedColumn, Class clazz, final Flipper flipper, final FilterNode node); + public Sheet queryColumnSheet(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node); - public Sheet querySheet(Class clazz, final Flipper flipper, final FilterBean bean); + public Sheet querySheet(final Class clazz, final Flipper flipper, final FilterBean bean); - public Sheet querySheet(Class clazz, final Flipper flipper, final FilterNode node); + public Sheet querySheet(final Class clazz, final Flipper flipper, final FilterNode node); - public Sheet querySheet(Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean); + public Sheet querySheet(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean); - public Sheet querySheet(Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node); + public Sheet querySheet(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node); } diff --git a/src/com/wentch/redkale/source/EntityCache.java b/src/com/wentch/redkale/source/EntityCache.java index 670962e08..571ef5d14 100644 --- a/src/com/wentch/redkale/source/EntityCache.java +++ b/src/com/wentch/redkale/source/EntityCache.java @@ -255,11 +255,11 @@ public final class EntityCache { return parallel ? (set ? new LinkedHashSet<>(rs) : new ArrayList<>(rs)) : rs; } - public Sheet querySheet(final SelectColumn selects, final Predicate filter, final Flipper flipper, final Comparator sort) { + public Sheet querySheet(final boolean needtotal, final SelectColumn selects, final Predicate filter, final Flipper flipper, final Comparator sort) { Stream stream = listStream(); if (filter != null) stream = stream.filter(filter); - long total = stream.count(); - if (total == 0) return new Sheet<>(); + long total = needtotal ? stream.count() : 0; + if (needtotal && total == 0) return new Sheet<>(); stream = listStream(); if (filter != null) stream = stream.filter(filter); if (sort != null) stream = stream.sorted(sort); @@ -293,6 +293,7 @@ public final class EntityCache { stream.forEach(action); } } + if (!needtotal) total = rs.size(); return new Sheet<>(total, parallel ? new ArrayList<>(rs) : rs); }