diff --git a/spring-boot-demo-sharding-jdbc/README.md b/spring-boot-demo-sharding-jdbc/README.md
new file mode 100644
index 0000000..01d7135
--- /dev/null
+++ b/spring-boot-demo-sharding-jdbc/README.md
@@ -0,0 +1,251 @@
+# spring-boot-demo-sharding-jdbc
+
+> 本 demo 主要演示了如何集成 `sharding-jdbc` 实现分库分表操作,ORM 层使用了`Mybatis-Plus`简化开发,童鞋们可以按照自己的喜好替换为 JPA、通用Mapper、JdbcTemplate甚至原生的JDBC都可以。
+>
+> PS:
+>
+> 1. 目前当当官方提供的starter存在bug,版本号:`3.1.0`,因此本demo采用手动配置。
+> 2. 文档真的很垃圾 :joy:
+
+## 1. 运行方式
+
+1. 在数据库创建2个数据库,分别为:`spring-boot-demo`、`spring-boot-demo-2`
+2. 去数据库执行 `sql/schema.sql` ,创建 `6` 张分片表
+3. 找到 `DataSourceShardingConfig` 配置类,修改 `数据源` 的相关配置,位于 `dataSourceMap()` 这个方法
+4. 找到测试类 `SpringBootDemoShardingJdbcApplicationTests` 进行测试
+
+## 2. 关键代码
+
+### 2.1. `pom.xml`
+
+```xml
+
+
+ * sharding-jdbc 的数据源配置 + *
+ * + * @package: com.xkcoding.sharding.jdbc.config + * @description: sharding-jdbc 的数据源配置 + * @author: yangkai.shen + * @date: Created in 2019-03-26 16:47 + * @copyright: Copyright (c) 2019 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Configuration +public class DataSourceShardingConfig { + /** + * 需要手动配置事务管理器 + */ + @Bean + public DataSourceTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) { + return new DataSourceTransactionManager(dataSource); + } + + @Bean(name = "dataSource") + @Primary + public DataSource dataSource() throws SQLException { + ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); + // 设置分库策略 + shardingRuleConfig.setDefaultDatabaseShardingStrategyConfig(new InlineShardingStrategyConfiguration("user_id", "ds${user_id % 2}")); + // 设置规则适配的表 + shardingRuleConfig.getBindingTableGroups().add("t_order"); + // 设置分表策略 + shardingRuleConfig.getTableRuleConfigs().add(orderTableRule()); + shardingRuleConfig.setDefaultDataSourceName("ds0"); + shardingRuleConfig.setDefaultTableShardingStrategyConfig(new NoneShardingStrategyConfiguration()); + + Properties properties = new Properties(); + properties.setProperty("sql.show", "true"); + + return ShardingDataSourceFactory.createDataSource(dataSourceMap(), shardingRuleConfig, new ConcurrentHashMap<>(16), properties); + } + + private TableRuleConfiguration orderTableRule() { + TableRuleConfiguration tableRule = new TableRuleConfiguration(); + // 设置逻辑表名 + tableRule.setLogicTable("t_order"); + // ds${0..1}.t_order_${0..2} 也可以写成 ds$->{0..1}.t_order_$->{0..1} + tableRule.setActualDataNodes("ds${0..1}.t_order_${0..2}"); + tableRule.setTableShardingStrategyConfig(new InlineShardingStrategyConfiguration("order_id", "t_order_$->{order_id % 3}")); + tableRule.setKeyGenerator(new DefaultKeyGenerator()); + tableRule.setKeyGeneratorColumnName("order_id"); + return tableRule; + } + + private Map+ * 测试sharding-jdbc分库分表 + *
+ * + * @package: com.xkcoding.sharding.jdbc + * @description: 测试sharding-jdbc分库分表 + * @author: yangkai.shen + * @date: Created in 2019-03-26 13:44 + * @copyright: Copyright (c) 2019 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Slf4j +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringBootDemoShardingJdbcApplicationTests { + @Autowired + private OrderMapper orderMapper; + + /** + * 测试新增 + */ + @Test + public void testInsert() { + for (long i = 1; i < 10; i++) { + for (long j = 1; j < 20; j++) { + Order order = Order.builder().userId(i).orderId(j).remark(RandomUtil.randomString(20)).build(); + orderMapper.insert(order); + } + } + } + + /** + * 测试更新 + */ + @Test + public void testUpdate() { + Order update = new Order(); + update.setRemark("修改备注信息"); + orderMapper.update(update, Wrappers.+ * sharding-jdbc 的数据源配置 + *
* - * @author sin5 + * @package: com.xkcoding.sharding.jdbc.config + * @description: sharding-jdbc 的数据源配置 + * @author: yangkai.shen + * @date: Created in 2019-03-26 16:47 + * @copyright: Copyright (c) 2019 + * @version: V1.0 + * @modified: yangkai.shen */ @Configuration public class DataSourceShardingConfig { diff --git a/spring-boot-demo-sharding-jdbc/src/test/java/com/xkcoding/sharding/jdbc/SpringBootDemoShardingJdbcApplicationTests.java b/spring-boot-demo-sharding-jdbc/src/test/java/com/xkcoding/sharding/jdbc/SpringBootDemoShardingJdbcApplicationTests.java index e9bbcfa..a74c199 100644 --- a/spring-boot-demo-sharding-jdbc/src/test/java/com/xkcoding/sharding/jdbc/SpringBootDemoShardingJdbcApplicationTests.java +++ b/spring-boot-demo-sharding-jdbc/src/test/java/com/xkcoding/sharding/jdbc/SpringBootDemoShardingJdbcApplicationTests.java @@ -75,6 +75,5 @@ public class SpringBootDemoShardingJdbcApplicationTests { log.info("【orders】= {}", JSONUtil.toJsonStr(orders)); } - }