This commit is contained in:
kamhung
2015-11-11 16:52:14 +08:00
parent a6f6a5101e
commit ce737dbd20
2 changed files with 33 additions and 5 deletions

View File

@@ -68,6 +68,10 @@ public final class EntityInfo<T> {
private final int logLevel; private final int logLevel;
private final Map<String, String> sortOrderbySqls = new ConcurrentHashMap<>();
private final Map<String, Comparator<T>> sortComparators = new ConcurrentHashMap<>();
//---------------------计算主键值---------------------------- //---------------------计算主键值----------------------------
private final int nodeid; private final int nodeid;
@@ -277,6 +281,22 @@ public final class EntityInfo<T> {
return this.aliasmap == null; return this.aliasmap == null;
} }
public String getSortOrderbySql(String sort) {
return this.sortOrderbySqls.get(sort);
}
protected void putSortOrderbySql(String sort, String sql) {
this.sortOrderbySqls.put(sort, sql);
}
public Comparator<T> getSortComparator(String sort) {
return this.sortComparators.get(sort);
}
protected void putSortComparator(String sort, Comparator<T> comparator) {
this.sortComparators.put(sort, comparator);
}
//根据field字段名获取数据库对应的字段名 //根据field字段名获取数据库对应的字段名
public String getSQLColumn(String fieldname) { public String getSQLColumn(String fieldname) {
return this.aliasmap == null ? fieldname : aliasmap.getOrDefault(fieldname, fieldname); return this.aliasmap == null ? fieldname : aliasmap.getOrDefault(fieldname, fieldname);

View File

@@ -209,13 +209,16 @@ public class FilterNode {
protected static <E> String createFilterSQLOrderBy(EntityInfo<E> info, Flipper flipper) { protected static <E> String createFilterSQLOrderBy(EntityInfo<E> info, Flipper flipper) {
if (flipper == null || flipper.getSort() == null || flipper.getSort().isEmpty()) return ""; if (flipper == null || flipper.getSort() == null || flipper.getSort().isEmpty()) return "";
final String sort = flipper.getSort();
String sql = info.getSortOrderbySql(sort);
if (sql != null) return sql;
final StringBuilder sb = new StringBuilder(); final StringBuilder sb = new StringBuilder();
sb.append(" ORDER BY "); sb.append(" ORDER BY ");
if (info.isNoAlias()) { if (info.isNoAlias()) {
sb.append(flipper.getSort()); sb.append(sort);
} else { } else {
boolean flag = false; boolean flag = false;
for (String item : flipper.getSort().split(",")) { for (String item : sort.split(",")) {
if (item.isEmpty()) continue; if (item.isEmpty()) continue;
String[] sub = item.split("\\s+"); String[] sub = item.split("\\s+");
if (flag) sb.append(','); if (flag) sb.append(',');
@@ -227,7 +230,9 @@ public class FilterNode {
flag = true; flag = true;
} }
} }
return sb.toString(); sql = sb.toString();
info.putSortOrderbySql(sort, sql);
return sql;
} }
protected <T> Predicate<T> createFilterPredicate(final EntityInfo<T> info, FilterBean bean) { protected <T> Predicate<T> createFilterPredicate(final EntityInfo<T> info, FilterBean bean) {
@@ -755,8 +760,10 @@ public class FilterNode {
protected static <E> Comparator<E> createFilterComparator(EntityInfo<E> info, Flipper flipper) { protected static <E> Comparator<E> createFilterComparator(EntityInfo<E> info, Flipper flipper) {
if (flipper == null || flipper.getSort() == null || flipper.getSort().isEmpty()) return null; if (flipper == null || flipper.getSort() == null || flipper.getSort().isEmpty()) return null;
Comparator<E> comparator = null; final String sort = flipper.getSort();
for (String item : flipper.getSort().split(",")) { Comparator<E> comparator = info.getSortComparator(sort);
if (comparator != null) return comparator;
for (String item : sort.split(",")) {
if (item.trim().isEmpty()) continue; if (item.trim().isEmpty()) continue;
String[] sub = item.trim().split("\\s+"); String[] sub = item.trim().split("\\s+");
int pos = sub[0].indexOf('('); int pos = sub[0].indexOf('(');
@@ -903,6 +910,7 @@ public class FilterNode {
comparator = comparator.thenComparing(c); comparator = comparator.thenComparing(c);
} }
} }
info.putSortComparator(sort, comparator);
return comparator; return comparator;
} }