diff --git a/README.md b/README.md
index a7268b1418486..09214ac51fa6a 100644
--- a/README.md
+++ b/README.md
@@ -122,11 +122,12 @@
## 规则配置
`Sharding-JDBC`的分库分表通过规则配置描述,请简单浏览配置全貌:
```java
- ShardingRule shardingRule = new ShardingRule(
- dataSourceRule,
- Arrays.asList(tableRule),
- new DatabaseShardingStrategy("sharding_column_1", new XXXShardingAlgorithm()),
- new TableShardingStrategy("sharding_column_2", new XXXShardingAlgorithm()));
+ ShardingRule shardingRule = ShardingRule.builder()
+ .dataSourceRule(dataSourceRule)
+ .tableRules(tableRules)
+ .databaseShardingStrategy(new DatabaseShardingStrategy("sharding_column_1", new XXXShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("sharding_column_2", new XXXShardingAlgorithm())))
+ .build();
```
规则配置包括数据源配置、表规则配置、分库策略和分表策略组成。这只是最简单的配置方式,实际使用可更加灵活,如:多分片键,分片策略直接和`tableRule`绑定等。
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java
index 4641aac683e3a..7bbd4dc453559 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilder.java
@@ -21,10 +21,6 @@
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule;
-import com.dangdang.ddframe.rdb.sharding.router.strategy.MultipleKeysShardingAlgorithm;
-import com.dangdang.ddframe.rdb.sharding.router.strategy.ShardingAlgorithm;
-import com.dangdang.ddframe.rdb.sharding.router.strategy.ShardingStrategy;
-import com.dangdang.ddframe.rdb.sharding.router.strategy.SingleKeyShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.MultipleKeysDatabaseShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.SingleKeyDatabaseShardingAlgorithm;
@@ -38,6 +34,10 @@
import com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm.ClosureDatabaseShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm.ClosureTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.config.common.internal.parser.InlineParser;
+import com.dangdang.ddframe.rdb.sharding.router.strategy.MultipleKeysShardingAlgorithm;
+import com.dangdang.ddframe.rdb.sharding.router.strategy.ShardingAlgorithm;
+import com.dangdang.ddframe.rdb.sharding.router.strategy.ShardingStrategy;
+import com.dangdang.ddframe.rdb.sharding.router.strategy.SingleKeyShardingAlgorithm;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
@@ -83,9 +83,9 @@ public ShardingRuleBuilder(final String logRoot, final ShardingRuleConfig shardi
public ShardingRule build() {
DataSourceRule dataSourceRule = buildDataSourceRule();
Collection tableRules = buildTableRules(dataSourceRule);
- return new ShardingRule(dataSourceRule, tableRules, buildBindingTableRules(tableRules),
- buildShardingStrategy(shardingRuleConfig.getDefaultDatabaseStrategy(), DatabaseShardingStrategy.class),
- buildShardingStrategy(shardingRuleConfig.getDefaultTableStrategy(), TableShardingStrategy.class));
+ return ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(tableRules).bindingTableRules(buildBindingTableRules(tableRules))
+ .databaseShardingStrategy(buildShardingStrategy(shardingRuleConfig.getDefaultDatabaseStrategy(), DatabaseShardingStrategy.class))
+ .tableShardingStrategy(buildShardingStrategy(shardingRuleConfig.getDefaultTableStrategy(), TableShardingStrategy.class)).build();
}
private DataSourceRule buildDataSourceRule() {
@@ -96,17 +96,13 @@ private DataSourceRule buildDataSourceRule() {
private Collection buildTableRules(final DataSourceRule dataSourceRule) {
Collection result = new ArrayList<>(shardingRuleConfig.getTables().size());
for (Entry each : shardingRuleConfig.getTables().entrySet()) {
- TableRule tableRule;
- if (null == each.getValue().getActualTables()) {
- tableRule = new TableRule(each.getKey(), dataSourceRule,
- buildShardingStrategy(each.getValue().getDatabaseStrategy(), DatabaseShardingStrategy.class),
- buildShardingStrategy(each.getValue().getTableStrategy(), TableShardingStrategy.class));
- } else {
- tableRule = new TableRule(each.getKey(), new InlineParser(each.getValue().getActualTables()).evaluate(), dataSourceRule,
- buildShardingStrategy(each.getValue().getDatabaseStrategy(), DatabaseShardingStrategy.class),
- buildShardingStrategy(each.getValue().getTableStrategy(), TableShardingStrategy.class));
+ TableRule.TableRuleBuilder tableRuleBuilder = TableRule.builder(each.getKey()).dataSourceRule(dataSourceRule).dynamic(each.getValue().isDynamic())
+ .databaseShardingStrategy(buildShardingStrategy(each.getValue().getDatabaseStrategy(), DatabaseShardingStrategy.class))
+ .tableShardingStrategy(buildShardingStrategy(each.getValue().getTableStrategy(), TableShardingStrategy.class));
+ if (null != each.getValue().getActualTables()) {
+ tableRuleBuilder.actualTables(new InlineParser(each.getValue().getActualTables()).evaluate());
}
- result.add(tableRule);
+ result.add(tableRuleBuilder.build());
}
return result;
}
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/TableRuleConfig.java b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/TableRuleConfig.java
index afaaeec938615..6d4ebf189441c 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/TableRuleConfig.java
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/main/java/com/dangdang/ddframe/rdb/sharding/config/common/api/config/TableRuleConfig.java
@@ -29,6 +29,8 @@
@Setter
public class TableRuleConfig {
+ private boolean dynamic;
+
private String actualTables;
private StrategyConfig databaseStrategy;
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/AllTests.java b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/AllTests.java
index 870f0bd13e979..7b54ced064bec 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/AllTests.java
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/AllTests.java
@@ -32,5 +32,4 @@
InlineParserTest.class
})
public class AllTests {
-
}
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilderTest.java b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilderTest.java
index 9b6f76d8d6d2c..b974c6f7cfa9b 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilderTest.java
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/java/com/dangdang/ddframe/rdb/sharding/config/common/api/ShardingRuleBuilderTest.java
@@ -22,6 +22,7 @@
import java.util.Map;
import javax.sql.DataSource;
+import com.dangdang.ddframe.rdb.sharding.api.rule.DynamicDataNode;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule;
import com.dangdang.ddframe.rdb.sharding.config.common.api.config.ShardingRuleConfig;
@@ -33,7 +34,9 @@
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsCollectionContaining.hasItem;
import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
@Slf4j
public class ShardingRuleBuilderTest {
@@ -58,6 +61,35 @@ public void testMin() {
assertThat(shardingRule.getTableRules().size(), is(1));
}
+ @Test
+ public void testDynamic() {
+ Yaml yaml = new Yaml(new Constructor(ShardingRuleConfig.class));
+ Map dsMap = new HashMap<>();
+ dsMap.put("ds", new BasicDataSource());
+ ShardingRuleConfig config = (ShardingRuleConfig) yaml.load(ShardingRuleBuilderTest.class.getResourceAsStream("/config/config-dynamic.yaml"));
+ ShardingRule shardingRule = new ShardingRuleBuilder("config-dynamic.yaml", dsMap, config).build();
+ int i = 0;
+ for (TableRule each : shardingRule.getTableRules()) {
+ i++;
+ assertThat(each.getActualTables().size(), is(2));
+ assertThat(each.getActualTables(), hasItem(new DynamicDataNode("db0")));
+ assertThat(each.getActualTables(), hasItem(new DynamicDataNode("db1")));
+ switch (i) {
+ case 1:
+ assertThat(each.getLogicTable(), is("config"));
+ break;
+ case 2:
+ assertThat(each.getLogicTable(), is("t_order"));
+ break;
+ case 3:
+ assertThat(each.getLogicTable(), is("t_order_item"));
+ break;
+ default:
+ fail();
+ }
+ }
+ }
+
@Test(expected = IllegalArgumentException.class)
public void testClassNotFound() {
Yaml yaml = new Yaml(new Constructor(ShardingRuleConfig.class));
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/resources/config/config-dynamic.yaml b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/resources/config/config-dynamic.yaml
new file mode 100644
index 0000000000000..94cd3853f9daa
--- /dev/null
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-common/src/test/resources/config/config-dynamic.yaml
@@ -0,0 +1,40 @@
+dataSource:
+ db0: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: org.h2.Driver
+ url: jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
+ username: sa
+ password:
+ maxActive: 100
+ db1: !!org.apache.commons.dbcp.BasicDataSource
+ driverClassName: org.h2.Driver
+ url: jdbc:h2:mem:%s;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false;MODE=MYSQL
+ username: sa
+ password:
+ maxActive: 100
+
+tables:
+ config:
+ dynamic: true
+
+ t_order:
+ dynamic: true
+ databaseStrategy: &db001
+ shardingColumns: order_id
+ algorithmClassName: com.dangdang.ddframe.rdb.sharding.config.common.internal.fixture.SingleAlgorithm
+ tableStrategy: &table001
+ shardingColumns: id
+ algorithmExpression: t_order_${id.longValue() % 2}
+
+ t_order_item:
+ dynamic: true
+ #绑定表中其余的表的策略与第一张表的策略相同
+ databaseStrategy: *db001
+ tableStrategy: *table001
+
+#默认数据库分片策略
+defaultDatabaseStrategy:
+ shardingColumns: order_id, user_id
+ algorithmExpression: t_order_${id.longValue() % 2}
+defaultTableStrategy:
+ shardingColumns: id, order_id
+ algorithmClassName: com.dangdang.ddframe.rdb.sharding.config.common.internal.fixture.MultiAlgorithm
\ No newline at end of file
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/constants/ShardingJdbcDataSourceBeanDefinitionParserTag.java b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/constants/ShardingJdbcDataSourceBeanDefinitionParserTag.java
index 5d555bc9eb426..81d49a29a13ad 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/constants/ShardingJdbcDataSourceBeanDefinitionParserTag.java
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/constants/ShardingJdbcDataSourceBeanDefinitionParserTag.java
@@ -46,6 +46,8 @@ public final class ShardingJdbcDataSourceBeanDefinitionParserTag {
public static final String LOGIC_TABLES_ATTR = "logic-tables";
+ public static final String DYNAMIC_TABLE_ATTR = "dynamic";
+
public static final String ACTUAL_TABLES_ATTR = "actual-tables";
public static final String DATABASE_STRATEGY_ATTR = "database-strategy";
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/parser/ShardingJdbcDataSourceBeanDefinitionParser.java b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/parser/ShardingJdbcDataSourceBeanDefinitionParser.java
index c7cb9f2a1416e..4d7e1a383915c 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/parser/ShardingJdbcDataSourceBeanDefinitionParser.java
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/java/com/dangdang/ddframe/rdb/sharding/spring/namespace/parser/ShardingJdbcDataSourceBeanDefinitionParser.java
@@ -88,6 +88,10 @@ private Map parseTableRulesConfig(final Element element)
private BeanDefinition parseTableRuleConfig(final Element tableElement) {
BeanDefinitionBuilder factory = BeanDefinitionBuilder.rootBeanDefinition(TableRuleConfig.class);
+ String dynamic = tableElement.getAttribute(ShardingJdbcDataSourceBeanDefinitionParserTag.DYNAMIC_TABLE_ATTR);
+ if (!Strings.isNullOrEmpty(dynamic)) {
+ factory.addPropertyValue("dynamic", dynamic);
+ }
String actualTables = tableElement.getAttribute(ShardingJdbcDataSourceBeanDefinitionParserTag.ACTUAL_TABLES_ATTR);
if (!Strings.isNullOrEmpty(actualTables)) {
factory.addPropertyValue("actualTables", actualTables);
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd
index 435dea588b4db..593b2cd55148d 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/main/resources/META-INF/namespace/rdb.xsd
@@ -36,6 +36,7 @@
+
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/namespace/withNamespaceAlgorithmExpressionForDynamic.xml b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/namespace/withNamespaceAlgorithmExpressionForDynamic.xml
index 42c55045d371a..1106eb0f658e6 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/namespace/withNamespaceAlgorithmExpressionForDynamic.xml
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/namespace/withNamespaceAlgorithmExpressionForDynamic.xml
@@ -18,8 +18,8 @@
-
-
+
+
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/withoutNamespace.xml b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/withoutNamespace.xml
index 16a6949f45265..62152864d2fa0 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/withoutNamespace.xml
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/withoutNamespace.xml
@@ -18,7 +18,8 @@
-
+
+
t_order_0
t_order_1
@@ -26,14 +27,15 @@
t_order_3
-
-
-
+
+
+
-
+
+
t_order_item_0
t_order_item_1
@@ -41,9 +43,9 @@
t_order_item_3
-
-
-
+
+
+
@@ -68,6 +70,15 @@
+
+
+
+
+
+
+
+
+
diff --git a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/withoutNamespaceStrategyOutside.xml b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/withoutNamespaceStrategyOutside.xml
index a1803d4bace61..4ada3cdf47048 100644
--- a/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/withoutNamespaceStrategyOutside.xml
+++ b/sharding-jdbc-config-parent/sharding-jdbc-config-spring/src/test/resources/META-INF/rdb/withoutNamespaceStrategyOutside.xml
@@ -17,7 +17,8 @@
-
+
+
t_order_0
t_order_1
@@ -25,12 +26,19 @@
t_order_3
-
+
+
+
+
+
+
+
-
+
+
t_order_item_0
t_order_item_1
@@ -38,7 +46,13 @@
t_order_item_3
-
+
+
+
+
+
+
+
@@ -63,8 +77,11 @@
-
-
+
+
+
+
+
diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSource.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSource.java
index d6c221aaa05cd..b22e148b5d127 100644
--- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSource.java
+++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSource.java
@@ -28,6 +28,7 @@
* 已废弃, 请使用ShardingDataSourceFactory创建数据源. 未来版本中将删除此类.
*
*
+ * @deprecated
* @author zhangliang
*/
@Deprecated
diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRule.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRule.java
index 8ec0c80dae542..817e984eaa4c5 100644
--- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRule.java
+++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRule.java
@@ -23,6 +23,7 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
+import lombok.Builder;
import lombok.Getter;
import java.util.ArrayList;
@@ -37,6 +38,7 @@
* @author zhangliang
*/
@Getter
+@Builder
public final class ShardingRule {
private final DataSourceRule dataSourceRule;
@@ -45,42 +47,28 @@ public final class ShardingRule {
private final Collection bindingTableRules;
- private final DatabaseShardingStrategy databaseShardingStrategy;
+ private DatabaseShardingStrategy databaseShardingStrategy;
- private final TableShardingStrategy tableShardingStrategy;
+ private TableShardingStrategy tableShardingStrategy;
- public ShardingRule(final DataSourceRule dataSourceRule, final Collection tableRules) {
- this(dataSourceRule, tableRules, Collections.emptyList(),
- new DatabaseShardingStrategy(Collections.emptyList(), new NoneDatabaseShardingAlgorithm()),
- new TableShardingStrategy(Collections.emptyList(), new NoneTableShardingAlgorithm()));
- }
-
- public ShardingRule(final DataSourceRule dataSourceRule, final Collection tableRules, final Collection bindingTableRules) {
- this(dataSourceRule, tableRules, bindingTableRules,
- new DatabaseShardingStrategy(Collections.emptyList(), new NoneDatabaseShardingAlgorithm()),
- new TableShardingStrategy(Collections.emptyList(), new NoneTableShardingAlgorithm()));
- }
-
- public ShardingRule(final DataSourceRule dataSourceRule, final Collection tableRules, final DatabaseShardingStrategy databaseShardingStrategy) {
- this(dataSourceRule, tableRules, Collections.emptyList(),
- databaseShardingStrategy, new TableShardingStrategy(Collections.emptyList(), new NoneTableShardingAlgorithm()));
- }
-
- public ShardingRule(final DataSourceRule dataSourceRule, final Collection tableRules, final TableShardingStrategy tableShardingStrategy) {
- this(dataSourceRule, tableRules, Collections.emptyList(),
- new DatabaseShardingStrategy(Collections.emptyList(), new NoneDatabaseShardingAlgorithm()), tableShardingStrategy);
- }
-
- public ShardingRule(final DataSourceRule dataSourceRule, final Collection tableRules,
+ /**
+ * 全属性构造器.
+ *
+ * 用于Spring非命名空间的配置.
+ *
+ * 未来将改为private权限, 不在对外公开, 不建议使用非Spring命名空间的配置.
+ *
+ * @deprecated
+ */
+ @Deprecated
+ public ShardingRule(
+ final DataSourceRule dataSourceRule, final Collection tableRules, final Collection bindingTableRules,
final DatabaseShardingStrategy databaseShardingStrategy, final TableShardingStrategy tableShardingStrategy) {
- this(dataSourceRule, tableRules, Collections.emptyList(), databaseShardingStrategy, tableShardingStrategy);
- }
-
- public ShardingRule(final DataSourceRule dataSourceRule, final Collection tableRules, final Collection bindingTableRules,
- final DatabaseShardingStrategy databaseShardingStrategy, final TableShardingStrategy tableShardingStrategy) {
+ Preconditions.checkNotNull(dataSourceRule);
+ Preconditions.checkNotNull(tableRules);
this.dataSourceRule = dataSourceRule;
this.tableRules = tableRules;
- this.bindingTableRules = bindingTableRules;
+ this.bindingTableRules = null == bindingTableRules ? Collections.emptyList() : bindingTableRules;
this.databaseShardingStrategy = null == databaseShardingStrategy ? new DatabaseShardingStrategy(
Collections.emptyList(), new NoneDatabaseShardingAlgorithm()) : databaseShardingStrategy;
this.tableShardingStrategy = null == tableShardingStrategy ? new TableShardingStrategy(
diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRule.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRule.java
index 97115b31cf8c2..8076a18e6a676 100644
--- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRule.java
+++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRule.java
@@ -19,13 +19,14 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
+import com.google.common.base.Preconditions;
import lombok.Getter;
+import lombok.RequiredArgsConstructor;
import lombok.ToString;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
@@ -34,7 +35,6 @@
*
* @author zhangliang
*/
-@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@ToString
public final class TableRule {
@@ -45,62 +45,70 @@ public final class TableRule {
private final List actualTables;
- private DatabaseShardingStrategy databaseShardingStrategy;
+ private final DatabaseShardingStrategy databaseShardingStrategy;
- private TableShardingStrategy tableShardingStrategy;
+ private final TableShardingStrategy tableShardingStrategy;
- public TableRule(final String logicTable, final DataSourceRule dataSourceRule,
- final DatabaseShardingStrategy databaseShardingStrategy, final TableShardingStrategy tableShardingStrategy) {
- this(logicTable, true, new ArrayList(dataSourceRule.getDataSourceNames().size()), databaseShardingStrategy, tableShardingStrategy);
- generateDataNodes(dataSourceRule);
- }
-
- public TableRule(final String logicTable, final DataSourceRule dataSourceRule) {
- this(logicTable, dataSourceRule, null, null);
- }
-
- public TableRule(final String logicTable, final DataSourceRule dataSourceRule, final DatabaseShardingStrategy databaseShardingStrategy) {
- this(logicTable, dataSourceRule, databaseShardingStrategy, null);
- }
-
- public TableRule(final String logicTable, final DataSourceRule dataSourceRule, final TableShardingStrategy tableShardingStrategy) {
- this(logicTable, dataSourceRule, null, tableShardingStrategy);
- }
-
- public TableRule(final String logicTable, final List actualTables, final DataSourceRule dataSourceRule,
+ /**
+ * 全属性构造器.
+ *
+ * 用于Spring非命名空间的配置.
+ *
+ * 未来将改为private权限, 不在对外公开, 不建议使用非Spring命名空间的配置.
+ *
+ * @deprecated
+ */
+ @Deprecated
+ public TableRule(final String logicTable, final boolean dynamic, final List actualTables, final DataSourceRule dataSourceRule,
final DatabaseShardingStrategy databaseShardingStrategy, final TableShardingStrategy tableShardingStrategy) {
- this(logicTable, false, new ArrayList(actualTables.size() * dataSourceRule.getDataSourceNames().size()), databaseShardingStrategy, tableShardingStrategy);
- generateDataNodes(actualTables, dataSourceRule);
- }
-
- public TableRule(final String logicTable, final List actualTables, final DataSourceRule dataSourceRule) {
- this(logicTable, actualTables, dataSourceRule, null, null);
- }
-
- public TableRule(final String logicTable, final List actualTables, final DataSourceRule dataSourceRule, final DatabaseShardingStrategy databaseShardingStrategy) {
- this(logicTable, actualTables, dataSourceRule, databaseShardingStrategy, null);
+ Preconditions.checkNotNull(logicTable);
+ this.logicTable = logicTable;
+ this.dynamic = dynamic;
+ this.databaseShardingStrategy = databaseShardingStrategy;
+ this.tableShardingStrategy = tableShardingStrategy;
+ if (dynamic) {
+ Preconditions.checkNotNull(dataSourceRule);
+ this.actualTables = generateDataNodes(dataSourceRule);
+ } else if (null == actualTables || actualTables.isEmpty()) {
+ Preconditions.checkNotNull(dataSourceRule);
+ this.actualTables = generateDataNodes(Collections.singletonList(logicTable), dataSourceRule);
+ } else {
+ this.actualTables = generateDataNodes(actualTables, dataSourceRule);
+ }
}
- public TableRule(final String logicTable, final List actualTables, final DataSourceRule dataSourceRule, final TableShardingStrategy tableShardingStrategy) {
- this(logicTable, actualTables, dataSourceRule, null, tableShardingStrategy);
+ /**
+ * 获取表规则配置对象构建器.
+ *
+ * @param logicTable 逻辑表名称
+ * @return 表规则配置对象构建器
+ */
+ public static TableRuleBuilder builder(final String logicTable) {
+ return new TableRuleBuilder(logicTable);
}
- private void generateDataNodes(final DataSourceRule dataSourceRule) {
- for (String each : dataSourceRule.getDataSourceNames()) {
- actualTables.add(new DynamicDataNode(each));
+ private List generateDataNodes(final DataSourceRule dataSourceRule) {
+ Collection dataSourceNames = dataSourceRule.getDataSourceNames();
+ List result = new ArrayList<>(dataSourceNames.size());
+ for (String each : dataSourceNames) {
+ result.add(new DynamicDataNode(each));
}
+ return result;
}
- private void generateDataNodes(final List actualTables, final DataSourceRule dataSourceRule) {
+ private List generateDataNodes(final List actualTables, final DataSourceRule dataSourceRule) {
+ Collection dataSourceNames = null == dataSourceRule ? Collections.emptyList() : dataSourceRule.getDataSourceNames();
+ List result = new ArrayList<>(actualTables.size() * (dataSourceNames.isEmpty() ? 1 : dataSourceNames.size()));
for (String actualTable : actualTables) {
if (DataNode.isValidDataNode(actualTable)) {
- this.actualTables.add(new DataNode(actualTable));
+ result.add(new DataNode(actualTable));
} else {
- for (String dataSourceName : dataSourceRule.getDataSourceNames()) {
- this.actualTables.add(new DataNode(dataSourceName, actualTable));
+ for (String dataSourceName : dataSourceNames) {
+ result.add(new DataNode(dataSourceName, actualTable));
}
}
}
+ return result;
}
/**
@@ -174,4 +182,87 @@ int findActualTableIndex(final String dataSourceName, final String actualTableNa
}
return -1;
}
+
+ /**
+ * 表规则配置对象构建器.
+ */
+ @RequiredArgsConstructor
+ public static class TableRuleBuilder {
+
+ private final String logicTable;
+
+ private boolean dynamic;
+
+ private List actualTables;
+
+ private DataSourceRule dataSourceRule;
+
+ private DatabaseShardingStrategy databaseShardingStrategy;
+
+ private TableShardingStrategy tableShardingStrategy;
+
+ /**
+ * 构建是否为动态表.
+ *
+ * @param dynamic 是否为动态表
+ * @return 真实表集合
+ */
+ public TableRuleBuilder dynamic(final boolean dynamic) {
+ this.dynamic = dynamic;
+ return this;
+ }
+
+ /**
+ * 构建真实表集合.
+ *
+ * @param actualTables 真实表集合
+ * @return 真实表集合
+ */
+ public TableRuleBuilder actualTables(final List actualTables) {
+ this.actualTables = actualTables;
+ return this;
+ }
+
+ /**
+ * 构建数据源分片规则.
+ *
+ * @param dataSourceRule 数据源分片规则
+ * @return 规则配置对象构建器
+ */
+ public TableRuleBuilder dataSourceRule(final DataSourceRule dataSourceRule) {
+ this.dataSourceRule = dataSourceRule;
+ return this;
+ }
+
+ /**
+ * 构建数据库分片策略.
+ *
+ * @param databaseShardingStrategy 数据库分片策略
+ * @return 规则配置对象构建器
+ */
+ public TableRuleBuilder databaseShardingStrategy(final DatabaseShardingStrategy databaseShardingStrategy) {
+ this.databaseShardingStrategy = databaseShardingStrategy;
+ return this;
+ }
+
+ /**
+ * 构建表分片策略.
+ *
+ * @param tableShardingStrategy 表分片策略
+ * @return 规则配置对象构建器
+ */
+ public TableRuleBuilder tableShardingStrategy(final TableShardingStrategy tableShardingStrategy) {
+ this.tableShardingStrategy = tableShardingStrategy;
+ return this;
+ }
+
+ /**
+ * 构建表规则配置对象.
+ *
+ * @return 表规则配置对象
+ */
+ public TableRule build() {
+ return new TableRule(logicTable, dynamic, actualTables, dataSourceRule, databaseShardingStrategy, tableShardingStrategy);
+ }
+ }
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/db/AbstractShardingDataBasesOnlyDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/db/AbstractShardingDataBasesOnlyDBUnitTest.java
index 9811d149c3b10..b5f0197351f55 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/db/AbstractShardingDataBasesOnlyDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/db/AbstractShardingDataBasesOnlyDBUnitTest.java
@@ -19,7 +19,6 @@
import com.dangdang.ddframe.rdb.integrate.AbstractDBUnitTest;
import com.dangdang.ddframe.rdb.integrate.fixture.MultipleKeysModuloDatabaseShardingAlgorithm;
-import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
@@ -27,6 +26,7 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.NoneTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
+import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import java.util.Arrays;
import java.util.Collections;
@@ -68,12 +68,12 @@ protected List getDataSetFiles() {
protected final ShardingDataSource getShardingDataSource() {
DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap(dataSourceName));
- TableRule orderTableRule = new TableRule("t_order", Collections.singletonList("t_order"), dataSourceRule);
- TableRule orderItemTableRule = new TableRule("t_order_item", Collections.singletonList("t_order_item"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm()));
+ TableRule orderTableRule = TableRule.builder("t_order").dataSourceRule(dataSourceRule).build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item").dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm())).build();
return new ShardingDataSource(shardingRule);
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/DynamicShardingBothHelper.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/DynamicShardingBothHelper.java
index 15234cef55332..56a93277b0e54 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/DynamicShardingBothHelper.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/DynamicShardingBothHelper.java
@@ -19,13 +19,13 @@
import com.dangdang.ddframe.rdb.integrate.fixture.SingleKeyDynamicModuloTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.integrate.fixture.SingleKeyModuloDatabaseShardingAlgorithm;
-import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule;
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
+import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@@ -39,12 +39,12 @@ public final class DynamicShardingBothHelper {
public static ShardingDataSource getShardingDataSource(final Map dataSourceMap) {
DataSourceRule dataSourceRule = new DataSourceRule(dataSourceMap);
- TableRule orderTableRule = new TableRule("t_order", dataSourceRule);
- TableRule orderItemTableRule = new TableRule("t_order_item", dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy("user_id", new SingleKeyModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new SingleKeyDynamicModuloTableShardingAlgorithm("t_order_")));
+ TableRule orderTableRule = TableRule.builder("t_order").dynamic(true).dataSourceRule(dataSourceRule).build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item").dynamic(true).dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new SingleKeyModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new SingleKeyDynamicModuloTableShardingAlgorithm("t_order_"))).build();
return new ShardingDataSource(shardingRule);
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/StaticShardingBothHelper.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/StaticShardingBothHelper.java
index 1ee766db7707b..bfafe7f1eec6d 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/StaticShardingBothHelper.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/StaticShardingBothHelper.java
@@ -19,13 +19,13 @@
import com.dangdang.ddframe.rdb.integrate.fixture.SingleKeyModuloDatabaseShardingAlgorithm;
import com.dangdang.ddframe.rdb.integrate.fixture.SingleKeyModuloTableShardingAlgorithm;
-import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule;
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
+import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@@ -39,32 +39,32 @@ public final class StaticShardingBothHelper {
public static ShardingDataSource getShardingDataSource(final Map dataSourceMap) {
DataSourceRule dataSourceRule = new DataSourceRule(dataSourceMap);
- TableRule orderTableRule = new TableRule("t_order", Arrays.asList(
- "t_order_0",
- "t_order_1",
- "t_order_2",
- "t_order_3",
- "t_order_4",
- "t_order_5",
- "t_order_6",
- "t_order_7",
- "t_order_8",
- "t_order_9"), dataSourceRule);
- TableRule orderItemTableRule = new TableRule("t_order_item", Arrays.asList(
- "t_order_item_0",
- "t_order_item_1",
- "t_order_item_2",
- "t_order_item_3",
- "t_order_item_4",
- "t_order_item_5",
- "t_order_item_6",
- "t_order_item_7",
- "t_order_item_8",
- "t_order_item_9"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy("user_id", new SingleKeyModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new SingleKeyModuloTableShardingAlgorithm()));
+ TableRule orderTableRule = TableRule.builder("t_order").actualTables(Arrays.asList(
+ "t_order_0",
+ "t_order_1",
+ "t_order_2",
+ "t_order_3",
+ "t_order_4",
+ "t_order_5",
+ "t_order_6",
+ "t_order_7",
+ "t_order_8",
+ "t_order_9")).dataSourceRule(dataSourceRule).build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item").actualTables(Arrays.asList(
+ "t_order_item_0",
+ "t_order_item_1",
+ "t_order_item_2",
+ "t_order_item_3",
+ "t_order_item_4",
+ "t_order_item_5",
+ "t_order_item_6",
+ "t_order_item_7",
+ "t_order_item_8",
+ "t_order_item_9")).dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new SingleKeyModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new SingleKeyModuloTableShardingAlgorithm())).build();
return new ShardingDataSource(shardingRule);
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/hint/AbstractShardingDataBasesOnlyHintDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/hint/AbstractShardingDataBasesOnlyHintDBUnitTest.java
index 7796086e08e80..c03206c4b3570 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/hint/AbstractShardingDataBasesOnlyHintDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/hint/AbstractShardingDataBasesOnlyHintDBUnitTest.java
@@ -20,7 +20,6 @@
import com.dangdang.ddframe.rdb.integrate.AbstractDBUnitTest;
import com.dangdang.ddframe.rdb.integrate.fixture.MultipleKeysModuloDatabaseShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.HintManager;
-import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
@@ -28,7 +27,9 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.NoneTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
+import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition;
+import com.google.common.collect.Lists;
import org.dbunit.DatabaseUnitException;
import java.sql.Connection;
@@ -73,12 +74,12 @@ protected List getDataSetFiles() {
protected final ShardingDataSource getShardingDataSource() {
DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap(dataSourceName));
- TableRule orderTableRule = new TableRule("t_order", Collections.singletonList("t_order"), dataSourceRule);
- TableRule orderItemTableRule = new TableRule("t_order_item", Collections.singletonList("t_order_item"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm()));
+ TableRule orderTableRule = TableRule.builder("t_order").dataSourceRule(dataSourceRule).build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item").dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Lists.newArrayList(orderTableRule, orderItemTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm())).build();
return new ShardingDataSource(shardingRule);
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/nullable/AbstractShardingNullableDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/nullable/AbstractShardingNullableDBUnitTest.java
index c5d397df52b66..b75c3ad2259c8 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/nullable/AbstractShardingNullableDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/nullable/AbstractShardingNullableDBUnitTest.java
@@ -19,7 +19,6 @@
import com.dangdang.ddframe.rdb.integrate.AbstractDBUnitTest;
import com.dangdang.ddframe.rdb.integrate.fixture.MultipleKeysModuloDatabaseShardingAlgorithm;
-import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
@@ -27,6 +26,7 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.NoneTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
+import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import java.util.Arrays;
import java.util.Collections;
@@ -68,11 +68,12 @@ protected List getDataSetFiles() {
protected final ShardingDataSource getShardingDataSource() {
DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap(dataSourceName));
- TableRule orderTableRule = new TableRule("t_order", Collections.singletonList("t_order"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Collections.singletonList(orderTableRule),
- Collections.singletonList(new BindingTableRule(Collections.singletonList(orderTableRule))),
- new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm()));
+
+ TableRule orderTableRule = TableRule.builder("t_order").dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Arrays.asList(orderTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm())).build();
return new ShardingDataSource(shardingRule);
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/tbl/AbstractShardingTablesOnlyDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/tbl/AbstractShardingTablesOnlyDBUnitTest.java
index b74a06e4358aa..832a1d2a15a99 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/tbl/AbstractShardingTablesOnlyDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/tbl/AbstractShardingTablesOnlyDBUnitTest.java
@@ -19,7 +19,6 @@
import com.dangdang.ddframe.rdb.integrate.AbstractDBUnitTest;
import com.dangdang.ddframe.rdb.integrate.fixture.SingleKeyModuloTableShardingAlgorithm;
-import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
@@ -27,6 +26,7 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.NoneDatabaseShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
+import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import java.util.Arrays;
import java.util.Collections;
@@ -48,32 +48,34 @@ protected List getDataSetFiles() {
protected final ShardingDataSource getShardingDataSource() {
DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap(dataSourceName));
- TableRule orderTableRule = new TableRule("t_order", Arrays.asList(
- "t_order_0",
- "t_order_1",
- "t_order_2",
- "t_order_3",
- "t_order_4",
- "t_order_5",
- "t_order_6",
- "t_order_7",
- "t_order_8",
- "t_order_9"), dataSourceRule);
- TableRule orderItemTableRule = new TableRule("t_order_item", Arrays.asList(
- "t_order_item_0",
- "t_order_item_1",
- "t_order_item_2",
- "t_order_item_3",
- "t_order_item_4",
- "t_order_item_5",
- "t_order_item_6",
- "t_order_item_7",
- "t_order_item_8",
- "t_order_item_9"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy("user_id", new NoneDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new SingleKeyModuloTableShardingAlgorithm()));
+ TableRule orderTableRule = TableRule.builder("t_order").actualTables(Arrays.asList(
+ "t_order_0",
+ "t_order_1",
+ "t_order_2",
+ "t_order_3",
+ "t_order_4",
+ "t_order_5",
+ "t_order_6",
+ "t_order_7",
+ "t_order_8",
+ "t_order_9")).dataSourceRule(dataSourceRule).build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item").actualTables(Arrays.asList(
+ "t_order_item_0",
+ "t_order_item_1",
+ "t_order_item_2",
+ "t_order_item_3",
+ "t_order_item_4",
+ "t_order_item_5",
+ "t_order_item_6",
+ "t_order_item_7",
+ "t_order_item_8",
+ "t_order_item_9")).dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder()
+ .dataSourceRule(dataSourceRule)
+ .tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new NoneDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new SingleKeyModuloTableShardingAlgorithm())).build();
return new ShardingDataSource(shardingRule);
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSourceFactoryTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSourceFactoryTest.java
index 9032a7dd6f017..bc5ba525f499e 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSourceFactoryTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/ShardingDataSourceFactoryTest.java
@@ -66,7 +66,8 @@ private ShardingRule createShardingRule() throws SQLException {
Map dataSourceMap = new HashMap<>(1);
dataSourceMap.put("ds", dataSource);
DataSourceRule dataSourceRule = new DataSourceRule(dataSourceMap);
- return new ShardingRule(dataSourceRule, Collections.singletonList(new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), dataSourceRule)));
+ TableRule tableRule = TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(dataSourceRule).build();
+ return ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Collections.singletonList(tableRule)).build();
}
private ShardingRule getShardingRule(final DataSource dataSource) throws NoSuchFieldException, IllegalAccessException {
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/BindingTableRuleTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/BindingTableRuleTest.java
index 2160409a51256..137900209445b 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/BindingTableRuleTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/BindingTableRuleTest.java
@@ -76,11 +76,12 @@ private BindingTableRule createBindingTableRule() {
}
private TableRule createTableRule() {
- return new TableRule("logicTable", Arrays.asList("ds1.table_0", "ds1.table_1", "ds2.table_0", "ds2.table_1"), createDataSourceRule());
+ return TableRule.builder("logicTable").actualTables(Arrays.asList("ds1.table_0", "ds1.table_1", "ds2.table_0", "ds2.table_1")).dataSourceRule(createDataSourceRule()).build();
}
private TableRule createSubTableRule() {
- return new TableRule("subLogicTable", Arrays.asList("ds1.sub_table_0", "ds1.sub_table_1", "ds2.sub_table_0", "ds2.sub_table_1"), createDataSourceRule());
+ return TableRule.builder("subLogicTable").actualTables(Arrays.asList("ds1.sub_table_0", "ds1.sub_table_1", "ds2.sub_table_0", "ds2.sub_table_1"))
+ .dataSourceRule(createDataSourceRule()).build();
}
private DataSourceRule createDataSourceRule() {
@@ -95,10 +96,10 @@ private BindingTableRule createDynamicBindingTableRule() {
}
private TableRule createDynamicTableRule() {
- return new TableRule("logicTable", createDataSourceRule());
+ return TableRule.builder("logicTable").dynamic(true).dataSourceRule(createDataSourceRule()).build();
}
private TableRule createDynamicSubTableRule() {
- return new TableRule("subLogicTable", createDataSourceRule());
+ return TableRule.builder("subLogicTable").dynamic(true).dataSourceRule(createDataSourceRule()).build();
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRuleTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRuleTest.java
index e403b8c241234..165e24b7c52ab 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRuleTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/ShardingRuleTest.java
@@ -41,7 +41,7 @@ public final class ShardingRuleTest {
@Test
public void assertShardingRuleWithoutStrategy() {
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRule()));
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule()).tableRules(Collections.singletonList(createTableRule())).build();
assertTrue(actual.getDatabaseShardingStrategy().getShardingColumns().isEmpty());
assertTrue(actual.getTableShardingStrategy().getShardingColumns().isEmpty());
}
@@ -55,28 +55,36 @@ public void assertShardingRuleWithBindingTableRuleWithoutStrategy() {
@Test
public void assertShardingRuleWithDatabaseStrategy() {
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRule()), createDatabaseShardingStrategy());
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule())
+ .tableRules(Collections.singletonList(createTableRule())).databaseShardingStrategy(createDatabaseShardingStrategy()).build();
assertThat(actual.getDatabaseShardingStrategy().getShardingColumns().size(), is(1));
assertTrue(actual.getTableShardingStrategy().getShardingColumns().isEmpty());
}
@Test
public void assertShardingRuleWithTableStrategy() {
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRule()), createTableShardingStrategy());
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule())
+ .tableRules(Collections.singletonList(createTableRule())).tableShardingStrategy(createTableShardingStrategy()).build();
assertThat(actual.getTableShardingStrategy().getShardingColumns().size(), is(1));
assertTrue(actual.getDatabaseShardingStrategy().getShardingColumns().isEmpty());
}
@Test
public void assertShardingRuleWithoutBindingTableRule() {
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRule()), createDatabaseShardingStrategy(), createTableShardingStrategy());
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule())
+ .tableRules(Collections.singletonList(createTableRule()))
+ .databaseShardingStrategy(createDatabaseShardingStrategy())
+ .tableShardingStrategy(createTableShardingStrategy()).build();
assertThat(actual.getDatabaseShardingStrategy().getShardingColumns().size(), is(1));
assertThat(actual.getTableShardingStrategy().getShardingColumns().size(), is(1));
}
@Test
public void assertFindTableRule() {
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRule()), createDatabaseShardingStrategy(), createTableShardingStrategy());
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule())
+ .tableRules(Collections.singletonList(createTableRule()))
+ .databaseShardingStrategy(createDatabaseShardingStrategy())
+ .tableShardingStrategy(createTableShardingStrategy()).build();
assertTrue(actual.findTableRule("logicTable").isPresent());
assertFalse(actual.findTableRule("null").isPresent());
}
@@ -85,7 +93,7 @@ public void assertFindTableRule() {
public void assertGetDatabaseShardingStrategyFromTableRule() {
DatabaseShardingStrategy strategy = createDatabaseShardingStrategy();
TableRule tableRule = createTableRule(strategy);
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(tableRule));
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule()).tableRules(Collections.singletonList(createTableRule())).build();
assertThat(actual.getDatabaseShardingStrategy(tableRule), is(strategy));
}
@@ -93,15 +101,16 @@ public void assertGetDatabaseShardingStrategyFromTableRule() {
public void assertGetDatabaseShardingStrategyFromDefault() {
DatabaseShardingStrategy strategy = createDatabaseShardingStrategy();
TableRule tableRule = createTableRule();
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(tableRule), strategy);
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule())
+ .tableRules(Collections.singletonList(createTableRule())).databaseShardingStrategy(strategy).build();
assertThat(actual.getDatabaseShardingStrategy(tableRule), is(strategy));
}
@Test
public void assertGetDatabaseShardingStrategyForNullValue() {
- DatabaseShardingStrategy strategy = null;
TableRule tableRule = createTableRule();
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(tableRule), strategy);
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule())
+ .tableRules(Collections.singletonList(tableRule)).databaseShardingStrategy(null).build();
assertNotNull(actual.getDatabaseShardingStrategy(tableRule));
}
@@ -109,7 +118,7 @@ public void assertGetDatabaseShardingStrategyForNullValue() {
public void assertGetTableShardingStrategyFromTableRule() {
TableShardingStrategy strategy = createTableShardingStrategy();
TableRule tableRule = createTableRule(strategy);
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(tableRule));
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule()).tableRules(Collections.singletonList(tableRule)).build();
assertThat(actual.getTableShardingStrategy(tableRule), is(strategy));
}
@@ -117,21 +126,20 @@ public void assertGetTableShardingStrategyFromTableRule() {
public void assertGetTableShardingStrategyFromDefault() {
TableShardingStrategy strategy = createTableShardingStrategy();
TableRule tableRule = createTableRule();
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(tableRule), strategy);
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule()).tableRules(Collections.singletonList(tableRule)).tableShardingStrategy(strategy).build();
assertThat(actual.getTableShardingStrategy(tableRule), is(strategy));
}
@Test
public void assertGetTableShardingStrategyForNullValue() {
- TableShardingStrategy strategy = null;
TableRule tableRule = createTableRule();
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(tableRule), strategy);
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule()).tableRules(Collections.singletonList(tableRule)).tableShardingStrategy(null).build();
assertNotNull(actual.getTableShardingStrategy(tableRule));
}
@Test
public void assertGetBindingTableRuleForNotConfig() {
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRule()));
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule()).tableRules(Collections.singletonList(createTableRule())).build();
assertFalse(actual.findBindingTableRule("logicTable").isPresent());
}
@@ -143,7 +151,8 @@ public void assertGetBindingTableRuleForNotFound() {
@Test
public void assertGetBindingTableRuleForFound() {
BindingTableRule bindingTableRule = createBindingTableRule();
- ShardingRule actual = new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRule()), Collections.singletonList(bindingTableRule));
+ ShardingRule actual = ShardingRule.builder().dataSourceRule(createDataSourceRule()).tableRules(Collections.singletonList(createTableRule()))
+ .bindingTableRules(Collections.singletonList(bindingTableRule)).build();
assertThat(actual.findBindingTableRule("logicTable").get(), is(bindingTableRule));
}
@@ -194,7 +203,8 @@ public void assertGetAllShardingColumnsWithStrategy() {
}
private ShardingRule createShardingRule() {
- return new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRule()), Collections.singletonList(createBindingTableRule()));
+ return ShardingRule.builder().dataSourceRule(createDataSourceRule())
+ .tableRules(Collections.singletonList(createTableRule())).bindingTableRules(Collections.singletonList(createBindingTableRule())).build();
}
private DataSourceRule createDataSourceRule() {
@@ -205,15 +215,15 @@ private DataSourceRule createDataSourceRule() {
}
private TableRule createTableRule() {
- return new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), createDataSourceRule());
+ return TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(createDataSourceRule()).build();
}
private TableRule createTableRule(final DatabaseShardingStrategy strategy) {
- return new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), createDataSourceRule(), strategy);
+ return TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(createDataSourceRule()).databaseShardingStrategy(strategy).build();
}
private TableRule createTableRule(final TableShardingStrategy strategy) {
- return new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), createDataSourceRule(), strategy);
+ return TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(createDataSourceRule()).tableShardingStrategy(strategy).build();
}
private BindingTableRule createBindingTableRule() {
@@ -221,7 +231,7 @@ private BindingTableRule createBindingTableRule() {
}
private TableRule createSubTableRule() {
- return new TableRule("subLogicTable", Arrays.asList("sub_table_0", "sub_table_1", "sub_table_2"), createDataSourceRule());
+ return TableRule.builder("subLogicTable").actualTables(Arrays.asList("sub_table_0", "sub_table_1", "sub_table_2")).dataSourceRule(createDataSourceRule()).build();
}
private DatabaseShardingStrategy createDatabaseShardingStrategy() {
@@ -233,10 +243,12 @@ private TableShardingStrategy createTableShardingStrategy() {
}
private ShardingRule createShardingRuleWithStrategy() {
- return new ShardingRule(createDataSourceRule(), Collections.singletonList(createTableRuleWithAllStrategies()), Collections.singletonList(createBindingTableRule()));
+ return ShardingRule.builder().dataSourceRule(createDataSourceRule())
+ .tableRules(Collections.singletonList(createTableRuleWithAllStrategies())).bindingTableRules(Collections.singletonList(createBindingTableRule())).build();
}
private TableRule createTableRuleWithAllStrategies() {
- return new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), createDataSourceRule(), createDatabaseShardingStrategy(), createTableShardingStrategy());
+ return TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(createDataSourceRule())
+ .databaseShardingStrategy(createDatabaseShardingStrategy()).tableShardingStrategy(createTableShardingStrategy()).build();
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRuleTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRuleTest.java
index b8daf32b25638..9ff8532449e0c 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRuleTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/api/rule/TableRuleTest.java
@@ -41,7 +41,7 @@ public final class TableRuleTest {
@Test
public void assertTableRuleForDynamicWithoutAnyStrategies() {
- TableRule actual = new TableRule("logicTable", createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable").dynamic(true).dataSourceRule(createDataSourceRule()).build();
assertDynamicTable(actual);
assertNull(actual.getDatabaseShardingStrategy());
assertNull(actual.getTableShardingStrategy());
@@ -49,7 +49,8 @@ public void assertTableRuleForDynamicWithoutAnyStrategies() {
@Test
public void assertTableRuleForDynamicWithDatabaseStrategy() {
- TableRule actual = new TableRule("logicTable", createDataSourceRule(), new DatabaseShardingStrategy("", new NoneDatabaseShardingAlgorithm()));
+ TableRule actual = TableRule.builder("logicTable").dynamic(true).dataSourceRule(createDataSourceRule())
+ .databaseShardingStrategy(new DatabaseShardingStrategy("", new NoneDatabaseShardingAlgorithm())).build();
assertDynamicTable(actual);
assertNotNull(actual.getDatabaseShardingStrategy());
assertNull(actual.getTableShardingStrategy());
@@ -57,7 +58,8 @@ public void assertTableRuleForDynamicWithDatabaseStrategy() {
@Test
public void assertTableRuleForDynamicWithTableStrategy() {
- TableRule actual = new TableRule("logicTable", createDataSourceRule(), new TableShardingStrategy("", new NoneTableShardingAlgorithm()));
+ TableRule actual = TableRule.builder("logicTable").dynamic(true).dataSourceRule(createDataSourceRule())
+ .tableShardingStrategy(new TableShardingStrategy("", new NoneTableShardingAlgorithm())).build();
assertDynamicTable(actual);
assertNull(actual.getDatabaseShardingStrategy());
assertNotNull(actual.getTableShardingStrategy());
@@ -65,8 +67,9 @@ public void assertTableRuleForDynamicWithTableStrategy() {
@Test
public void assertTableRuleForDynamicWithAllStrategies() {
- TableRule actual = new TableRule("logicTable", createDataSourceRule(),
- new DatabaseShardingStrategy("", new NoneDatabaseShardingAlgorithm()), new TableShardingStrategy("", new NoneTableShardingAlgorithm()));
+ TableRule actual = TableRule.builder("logicTable").dynamic(true).dataSourceRule(createDataSourceRule())
+ .databaseShardingStrategy(new DatabaseShardingStrategy("", new NoneDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("", new NoneTableShardingAlgorithm())).build();
assertDynamicTable(actual);
assertNotNull(actual.getDatabaseShardingStrategy());
assertNotNull(actual.getTableShardingStrategy());
@@ -80,7 +83,7 @@ private void assertDynamicTable(final TableRule actual) {
@Test
public void assertTableRuleWithoutDataNode() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(createDataSourceRule()).build();
assertActualTable(actual);
assertNull(actual.getDatabaseShardingStrategy());
assertNull(actual.getTableShardingStrategy());
@@ -88,7 +91,8 @@ public void assertTableRuleWithoutDataNode() {
@Test
public void assertTableRuleWithDatabaseShardingStrategyWithoutDataNode() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), createDataSourceRule(), new DatabaseShardingStrategy("", new NoneDatabaseShardingAlgorithm()));
+ TableRule actual = TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(createDataSourceRule())
+ .databaseShardingStrategy(new DatabaseShardingStrategy("", new NoneDatabaseShardingAlgorithm())).build();
assertActualTable(actual);
assertNotNull(actual.getDatabaseShardingStrategy());
assertNull(actual.getTableShardingStrategy());
@@ -96,7 +100,8 @@ public void assertTableRuleWithDatabaseShardingStrategyWithoutDataNode() {
@Test
public void assertTableRuleWithTableShardingStrategyWithoutDataNode() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), createDataSourceRule(), new TableShardingStrategy("", new NoneTableShardingAlgorithm()));
+ TableRule actual = TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(createDataSourceRule())
+ .tableShardingStrategy(new TableShardingStrategy("", new NoneTableShardingAlgorithm())).build();
assertActualTable(actual);
assertNull(actual.getDatabaseShardingStrategy());
assertNotNull(actual.getTableShardingStrategy());
@@ -104,7 +109,8 @@ public void assertTableRuleWithTableShardingStrategyWithoutDataNode() {
@Test
public void assertTableRuleWithDataNodeString() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2"), createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable")
+ .actualTables(Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2")).build();
assertActualTable(actual);
assertNull(actual.getDatabaseShardingStrategy());
assertNull(actual.getTableShardingStrategy());
@@ -122,45 +128,51 @@ private void assertActualTable(final TableRule actual) {
@Test
public void assertGetActualDataNodesForStatic() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2"), createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable")
+ .actualTables(Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2")).build();
assertThat(actual.getActualDataNodes(Collections.singletonList("ds1"), Arrays.asList("table_0", "table_1")), is(
(Collection) Sets.newLinkedHashSet(Arrays.asList(new DataNode("ds1", "table_0"), new DataNode("ds1", "table_1")))));
}
@Test
public void assertGetActualDataNodesForDynamic() {
- TableRule actual = new TableRule("logicTable", createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable").dynamic(true).dataSourceRule(createDataSourceRule()).build();
assertThat(actual.getActualDataNodes(Collections.singletonList("ds1"), Arrays.asList("table_0", "table_1")), is(
(Collection) Sets.newLinkedHashSet(Arrays.asList(new DataNode("ds1", "table_0"), new DataNode("ds1", "table_1")))));
}
@Test
public void assertGetActualDatasourceNames() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2"), createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable")
+ .actualTables(Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2")).build();
assertThat(actual.getActualDatasourceNames(), is((Collection) Sets.newLinkedHashSet(Arrays.asList("ds0", "ds1"))));
}
@Test
public void assertGetActualTableNames() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2"), createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable")
+ .actualTables(Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2")).build();
assertThat(actual.getActualTableNames(Collections.singletonList("ds1")), is((Collection) Sets.newLinkedHashSet(Arrays.asList("table_0", "table_1", "table_2"))));
}
@Test
public void assertFindActualTableIndex() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2"), createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable")
+ .actualTables(Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2")).build();
assertThat(actual.findActualTableIndex("ds1", "table_1"), is(4));
}
@Test
public void assertFindActualTableIndexForNotFound() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2"), createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable")
+ .actualTables(Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2")).build();
assertThat(actual.findActualTableIndex("ds2", "table_2"), is(-1));
}
@Test
public void assertToString() {
- TableRule actual = new TableRule("logicTable", Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2"), createDataSourceRule());
+ TableRule actual = TableRule.builder("logicTable")
+ .actualTables(Arrays.asList("ds0.table_0", "ds0.table_1", "ds0.table_2", "ds1.table_0", "ds1.table_1", "ds1.table_2")).build();
assertThat(actual.toString(), is("TableRule(logicTable=logicTable, dynamic=false, actualTables=["
+ "DataNode(dataSourceName=ds0, tableName=table_0), "
+ "DataNode(dataSourceName=ds0, tableName=table_1), "
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingDataSourceTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingDataSourceTest.java
index 0018093655ef2..af711228c7f47 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingDataSourceTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingDataSourceTest.java
@@ -66,6 +66,8 @@ private ShardingDataSource createShardingDataSource(final DataSource dataSource)
Map dataSourceMap = new HashMap<>(1);
dataSourceMap.put("ds", dataSource);
DataSourceRule dataSourceRule = new DataSourceRule(dataSourceMap);
- return new ShardingDataSource(new ShardingRule(dataSourceRule, Collections.singletonList(new TableRule("logicTable", Arrays.asList("table_0", "table_1", "table_2"), dataSourceRule))));
+ TableRule tableRule = TableRule.builder("logicTable").actualTables(Arrays.asList("table_0", "table_1", "table_2")).dataSourceRule(dataSourceRule).build();
+ return new ShardingDataSource(ShardingRule.builder()
+ .dataSourceRule(dataSourceRule).tableRules(Collections.singletonList(tableRule)).build());
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/AbstractBaseParseTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/AbstractBaseParseTest.java
index 76e1eff6e9838..2dcba615e699b 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/AbstractBaseParseTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/parser/AbstractBaseParseTest.java
@@ -158,8 +158,8 @@ public Comparable> apply(final Value input) {
@Override
public OrderByColumn apply(final com.dangdang.ddframe.rdb.sharding.parser.jaxb.OrderByColumn input) {
- return Strings.isNullOrEmpty(input.getName()) ? new OrderByColumn(input.getIndex(), OrderByType.valueOf(input.getOrderByType().toUpperCase())) :
- new OrderByColumn(Optional.fromNullable(input.getOwner()), input.getName(),
+ return Strings.isNullOrEmpty(input.getName()) ? new OrderByColumn(input.getIndex(), OrderByType.valueOf(input.getOrderByType().toUpperCase()))
+ : new OrderByColumn(Optional.fromNullable(input.getOwner()), input.getName(),
Optional.fromNullable(input.getAlias()), OrderByType.valueOf(input.getOrderByType().toUpperCase()));
}
}));
@@ -169,7 +169,8 @@ public OrderByColumn apply(final com.dangdang.ddframe.rdb.sharding.parser.jaxb.O
@Override
public GroupByColumn apply(final com.dangdang.ddframe.rdb.sharding.parser.jaxb.GroupByColumn input) {
- return new GroupByColumn(Optional.fromNullable(input.getOwner()), input.getName(), Optional.fromNullable(input.getAlias()), OrderByType.valueOf(input.getOrderByType().toUpperCase()));
+ return new GroupByColumn(
+ Optional.fromNullable(input.getOwner()), input.getName(), Optional.fromNullable(input.getAlias()), OrderByType.valueOf(input.getOrderByType().toUpperCase()));
}
}));
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/router/AbstractBaseRouteSqlTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/router/AbstractBaseRouteSqlTest.java
index 3db999c9bee10..3fec25b206376 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/router/AbstractBaseRouteSqlTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/router/AbstractBaseRouteSqlTest.java
@@ -17,23 +17,13 @@
package com.dangdang.ddframe.rdb.sharding.router;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import javax.sql.DataSource;
-
-import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.TableRule;
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.DatabaseShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
+import com.dangdang.ddframe.rdb.sharding.constants.DatabaseType;
import com.dangdang.ddframe.rdb.sharding.exception.SQLParserException;
import com.dangdang.ddframe.rdb.sharding.router.fixture.OrderAttrShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.router.fixture.OrderShardingAlgorithm;
@@ -44,6 +34,16 @@
import lombok.Getter;
import org.junit.Before;
+import javax.sql.DataSource;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
import static org.hamcrest.CoreMatchers.hasItems;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@@ -59,13 +59,14 @@ public void setRouteRuleContext() {
dataSourceMap.put("ds_0", null);
dataSourceMap.put("ds_1", null);
DataSourceRule dataSourceRule = new DataSourceRule(dataSourceMap);
- TableRule orderTableRule = new TableRule("order", Lists.newArrayList("order_0", "order_1"), dataSourceRule);
- TableRule orderItemTableRule = new TableRule("order_item", Lists.newArrayList("order_item_0", "order_item_1"), dataSourceRule);
- TableRule orderAttrTableRule = new TableRule("order_attr", Lists.newArrayList("ds_0.order_attr_a", "ds_1.order_attr_b"), dataSourceRule,
- new TableShardingStrategy("order_id", new OrderAttrShardingAlgorithm()));
- shardingRule = new ShardingRule(dataSourceRule, Lists.newArrayList(orderTableRule, orderItemTableRule, orderAttrTableRule),
- Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy("order_id", new OrderShardingAlgorithm()), new TableShardingStrategy("order_id", new OrderShardingAlgorithm()));
+ TableRule orderTableRule = TableRule.builder("order").actualTables(Lists.newArrayList("order_0", "order_1")).dataSourceRule(dataSourceRule).build();
+ TableRule orderItemTableRule = TableRule.builder("order_item").actualTables(Lists.newArrayList("order_item_0", "order_item_1")).dataSourceRule(dataSourceRule).build();
+ TableRule orderAttrTableRule = TableRule.builder("order_attr").actualTables(Lists.newArrayList("ds_0.order_attr_a", "ds_1.order_attr_b")).dataSourceRule(dataSourceRule)
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new OrderAttrShardingAlgorithm())).build();
+ shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Lists.newArrayList(orderTableRule, orderItemTableRule, orderAttrTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("order_id", new OrderShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new OrderShardingAlgorithm())).build();
}
protected void assertSingleTarget(final String originSql, final String targetDataSource, final String targetSQL) throws SQLParserException {
diff --git a/sharding-jdbc-doc/content/post/configuration.md b/sharding-jdbc-doc/content/post/configuration.md
index 0663d19b883af..fe7fd8c4e7709 100644
--- a/sharding-jdbc-doc/content/post/configuration.md
+++ b/sharding-jdbc-doc/content/post/configuration.md
@@ -81,7 +81,8 @@ dataSource: 数据源配置
tables: 分库分表配置,可配置多个logic_table_name
: 逻辑表名
- actualTables: 真实表名,多个表以逗号分隔,支持inline表达式,指定数据源需要加前缀,不加前缀为默认数据源。不填写表示动态表配置。
+ dynamic: 是否为动态表
+ actualTables: 真实表名,多个表以逗号分隔,支持inline表达式,指定数据源需要加前缀,不加前缀为默认数据源。不填写表示为只分库不分表或动态表(需要配置dynamic=true)。
databaseStrategy: 分库策略
shardingColumns: 分片列名,多个列以逗号分隔
algorithmClassName: 分库算法全类名,该类需使用默认的构造器或者提供无参数的构造器,与algorithmExpression出现一个即可
@@ -216,7 +217,8 @@ props: 属性配置(可选)
| *名称* | *类型* | *数据类型* | *必填* | *说明* |
| -------------------- | ------------ | ---------- | ------ | ------- |
| logic-table | 属性 | String | 是 | 逻辑表名 |
-| actual-tables | 属性 | String | 否 | 真实表名,多个表以逗号分隔,支持inline表达式,指定数据源需要加前缀,不加前缀为默认数据源 指定数据源需要加前缀,不加前缀为默认数据源。不填写表示使用动态表配置 |
+| dynamic | 属性 | boolean | 否 | 是否动态表 |
+| actual-tables | 属性 | String | 否 | 真实表名,多个表以逗号分隔,支持inline表达式,指定数据源需要加前缀,不加前缀为默认数据源 指定数据源需要加前缀,不加前缀为默认数据源。不填写表示为只分库不分表或动态表(需要配置dynamic=true) |
| database-strategy | 属性 | String | 否 | 分库策略,对应``中分库策略id, 如果不填需配置`` |
| table-strategy | 属性 | String | 否 | 分表策略,对应``中分表策略id, 如果不填需配置`` |
diff --git a/sharding-jdbc-doc/content/post/release_notes.md b/sharding-jdbc-doc/content/post/release_notes.md
index 32a50119a3031..4f5f84b54eecd 100644
--- a/sharding-jdbc-doc/content/post/release_notes.md
+++ b/sharding-jdbc-doc/content/post/release_notes.md
@@ -11,12 +11,15 @@ weight = 1
### 结构调整
1. [ISSUE #60](https://github.com/dangdangdotcom/sharding-jdbc/issues/60) API调整,抽离ShardingDataSource,使用工厂代替
+1. [ISSUE #76](https://github.com/dangdangdotcom/sharding-jdbc/issues/76) ShardingRule和TableRule调整为Builder模式
+1. [ISSUE #77](https://github.com/dangdangdotcom/sharding-jdbc/issues/77) ShardingRule和TableRule调整为Builder模式
### 功能提升
1. [ISSUE #61](https://github.com/dangdangdotcom/sharding-jdbc/issues/61) 在ShardingValue类中加入逻辑表名
1. [ISSUE #66](https://github.com/dangdangdotcom/sharding-jdbc/issues/66) 在JDBC层的Statement增加对get/set MaxFieldSize,MaxRows和QueryTimeout的支持
1. [ISSUE #72](https://github.com/dangdangdotcom/sharding-jdbc/issues/72) 对于select union all形式的批量插入支持
+1. [ISSUE #78](https://github.com/dangdangdotcom/sharding-jdbc/issues/78) 简化只分库配置,无需配置逻辑表和真实表对应关系
### 缺陷修正
diff --git a/sharding-jdbc-doc/content/post/user_guide.md b/sharding-jdbc-doc/content/post/user_guide.md
index 9ffd4c9bb02c2..1970996755fcd 100644
--- a/sharding-jdbc-doc/content/post/user_guide.md
+++ b/sharding-jdbc-doc/content/post/user_guide.md
@@ -80,10 +80,12 @@ select * from db0.t_order_0 where user_id = ? and order_id = ?;
## 规则配置
以上分库分表的形式`Sharding-JDBC`是通过规则配置来进行的描述的,下面讲通过几个小节来描述规则的详细配置:
```java
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Arrays.asList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm()));
+ ShardingRule shardingRule = ShardingRule.builder()
+ .dataSourceRule(dataSourceRule)
+ .tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())))
+ .build();
```
## 数据源配置
首先我们来构造`DataSourceRule`对象,它是来描述数据源的分布规则的。
@@ -119,34 +121,52 @@ Sharding-JDBC认为对于分片策略存有两种维度
### 全局默认策略与特定表策略
策略是作用在特定的表规则上的,数据源策略与表策略与特定表相关
```java
-TableRule orderTableRule = new TableRule("t_order", Arrays.asList("t_order_0", "t_order_1"),
- new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm()),
- dataSourceRule);
+ TableRule orderTableRule = TableRule.builder("t_order")
+ .actualTables(Arrays.asList("t_order_0", "t_order_1")
+ .dataSourceRule(dataSourceRule)
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())))
+ .build();
```
-如果分片规则中的所有表或大部分表的分片策略相同,可以使用默认策略来简化配置。一下两种配置是等价的
+如果分片规则中的所有表或大部分表的分片策略相同,可以使用默认策略来简化配置。以下两种配置是等价的:
```java
//使用了默认策略配置
- TableRule orderTableRule = new TableRule("t_order", Arrays.asList("t_order_0", "t_order_1"), dataSourceRule);
- TableRule orderItemTableRule = new TableRule("t_order_item", Arrays.asList("t_order_item_0", "t_order_item_1"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Arrays.asList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm()));
+ TableRule orderTableRule = TableRule.builder("t_order")
+ .actualTables(Arrays.asList("t_order_0", "t_order_1")
+ .dataSourceRule(dataSourceRule)
+ .build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item")
+ .actualTables(Arrays.asList("t_order_item_0", "t_order_item_1")
+ .dataSourceRule(dataSourceRule)
+ .build();
+ ShardingRule shardingRule = ShardingRule.builder()
+ .dataSourceRule(dataSourceRule)
+ .tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())))
+ .build();
```
```java
//未使用默认策略配置
- TableRule orderTableRule = new TableRule("t_order", Arrays.asList("t_order_0", "t_order_1"), dataSourceRule,
- new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm()));
- TableRule orderItemTableRule = new TableRule("t_order_item", Arrays.asList("t_order_item_0", "t_order_item_1"), dataSourceRule,
- new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm()));
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Arrays.asList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))));
+ TableRule orderTableRule = TableRule.builder("t_order")
+ .actualTables(Arrays.asList("t_order_0", "t_order_1")
+ .dataSourceRule(dataSourceRule)
+ .build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item")
+ .actualTables(Arrays.asList("t_order_item_0", "t_order_item_1")
+ .dataSourceRule(dataSourceRule)
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())))
+ .build();
+ ShardingRule shardingRule = ShardingRule.builder()
+ .dataSourceRule(dataSourceRule)
+ .tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())))
+ .build();
```
### 分片键
diff --git a/sharding-jdbc-example/sharding-jdbc-example-jdbc-transaction/src/main/java/com/dangdang/ddframe/rdb/sharding/example/transaction/Main.java b/sharding-jdbc-example/sharding-jdbc-example-jdbc-transaction/src/main/java/com/dangdang/ddframe/rdb/sharding/example/transaction/Main.java
index 0b1c80c8ff31d..2162555fe0fff 100644
--- a/sharding-jdbc-example/sharding-jdbc-example-jdbc-transaction/src/main/java/com/dangdang/ddframe/rdb/sharding/example/transaction/Main.java
+++ b/sharding-jdbc-example/sharding-jdbc-example-jdbc-transaction/src/main/java/com/dangdang/ddframe/rdb/sharding/example/transaction/Main.java
@@ -82,12 +82,12 @@ private static void updateFailure(final DataSource dataSource) throws SQLExcepti
private static DataSource getShardingDataSource() {
DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap());
- TableRule orderTableRule = new TableRule("t_order", Arrays.asList("t_order_0", "t_order_1"), dataSourceRule);
- TableRule orderItemTableRule = new TableRule("t_order_item", Arrays.asList("t_order_item_0", "t_order_item_1"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm()));
+ TableRule orderTableRule = TableRule.builder("t_order").actualTables(Arrays.asList("t_order_0", "t_order_1")).dataSourceRule(dataSourceRule).build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item").actualTables(Arrays.asList("t_order_item_0", "t_order_item_1")).dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())).build();
return ShardingDataSourceFactory.createDataSource(shardingRule);
}
diff --git a/sharding-jdbc-example/sharding-jdbc-example-jdbc/src/main/java/com/dangdang/ddframe/rdb/sharding/example/jdbc/Main.java b/sharding-jdbc-example/sharding-jdbc-example-jdbc/src/main/java/com/dangdang/ddframe/rdb/sharding/example/jdbc/Main.java
index 08d589531b8d8..b0db354fc7646 100644
--- a/sharding-jdbc-example/sharding-jdbc-example-jdbc/src/main/java/com/dangdang/ddframe/rdb/sharding/example/jdbc/Main.java
+++ b/sharding-jdbc-example/sharding-jdbc-example-jdbc/src/main/java/com/dangdang/ddframe/rdb/sharding/example/jdbc/Main.java
@@ -18,7 +18,6 @@
package com.dangdang.ddframe.rdb.sharding.example.jdbc;
import com.dangdang.ddframe.rdb.sharding.api.HintManager;
-import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import com.dangdang.ddframe.rdb.sharding.api.rule.BindingTableRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.DataSourceRule;
import com.dangdang.ddframe.rdb.sharding.api.rule.ShardingRule;
@@ -27,6 +26,7 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.example.jdbc.algorithm.ModuloDatabaseShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.example.jdbc.algorithm.ModuloTableShardingAlgorithm;
+import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.apache.commons.dbcp.BasicDataSource;
import javax.sql.DataSource;
@@ -102,12 +102,12 @@ private static void printHintSimpleSelect(final DataSource dataSource) throws SQ
private static ShardingDataSource getShardingDataSource() {
DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap());
- TableRule orderTableRule = new TableRule("t_order", Arrays.asList("t_order_0", "t_order_1"), dataSourceRule);
- TableRule orderItemTableRule = new TableRule("t_order_item", Arrays.asList("t_order_item_0", "t_order_item_1"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Arrays.asList(orderTableRule, orderItemTableRule),
- Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))),
- new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()),
- new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm()));
+ TableRule orderTableRule = TableRule.builder("t_order").actualTables(Arrays.asList("t_order_0", "t_order_1")).dataSourceRule(dataSourceRule).build();
+ TableRule orderItemTableRule = TableRule.builder("t_order_item").actualTables(Arrays.asList("t_order_item_0", "t_order_item_1")).dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
+ .bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
+ .databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new ModuloDatabaseShardingAlgorithm()))
+ .tableShardingStrategy(new TableShardingStrategy("order_id", new ModuloTableShardingAlgorithm())).build();
return new ShardingDataSource(shardingRule);
}
diff --git a/sharding-jdbc-transaction-parent/sharding-jdbc-transaction/src/test/java/com/dangdang/ddframe/rdb/transaction/soft/base/AbstractSoftTransactionIntegrationTest.java b/sharding-jdbc-transaction-parent/sharding-jdbc-transaction/src/test/java/com/dangdang/ddframe/rdb/transaction/soft/base/AbstractSoftTransactionIntegrationTest.java
index 8f97d2654128d..7757475487ef8 100644
--- a/sharding-jdbc-transaction-parent/sharding-jdbc-transaction/src/test/java/com/dangdang/ddframe/rdb/transaction/soft/base/AbstractSoftTransactionIntegrationTest.java
+++ b/sharding-jdbc-transaction-parent/sharding-jdbc-transaction/src/test/java/com/dangdang/ddframe/rdb/transaction/soft/base/AbstractSoftTransactionIntegrationTest.java
@@ -48,8 +48,8 @@ public void setup() throws SQLException {
private void prepareEnv() throws SQLException {
DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap());
- TableRule tableRule = new TableRule("transaction_test", Lists.newArrayList("transaction_test"), dataSourceRule);
- ShardingRule shardingRule = new ShardingRule(dataSourceRule, Lists.newArrayList(tableRule));
+ TableRule tableRule = TableRule.builder("transaction_test").dataSourceRule(dataSourceRule).build();
+ ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Lists.newArrayList(tableRule)).build();
shardingDataSource = new ShardingDataSource(shardingRule);
createTable(shardingDataSource);
transactionDataSource = createTransactionLogDataSource();