From 323ce78a0566569ad23747e96094b33087890818 Mon Sep 17 00:00:00 2001 From: kamhung <22250530@qq.com> Date: Wed, 2 Dec 2015 11:51:46 +0800 Subject: [PATCH] --- .../redkale/service/DataSourceService.java | 338 ++++++++++++++++++ .../redkale/source/DataDefaultSource.java | 19 +- .../wentch/redkale/source/FilterBeanNode.java | 2 +- .../wentch/redkale/source/FilterJoinNode.java | 17 + src/com/wentch/redkale/source/FilterNode.java | 249 ++++++------- 5 files changed, 493 insertions(+), 132 deletions(-) create mode 100644 src/com/wentch/redkale/service/DataSourceService.java create mode 100644 src/com/wentch/redkale/source/FilterJoinNode.java diff --git a/src/com/wentch/redkale/service/DataSourceService.java b/src/com/wentch/redkale/service/DataSourceService.java new file mode 100644 index 000000000..b93bd0f25 --- /dev/null +++ b/src/com/wentch/redkale/service/DataSourceService.java @@ -0,0 +1,338 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.wentch.redkale.service; + +import com.wentch.redkale.source.*; +import com.wentch.redkale.util.*; +import java.io.*; +import java.util.*; +import javax.annotation.*; + +/** + * + * @author zhangjx + */ +public class DataSourceService implements DataSource, Service { + + @Resource(name = "$") + private DataSource source; + + @Override + public DataConnection createReadConnection() { + return source.createReadConnection(); + } + + @Override + public DataConnection createWriteConnection() { + return source.createWriteConnection(); + } + + @Override + public void insert(T... values) { + source.insert(values); + } + + @Override + public void insert(DataConnection conn, T... values) { + source.insert(conn, values); + } + + @Override + public void refreshCache(Class clazz) { + source.refreshCache(clazz); + } + + @Override + public void delete(T... values) { + source.delete(values); + } + + @Override + public void delete(DataConnection conn, T... values) { + source.delete(conn, values); + } + + @Override + public void delete(Class clazz, Serializable... ids) { + source.delete(clazz, ids); + } + + @Override + public void delete(DataConnection conn, Class clazz, Serializable... ids) { + source.delete(conn, clazz, ids); + } + + @Override + public void delete(Class clazz, FilterNode node) { + source.delete(clazz, node); + } + + @Override + public void delete(DataConnection conn, Class clazz, FilterNode node) { + source.delete(conn, clazz, node); + } + + @Override + public void update(T... values) { + source.update(values); + } + + @Override + public void update(DataConnection conn, T... values) { + source.update(conn, values); + } + + @Override + public void updateColumn(Class clazz, Serializable id, String column, Serializable value) { + source.updateColumn(clazz, id, column, value); + } + + @Override + public void updateColumn(DataConnection conn, Class clazz, Serializable id, String column, Serializable value) { + source.updateColumn(conn, clazz, id, column, value); + } + + @Override + public void updateColumns(T value, String... columns) { + source.updateColumns(value, columns); + } + + @Override + public void updateColumns(DataConnection conn, T value, String... columns) { + source.updateColumns(conn, value, columns); + } + + @Override + public void updateColumnIncrement(Class clazz, Serializable id, String column, long incvalue) { + source.updateColumnIncrement(clazz, id, column, incvalue); + } + + @Override + public void updateColumnIncrement(DataConnection conn, Class clazz, Serializable id, String column, long incvalue) { + source.updateColumnIncrement(conn, clazz, id, column, incvalue); + } + + @Override + public void updateColumnAnd(Class clazz, Serializable id, String column, long incvalue) { + source.updateColumnAnd(clazz, id, column, incvalue); + } + + @Override + public void updateColumnAnd(DataConnection conn, Class clazz, Serializable id, String column, long incvalue) { + source.updateColumnAnd(conn, clazz, id, column, incvalue); + } + + @Override + public void updateColumnOr(Class clazz, Serializable id, String column, long incvalue) { + source.updateColumnOr(clazz, id, column, incvalue); + } + + @Override + public void updateColumnOr(DataConnection conn, Class clazz, Serializable id, String column, long incvalue) { + source.updateColumnOr(conn, clazz, id, column, incvalue); + } + + @Override + public Number getNumberResult(Class entityClass, Reckon reckon, String column) { + return source.getNumberResult(entityClass, reckon, column); + } + + @Override + public Number getNumberResult(Class entityClass, Reckon reckon, String column, FilterBean bean) { + return source.getNumberResult(entityClass, reckon, column, bean); + } + + @Override + public Number getNumberResult(Class entityClass, Reckon reckon, String column, FilterNode node) { + return source.getNumberResult(entityClass, reckon, column, node); + } + + @Override + public Map getMapResult(Class entityClass, String keyColumn, Reckon reckon, String reckonColumn) { + return source.getMapResult(entityClass, keyColumn, reckon, reckonColumn); + } + + @Override + public Map getMapResult(Class entityClass, String keyColumn, Reckon reckon, String reckonColumn, FilterBean bean) { + return source.getMapResult(entityClass, keyColumn, reckon, reckonColumn, bean); + } + + @Override + public Map getMapResult(Class entityClass, String keyColumn, Reckon reckon, String reckonColumn, FilterNode node) { + return source.getMapResult(entityClass, keyColumn, reckon, reckonColumn, node); + } + + @Override + public T find(Class clazz, Serializable pk) { + return source.find(clazz, pk); + } + + @Override + public T find(Class clazz, SelectColumn selects, Serializable pk) { + return source.find(clazz, selects, pk); + } + + @Override + public T findByColumn(Class clazz, String column, Serializable key) { + return source.findByColumn(clazz, column, key); + } + + @Override + public T find(Class clazz, FilterNode node) { + return source.find(clazz, node); + } + + @Override + public T find(Class clazz, FilterBean bean) { + return source.find(clazz, bean); + } + + @Override + public boolean exists(Class clazz, Serializable pk) { + return source.exists(clazz, pk); + } + + @Override + public boolean exists(Class clazz, FilterNode node) { + return source.exists(clazz, node); + } + + @Override + public boolean exists(Class clazz, FilterBean bean) { + return source.exists(clazz, bean); + } + + @Override + public HashSet queryColumnSet(String selectedColumn, Class clazz, String column, Serializable key) { + return source.queryColumnSet(selectedColumn, clazz, column, key); + } + + @Override + public HashSet queryColumnSet(String selectedColumn, Class clazz, FilterNode node) { + return source.queryColumnSet(selectedColumn, clazz, node); + } + + @Override + public HashSet queryColumnSet(String selectedColumn, Class clazz, FilterBean bean) { + return source.queryColumnSet(selectedColumn, clazz, bean); + } + + @Override + public List queryColumnList(String selectedColumn, Class clazz, String column, Serializable key) { + return source.queryColumnList(selectedColumn, clazz, column, key); + } + + @Override + public List queryColumnList(String selectedColumn, Class clazz, FilterNode node) { + return source.queryColumnList(selectedColumn, clazz, node); + } + + @Override + public List queryColumnList(String selectedColumn, Class clazz, FilterBean bean) { + return source.queryColumnList(selectedColumn, clazz, bean); + } + + @Override + public Map queryMap(Class clazz, FilterNode node) { + return source.queryMap(clazz, node); + } + + @Override + public Map queryMap(Class clazz, FilterBean bean) { + return source.queryMap(clazz, bean); + } + + @Override + public Map queryMap(Class clazz, SelectColumn selects, FilterNode node) { + return source.queryMap(clazz, selects, node); + } + + @Override + public Map queryMap(Class clazz, SelectColumn selects, FilterBean bean) { + return source.queryMap(clazz, selects, bean); + } + + @Override + public List queryList(Class clazz, String column, Serializable key) { + return source.queryList(clazz, column, key); + } + + @Override + public List queryList(Class clazz, FilterNode node) { + return source.queryList(clazz, node); + } + + @Override + public List queryList(Class clazz, FilterBean bean) { + return source.queryList(clazz, bean); + } + + @Override + public List queryList(Class clazz, SelectColumn selects, FilterNode node) { + return source.queryList(clazz, selects, node); + } + + @Override + public List queryList(Class clazz, SelectColumn selects, FilterBean bean) { + return source.queryList(clazz, bean); + } + + @Override + public List queryList(Class clazz, Flipper flipper, String column, Serializable key) { + return source.queryList(clazz, flipper, column, key); + } + + @Override + public List queryList(Class clazz, Flipper flipper, FilterNode node) { + return source.queryList(clazz, flipper, node); + } + + @Override + public List queryList(Class clazz, Flipper flipper, FilterBean bean) { + return source.queryList(clazz, flipper, bean); + } + + @Override + public List queryList(Class clazz, SelectColumn selects, Flipper flipper, FilterNode node) { + return source.queryList(clazz, selects, flipper, node); + } + + @Override + public List queryList(Class clazz, SelectColumn selects, Flipper flipper, FilterBean bean) { + return source.queryList(clazz, selects, flipper, bean); + } + + @Override + public Sheet queryColumnSheet(String selectedColumn, Class clazz, Flipper flipper, FilterBean bean) { + return source.queryColumnSheet(selectedColumn, clazz, flipper, bean); + } + + @Override + public Sheet queryColumnSheet(String selectedColumn, Class clazz, Flipper flipper, FilterNode node) { + return source.queryColumnSheet(selectedColumn, clazz, flipper, node); + } + + @Override + public Sheet querySheet(Class clazz, Flipper flipper, FilterBean bean) { + return source.querySheet(clazz, flipper, bean); + } + + @Override + public Sheet querySheet(Class clazz, Flipper flipper, FilterNode node) { + return source.querySheet(clazz, flipper, node); + } + + @Override + public Sheet querySheet(Class clazz, SelectColumn selects, Flipper flipper, FilterBean bean) { + return source.querySheet(clazz, selects, flipper, bean); + } + + @Override + public Sheet querySheet(Class clazz, SelectColumn selects, Flipper flipper, FilterNode node) { + return source.querySheet(clazz, selects, flipper, node); + } + +} diff --git a/src/com/wentch/redkale/source/DataDefaultSource.java b/src/com/wentch/redkale/source/DataDefaultSource.java index e438e6fc2..4ca4a502e 100644 --- a/src/com/wentch/redkale/source/DataDefaultSource.java +++ b/src/com/wentch/redkale/source/DataDefaultSource.java @@ -24,7 +24,7 @@ import javax.xml.stream.*; * @author zhangjx */ @SuppressWarnings("unchecked") -public final class DataDefaultSource implements DataSource, Nameable { +public final class DataDefaultSource implements DataSource, Nameable, Function { public static final String DATASOURCE_CONFPATH = "DATASOURCE_CONFPATH"; @@ -326,6 +326,11 @@ public final class DataDefaultSource implements DataSource, Nameable { } } + @Override + public EntityInfo apply(Class t) { + return loadEntityInfo(t); + } + private EntityInfo loadEntityInfo(Class clazz) { return EntityInfo.load(clazz, this.nodeid, this.cacheForbidden, fullloader); } @@ -640,7 +645,7 @@ public final class DataDefaultSource implements DataSource, Nameable { private void delete(final Connection conn, final EntityInfo info, final FilterNode node) { try { if (!info.isVirtualEntity()) { - CharSequence join = node.createSQLJoin(info); + CharSequence join = node.createSQLJoin(this, info); CharSequence where = node.createSQLExpress(info, null); String sql = "DELETE FROM " + info.getTable() + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)); if (debug.get()) logger.finest(info.getType().getSimpleName() + " delete sql=" + sql); @@ -1085,7 +1090,7 @@ public final class DataDefaultSource implements DataSource, Nameable { return cache.getNumberResult(reckon, column, node, bean); } } - final CharSequence join = node == null ? null : node.createSQLJoin(info); + final CharSequence join = node == null ? null : node.createSQLJoin(this, info); final CharSequence where = node == null ? null : node.createSQLExpress(info, bean); final String sql = "SELECT " + reckon.getColumn((column == null || column.isEmpty() ? "*" : ("a." + column))) + " FROM " + info.getTable() + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)); @@ -1134,7 +1139,7 @@ public final class DataDefaultSource implements DataSource, Nameable { } } final String sqlkey = info.getSQLColumn(keyColumn); - final CharSequence join = node == null ? null : node.createSQLJoin(info); + final CharSequence join = node == null ? null : node.createSQLJoin(this, info); final CharSequence where = node == null ? null : node.createSQLExpress(info, bean); final String sql = "SELECT a." + sqlkey + ", " + reckon.getColumn((reckonColumn == null || reckonColumn.isEmpty() ? "*" : ("a." + reckonColumn))) + " FROM " + info.getTable() + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)) + " GROUP BY a." + sqlkey; @@ -1219,7 +1224,7 @@ public final class DataDefaultSource implements DataSource, Nameable { final Connection conn = createReadSQLConnection(); try { final SelectColumn sels = selects; - final CharSequence join = node == null ? null : node.createSQLJoin(info); + final CharSequence join = node == null ? null : node.createSQLJoin(this, info); final CharSequence where = node == null ? null : node.createSQLExpress(info, bean); final String sql = "SELECT a.* FROM " + info.getTable() + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)); if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " find sql=" + sql); @@ -1277,7 +1282,7 @@ public final class DataDefaultSource implements DataSource, Nameable { final Connection conn = createReadSQLConnection(); try { - final CharSequence join = node == null ? null : node.createSQLJoin(info); + final CharSequence join = node == null ? null : node.createSQLJoin(this, info); final CharSequence where = node == null ? null : node.createSQLExpress(info, bean); final String sql = "SELECT COUNT(a." + info.getPrimarySQLColumn() + ") FROM " + info.getTable() + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)); if (debug.get() && info.isLoggable(Level.FINEST)) logger.finest(clazz.getSimpleName() + " exists sql=" + sql); @@ -1531,7 +1536,7 @@ public final class DataDefaultSource implements DataSource, Nameable { try { final SelectColumn sels = selects; final List list = new ArrayList(); - final CharSequence join = node == null ? null : node.createSQLJoin(info); + final CharSequence join = node == null ? null : node.createSQLJoin(this, info); final CharSequence where = node == null ? null : node.createSQLExpress(info, bean); final String sql = "SELECT a.* FROM " + info.getTable() + " a" + (join == null ? "" : join) + ((where == null || where.length() == 0) ? "" : (" WHERE " + where)) + info.createSQLOrderby(flipper); diff --git a/src/com/wentch/redkale/source/FilterBeanNode.java b/src/com/wentch/redkale/source/FilterBeanNode.java index df6257f3a..81274429a 100644 --- a/src/com/wentch/redkale/source/FilterBeanNode.java +++ b/src/com/wentch/redkale/source/FilterBeanNode.java @@ -228,7 +228,7 @@ final class FilterBeanNode extends FilterNode { } @Override - protected CharSequence createSQLJoin(final EntityInfo info) { + protected CharSequence createSQLJoin(final Function func, final EntityInfo info) { if (joinSQL == null) return null; return joinSQL; } diff --git a/src/com/wentch/redkale/source/FilterJoinNode.java b/src/com/wentch/redkale/source/FilterJoinNode.java new file mode 100644 index 000000000..dee0ad503 --- /dev/null +++ b/src/com/wentch/redkale/source/FilterJoinNode.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.wentch.redkale.source; + +/** + * + * @author zhangjx + */ +public class FilterJoinNode extends FilterNode { + + private Class joinClass; + + private String joinColumn; +} diff --git a/src/com/wentch/redkale/source/FilterNode.java b/src/com/wentch/redkale/source/FilterNode.java index 5ddec7e73..e1c07924e 100644 --- a/src/com/wentch/redkale/source/FilterNode.java +++ b/src/com/wentch/redkale/source/FilterNode.java @@ -140,10 +140,11 @@ public class FilterNode { * 该方法需要重载 * * @param + * @param func * @param info * @return */ - protected CharSequence createSQLJoin(final EntityInfo info) { + protected CharSequence createSQLJoin(final Function func, final EntityInfo info) { return null; } @@ -273,28 +274,28 @@ public class FilterNode { if (express == ISNULL) return new Predicate() { - @Override - public boolean test(T t) { - return attr.get(t) == null; - } + @Override + public boolean test(T t) { + return attr.get(t) == null; + } - @Override - public String toString() { - return attr.field() + " = null"; - } - }; + @Override + public String toString() { + return attr.field() + " = null"; + } + }; if (express == ISNOTNULL) return new Predicate() { - @Override - public boolean test(T t) { - return attr.get(t) != null; - } + @Override + public boolean test(T t) { + return attr.get(t) != null; + } - @Override - public String toString() { - return attr.field() + " != null"; - } - }; + @Override + public String toString() { + return attr.field() + " != null"; + } + }; if (attr == null) return null; Serializable val0 = getElementValue(bean); if (val0 == null) return null; @@ -401,113 +402,113 @@ public class FilterNode { switch (express) { case EQUAL: return new Predicate() { - @Override - public boolean test(T t) { - return val.equals(attr.get(t)); - } + @Override + public boolean test(T t) { + return val.equals(attr.get(t)); + } - @Override - public String toString() { - return attr.field() + ' ' + express.value() + ' ' + val; - } - }; + @Override + public String toString() { + return attr.field() + ' ' + express.value() + ' ' + val; + } + }; case NOTEQUAL: return new Predicate() { - @Override - public boolean test(T t) { - return !val.equals(attr.get(t)); - } + @Override + public boolean test(T t) { + return !val.equals(attr.get(t)); + } - @Override - public String toString() { - return attr.field() + ' ' + express.value() + ' ' + val; - } - }; + @Override + public String toString() { + return attr.field() + ' ' + express.value() + ' ' + val; + } + }; case GREATERTHAN: return new Predicate() { - @Override - public boolean test(T t) { - return ((Number) attr.get(t)).longValue() > ((Number) val).longValue(); - } + @Override + public boolean test(T t) { + return ((Number) attr.get(t)).longValue() > ((Number) val).longValue(); + } - @Override - public String toString() { - return attr.field() + ' ' + express.value() + ' ' + val; - } - }; + @Override + public String toString() { + return attr.field() + ' ' + express.value() + ' ' + val; + } + }; case LESSTHAN: return new Predicate() { - @Override - public boolean test(T t) { - return ((Number) attr.get(t)).longValue() < ((Number) val).longValue(); - } + @Override + public boolean test(T t) { + return ((Number) attr.get(t)).longValue() < ((Number) val).longValue(); + } - @Override - public String toString() { - return attr.field() + ' ' + express.value() + ' ' + val; - } - }; + @Override + public String toString() { + return attr.field() + ' ' + express.value() + ' ' + val; + } + }; case GREATERTHANOREQUALTO: return new Predicate() { - @Override - public boolean test(T t) { - return ((Number) attr.get(t)).longValue() >= ((Number) val).longValue(); - } + @Override + public boolean test(T t) { + return ((Number) attr.get(t)).longValue() >= ((Number) val).longValue(); + } - @Override - public String toString() { - return attr.field() + ' ' + express.value() + ' ' + val; - } - }; + @Override + public String toString() { + return attr.field() + ' ' + express.value() + ' ' + val; + } + }; case LESSTHANOREQUALTO: return new Predicate() { - @Override - public boolean test(T t) { - return ((Number) attr.get(t)).longValue() <= ((Number) val).longValue(); - } + @Override + public boolean test(T t) { + return ((Number) attr.get(t)).longValue() <= ((Number) val).longValue(); + } - @Override - public String toString() { - return attr.field() + ' ' + express.value() + ' ' + val; - } - }; + @Override + public String toString() { + return attr.field() + ' ' + express.value() + ' ' + val; + } + }; case OPAND: return new Predicate() { - @Override - public boolean test(T t) { - return (((Number) attr.get(t)).longValue() & ((Number) val).longValue()) > 0; - } + @Override + public boolean test(T t) { + return (((Number) attr.get(t)).longValue() & ((Number) val).longValue()) > 0; + } - @Override - public String toString() { - return attr.field() + " & " + val + " > 0"; - } - }; + @Override + public String toString() { + return attr.field() + " & " + val + " > 0"; + } + }; case OPOR: return new Predicate() { - @Override - public boolean test(T t) { - return (((Number) attr.get(t)).longValue() | ((Number) val).longValue()) > 0; - } + @Override + public boolean test(T t) { + return (((Number) attr.get(t)).longValue() | ((Number) val).longValue()) > 0; + } - @Override - public String toString() { - return attr.field() + " | " + val + " > 0"; - } - }; + @Override + public String toString() { + return attr.field() + " | " + val + " > 0"; + } + }; case OPANDNO: return new Predicate() { - @Override - public boolean test(T t) { - return (((Number) attr.get(t)).longValue() & ((Number) val).longValue()) == 0; - } + @Override + public boolean test(T t) { + return (((Number) attr.get(t)).longValue() & ((Number) val).longValue()) == 0; + } - @Override - public String toString() { - return attr.field() + " & " + val + " = 0"; - } - }; + @Override + public String toString() { + return attr.field() + " & " + val + " = 0"; + } + }; case LIKE: return new Predicate() { @@ -573,34 +574,34 @@ public class FilterNode { final Comparable max = range.getMax(); if (express == BETWEEN) return new Predicate() { - @Override - public boolean test(T t) { - Comparable rs = (Comparable) attr.get(t); - if (rs == null) return false; - if (min != null && min.compareTo(rs) >= 0) return false; - return !(max != null && max.compareTo(rs) <= 0); - } + @Override + public boolean test(T t) { + Comparable rs = (Comparable) attr.get(t); + if (rs == null) return false; + if (min != null && min.compareTo(rs) >= 0) return false; + return !(max != null && max.compareTo(rs) <= 0); + } - @Override - public String toString() { - return attr.field() + " BETWEEN " + min + " AND " + max; - } - }; + @Override + public String toString() { + return attr.field() + " BETWEEN " + min + " AND " + max; + } + }; if (express == NOTBETWEEN) return new Predicate() { - @Override - public boolean test(T t) { - Comparable rs = (Comparable) attr.get(t); - if (rs == null) return true; - if (min != null && min.compareTo(rs) >= 0) return true; - return (max != null && max.compareTo(rs) <= 0); - } + @Override + public boolean test(T t) { + Comparable rs = (Comparable) attr.get(t); + if (rs == null) return true; + if (min != null && min.compareTo(rs) >= 0) return true; + return (max != null && max.compareTo(rs) <= 0); + } - @Override - public String toString() { - return attr.field() + " NOT BETWEEN " + min + " AND " + max; - } - }; + @Override + public String toString() { + return attr.field() + " NOT BETWEEN " + min + " AND " + max; + } + }; return null; case IN: case NOTIN: