# sharding-jdbc
**Repository Path**: myjava/sharding-jdbc
## Basic Information
- **Project Name**: sharding-jdbc
- **Description**: A JDBC driver for shard databases and tables
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 972
- **Created**: 2017-08-01
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Sharding-JDBC - JDBC driver for shard databases and tables
# [中文主页](http://dangdangdotcom.github.io/sharding-jdbc)
[](https://travis-ci.org/dangdangdotcom/sharding-jdbc)
[](https://maven-badges.herokuapp.com/maven-central/com.dangdang/sharding-jdbc)
[](https://coveralls.io/github/dangdangdotcom/sharding-jdbc?branch=master)
[](https://github.com/dangdangdotcom/sharding-jdbc/releases)
[](http://www.apache.org/licenses/LICENSE-2.0.html)
# Overview
Sharding-JDBC is a JDBC extension, provides distributed features such as sharding, read/write splitting and BASE transaction.
# Features
## 1. Sharding
* Aggregation functions, group by, order by and limit SQL supported in distributed database.
* Join (inner/outer) query supported.
* Sharding operator `=`, `BETWEEN` and `IN` supported.
* Sharding algorithm customization supported.
* Hint supported.
## 2. Read/Write Splitting
* Same transaction data concurrency guarantee.
* Hint supported.
## 3. BASE Transaction
* Best efforts delivery transaction.
* Try confirm cancel transaction (TBD).
## 4. Compatibility
* ORM self-adapting. JPA, Hibernate, Mybatis, Spring JDBC Template or JDBC supported.
* Connection-pool self-adapting. DBCP, C3P0, BoneCP, Druid supported.
* Any Database supported theoretically. MySQL support only, will support Oracle, SQLServer, DB2 and PostgreSQL in future.
## 5. Configuration
* Java config
* Spring namespace
* YAML
* Inline expression
## 6. ID Generation
* Distributed Unique Time-Sequence Generation
# Architecture

# [Release Notes](https://github.com/dangdangdotcom/sharding-jdbc/releases)
# [Roadmap](ROADMAP.md)
# Quick Start
## Add maven dependency
```xml
com.dangdang
sharding-jdbc-core
${latest.release.version}
```
## Rule configuration
```java
ShardingRule shardingRule = ShardingRule.builder()
.dataSourceRule(dataSourceRule)
.tableRules(tableRuleList)
.databaseShardingStrategy(new DatabaseShardingStrategy("sharding_column", new XXXShardingAlgorithm()))
.tableShardingStrategy(new TableShardingStrategy("sharding_column", new XXXShardingAlgorithm())))
.build();
```
## Use raw JDBC API
```java
DataSource dataSource = ShardingDataSourceFactory.createDataSource(shardingRule);
String sql = "SELECT i.* FROM t_order o JOIN t_order_item i ON o.order_id=i.order_id WHERE o.user_id=? AND o.order_id=?";
try (
Connection conn = dataSource.getConnection();
PreparedStatement preparedStatement = conn.prepareStatement(sql)) {
preparedStatement.setInt(1, 10);
preparedStatement.setInt(2, 1001);
try (ResultSet rs = preparedStatement.executeQuery()) {
while(rs.next()) {
System.out.println(rs.getInt(1));
System.out.println(rs.getInt(2));
}
}
}
```
## Use spring namespace
```xml
```