shardingSphere The application of precise slicing and complex slicing .
 Order form actual table DDL as follows :
CREATE TABLE `t_order_06` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `user_id` 
bigint(20) DEFAULT NULL, `order_id` bigint(20) DEFAULT NULL, `regdate` 
timestamp NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB 
AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; 
Maven rely on 
<dependency> <groupId>org.apache.shardingsphere</groupId> 
<artifactId>sharding-jdbc-core</artifactId> <version>4.0.0-RC1</version> 
</dependency> 
 User defined precise partition algorithm for single field 
public class MyPreciseShardingAlgorithm implements 
PreciseShardingAlgorithm<java.util.Date> { @Override public String 
doSharding(Collection<String> collection, PreciseShardingValue<Date> 
preciseShardingValue) { String logicTableName = 
preciseShardingValue.getLogicTableName(); Date date = 
preciseShardingValue.getValue(); List<String> shardingSuffix = new 
ArrayList<>(); // Gets the month of the date time  String str = DateFormatUtil.formatMonth(date); 
// Table name collection of added record  shardingSuffix.add(logicTableName + "_" + str); return null; } } 
 Complex partition algorithm of custom time field 
@Slf4j public class MyComplexShardingAlgorithm implements 
ComplexKeysShardingAlgorithm { @Override public Collection<String> 
doSharding(Collection collection, ComplexKeysShardingValue 
complexKeysShardingValue) { log.info(" User defined sub table by date "); List<String> 
shardingSuffix = new ArrayList<>(); // Get sub table fields and field values  Map<String, Collection<Date>> 
map = complexKeysShardingValue.getColumnNameAndShardingValuesMap(); // Get field value  
Collection<Date> shardingValues = map.get("regdate"); if 
(!CollectionUtils.isEmpty(shardingValues)) { for (Date date : shardingValues) { 
// Gets the month of the date time  String str = DateFormatUtil.formatMonth(date); // Table name collection of added record  
shardingSuffix.add(complexKeysShardingValue.getLogicTableName() + "_" + str); } 
} return shardingSuffix; } } 
 Code of single database and sub table 
@Slf4j public class Demo { public static void main(String[] args) throws 
SQLException { Map<String, DataSource> dataSourceMap = new HashMap<>(); 
DruidDataSource dataSource1 = new DruidDataSource(); 
dataSource1.setDriverClassName("com.mysql.cj.jdbc.Driver"); 
dataSource1.setUrl("jdbc:mysql://localhost:3306/spark?autoReconnect=true&useUnicode=true&characterEncoding" 
+ "=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true"); 
dataSource1.setUsername("root"); dataSource1.setPassword("root"); 
dataSourceMap.put("database0", dataSource1); // Rules of database table sub database and sub table  
TableRuleConfiguration tableRuleConfiguration = new 
TableRuleConfiguration("t_order"); // The database is divided according to the field  // 
tableRuleConfiguration.setDatabaseShardingStrategyConfig(new 
InlineShardingStrategyConfiguration("user_id", // "database${user_id % 2}")); 
// Divide the table according to the field  // tableRuleConfiguration.setTableShardingStrategyConfig(new 
InlineShardingStrategyConfiguration("order_id", // "t_order_${order_id % 2}")); 
// Custom complex sub table settings  MyComplexShardingAlgorithm User defined sub table algorithm  
tableRuleConfiguration.setTableShardingStrategyConfig(new 
ComplexShardingStrategyConfiguration("regdate", new 
MyComplexShardingAlgorithm())); ShardingRuleConfiguration 
shardingRuleConfiguration = new ShardingRuleConfiguration(); 
shardingRuleConfiguration.getTableRuleConfigs().add(tableRuleConfiguration); 
DataSource dataSource = 
ShardingDataSourceFactory.createDataSource(dataSourceMap, 
shardingRuleConfiguration, new Properties()); String sql = "insert into t_order 
(user_id,order_id,regdate) values (? ? ?)"; Date date = new 
Date(System.currentTimeMillis()); Connection connection = 
dataSource.getConnection(); PreparedStatement preparedStatement = 
connection.prepareStatement(sql); preparedStatement.setInt(1, 3); 
preparedStatement.setInt(2, 2); preparedStatement.setDate(3, date); 
preparedStatement.execute(); } } 
 
Technology