diff --git a/src/main/java/org/redkale/cluster/CacheClusterAgent.java b/src/main/java/org/redkale/cluster/CacheClusterAgent.java index af33b757c..a047358d6 100644 --- a/src/main/java/org/redkale/cluster/CacheClusterAgent.java +++ b/src/main/java/org/redkale/cluster/CacheClusterAgent.java @@ -30,7 +30,7 @@ import org.redkale.util.*; */ public class CacheClusterAgent extends ClusterAgent implements Resourcable { - @Resource(name = "$") + @Resource(name = Resource.PARENT_NAME) private CacheSource source; private String sourceName; diff --git a/src/main/java/org/redkale/source/DataSqlSource.java b/src/main/java/org/redkale/source/DataSqlSource.java index b6692064b..90a7c75ba 100644 --- a/src/main/java/org/redkale/source/DataSqlSource.java +++ b/src/main/java/org/redkale/source/DataSqlSource.java @@ -7,7 +7,7 @@ import java.util.function.Function; /** * - * 关系型数据库的数据源, 接口与DataSource基本一致。
+ * 关系型sql数据库的数据源, 比DataSource多了操作sql语句的接口。
* *

* 详情见: https://redkale.org diff --git a/src/main/java/org/redkale/source/DistributeTable.java b/src/main/java/org/redkale/source/DistributeTable.java index 4ba4e757b..e41108435 100644 --- a/src/main/java/org/redkale/source/DistributeTable.java +++ b/src/main/java/org/redkale/source/DistributeTable.java @@ -5,11 +5,9 @@ */ package org.redkale.source; -import org.redkale.source.DistributeTableStrategy; - +import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * Entity分库分表的注解,需要结合DistributeTableStrategy使用
diff --git a/src/main/java/org/redkale/source/DistributeTableStrategy.java b/src/main/java/org/redkale/source/DistributeTableStrategy.java index 92701a861..9f777a1c4 100644 --- a/src/main/java/org/redkale/source/DistributeTableStrategy.java +++ b/src/main/java/org/redkale/source/DistributeTableStrategy.java @@ -42,12 +42,26 @@ public interface DistributeTableStrategy { */ public String getTable(String table, T bean); + /** + * 获取对象的表名
+ * 查询、修改、删除对象(DataSource.find、DataSource.query、DataSource.delete、DataSource.update)时调用本方法获取表名
+ * + * @param table 模板表的表名 + * @param node 过滤条件 + * + * @return 带库名的全表名 + * + * @since 2.8.0 + */ + public String[] getTables(String table, FilterNode node); + /** * 获取对象的表名
* 查询、修改、删除对象(DataSource.find、DataSource.query、DataSource.delete、DataSource.update)时调用本方法获取表名
* 注意: 需保证FilterNode过滤的结果集合必须在一个数据库表中
* * @deprecated 2.8.0 replaced by getTables(String table, FilterNode node) + * @see #getTables(java.lang.String, org.redkale.source.FilterNode) * * @param table 模板表的表名 * @param node 过滤条件 @@ -59,19 +73,4 @@ public interface DistributeTableStrategy { return getTables(table, node)[0]; } - /** - * 获取对象的表名
- * 查询、修改、删除对象(DataSource.find、DataSource.query、DataSource.delete、DataSource.update)时调用本方法获取表名
- * - * @param table 模板表的表名 - * @param node 过滤条件 - * - * @return 带库名的全表名 - * - * @since 2.8.0 - */ - default String[] getTables(String table, FilterNode node) { - return new String[]{getTable(table, node)}; - } - } diff --git a/src/main/java/org/redkale/source/EntityCache.java b/src/main/java/org/redkale/source/EntityCache.java index 38afcc4da..98526ef74 100644 --- a/src/main/java/org/redkale/source/EntityCache.java +++ b/src/main/java/org/redkale/source/EntityCache.java @@ -41,8 +41,6 @@ public final class EntityCache { //continuousid=true此字段值才有效 private T[] array; - private final IntFunction mapFunc = c -> array[c]; - //Flipper.sort转换成Comparator的缓存 private final Map> sortComparators = new ConcurrentHashMap<>(); diff --git a/src/main/java/org/redkale/util/AnyValue.java b/src/main/java/org/redkale/util/AnyValue.java index b7b244c75..8c0476183 100644 --- a/src/main/java/org/redkale/util/AnyValue.java +++ b/src/main/java/org/redkale/util/AnyValue.java @@ -1673,8 +1673,8 @@ public abstract class AnyValue { * * @return String */ - public String toXML(String rootName) { - return toXMLString(new StringBuilder("\r\n\r\n"), rootName, this, 0).toString(); + public String toXml(String rootName) { + return toXmlString(new StringBuilder("\r\n\r\n"), rootName, this, 0).toString(); } /** @@ -1687,7 +1687,7 @@ public abstract class AnyValue { * * @return StringBuilder */ - protected static StringBuilder toXMLString(StringBuilder sb, String nodeName, AnyValue conf, int indent) { //indent: 缩进长度 + protected static StringBuilder toXmlString(StringBuilder sb, String nodeName, AnyValue conf, int indent) { //indent: 缩进长度 if (indent < 0) { indent = 0; } @@ -1702,9 +1702,40 @@ public abstract class AnyValue { } sb.append(">\r\n\r\n"); for (Entry en : conf.getAnyEntrys()) { - toXMLString(sb, en.name, en.getValue(), indent + 4); + toXmlString(sb, en.name, en.getValue(), indent + 4); } return sb.append(space).append("\r\n\r\n"); } + public String toJsonString() { + Entry[] stringArray = getStringEntrys(); + Entry[] anyArray = getAnyEntrys(); + final StringBuilder sb = new StringBuilder(); + sb.append('{'); + int size = (stringArray == null ? 0 : stringArray.length) + (anyArray == null ? 0 : anyArray.length); + int index = 0; + if (stringArray != null) { + for (Entry en : stringArray) { + if (en.value == null) { + sb.append('"').append(en.name.replace("\"", "\\\"")).append("\":null"); + } else { + sb.append('"').append(en.name.replace("\"", "\\\"")).append("\":\"").append(en.value.replace("\"", "\\\"")).append('"'); + } + if (++index < size) { + sb.append(','); + } + } + } + if (anyArray != null) { + for (Entry en : anyArray) { + sb.append('"').append(en.name.replace("\"", "\\\"")).append("\":").append(en.value.toJsonString()); + if (++index < size) { + sb.append(','); + } + } + } + sb.append('}'); + return sb.toString(); + } + } diff --git a/src/test/java/org/redkale/test/util/AnyValuePropertiesTest.java b/src/test/java/org/redkale/test/util/AnyValuePropertiesTest.java index 34fe55152..f470fd2fc 100644 --- a/src/test/java/org/redkale/test/util/AnyValuePropertiesTest.java +++ b/src/test/java/org/redkale/test/util/AnyValuePropertiesTest.java @@ -5,6 +5,7 @@ package org.redkale.test.util; import java.util.Properties; import org.junit.jupiter.api.*; import org.redkale.util.AnyValue; +import org.redkale.util.AnyValue.DefaultAnyValue; /** * @@ -106,4 +107,14 @@ public class AnyValuePropertiesTest { //System.out.println(conf.copy().merge(conf2)); //System.out.println(conf); } + + @Test + public void run3() { + DefaultAnyValue conf = AnyValue.create(); + conf.addValue("name", "haha"); + conf.addValue("value", AnyValue.create().addValue("id", 1234).addValue("key", (String) null).addValue("desc", "nothing !!!")); + String json = "{\"name\":\"haha\",\"value\":{\"id\":\"1234\",\"key\":null,\"desc\":\"nothing !!!\"}}"; + Assertions.assertEquals(json, conf.toJsonString()); + } + }