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 Map<String, String> sortOrderbySqls = new ConcurrentHashMap<>();
private final Map<String, Comparator<T>> sortComparators = new ConcurrentHashMap<>();
//---------------------计算主键值----------------------------
private final int nodeid;
@@ -277,6 +281,22 @@ public final class EntityInfo<T> {
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字段名获取数据库对应的字段名
public String getSQLColumn(String 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) {
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();
sb.append(" ORDER BY ");
if (info.isNoAlias()) {
sb.append(flipper.getSort());
sb.append(sort);
} else {
boolean flag = false;
for (String item : flipper.getSort().split(",")) {
for (String item : sort.split(",")) {
if (item.isEmpty()) continue;
String[] sub = item.split("\\s+");
if (flag) sb.append(',');
@@ -227,7 +230,9 @@ public class FilterNode {
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) {
@@ -755,8 +760,10 @@ public class FilterNode {
protected static <E> Comparator<E> createFilterComparator(EntityInfo<E> info, Flipper flipper) {
if (flipper == null || flipper.getSort() == null || flipper.getSort().isEmpty()) return null;
Comparator<E> comparator = null;
for (String item : flipper.getSort().split(",")) {
final String sort = flipper.getSort();
Comparator<E> comparator = info.getSortComparator(sort);
if (comparator != null) return comparator;
for (String item : sort.split(",")) {
if (item.trim().isEmpty()) continue;
String[] sub = item.trim().split("\\s+");
int pos = sub[0].indexOf('(');
@@ -903,6 +910,7 @@ public class FilterNode {
comparator = comparator.thenComparing(c);
}
}
info.putSortComparator(sort, comparator);
return comparator;
}