Sharding-JDBC 是一个开源的分库分表解决方案,它可以帮助我们轻松实现数据库的水平扩展。以下是使用 Sharding-JDBC 实现分库分表的实战教程。
步骤一:引入依赖
首先,在项目的 pom.xml
文件中引入 Sharding-JDBC 的依赖:
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>4.1.1</version>
</dependency>
步骤二:配置数据源
在 application.yml
或 application.properties
文件中配置数据源和分库分表规则。这里以 YAML 配置为例:
spring:
shardingsphere:
datasource:
names: ds0,ds1
ds0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db0
username: root
password: root
ds1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db1
username: root
password: root
sharding:
tables:
t_order:
actual-data-nodes: ds${0..1}.t_order${0..1}
table-strategy:
inline:
sharding-column: order_id
algorithm-expression: t_order${order_id % 2}
database-strategy:
inline:
sharding-column: user_id
algorithm-expression: ds${user_id % 2}
key-generator-column-name: order_id
key-generator:
type: SNOWFLAKE
column: order_id
步骤三:创建分表和分库
根据上述配置,在 db0
和 db1
数据库中分别创建分表 t_order0
和 t_order1
。
CREATE TABLE t_order0 (
order_id BIGINT NOT NULL,
user_id INT NOT NULL,
status VARCHAR(50),
PRIMARY KEY (order_id)
);
CREATE TABLE t_order1 (
order_id BIGINT NOT NULL,
user_id INT NOT NULL,
status VARCHAR(50),
PRIMARY KEY (order_id)
);
步骤四:编写实体类和 Mapper
创建 Order
实体类和对应的 Mapper 接口。
Order.java
public class Order {
private Long orderId;
private Integer userId;
private String status;
// Getters and Setters
}
OrderMapper.java
public interface OrderMapper {
void insert(Order order);
Order selectById(@Param("orderId") Long orderId, @Param("userId") Integer userId);
}
步骤五:使用 Sharding-JDBC 进行分库分表操作
在 Service 层中调用 Mapper 接口进行分库分表操作。
OrderService.java
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
public void createOrder(Order order) {
orderMapper.insert(order);
}
public Order getOrder(Long orderId, Integer userId) {
return orderMapper.selectById(orderId, userId);
}
}
步骤六:测试分库分表
编写测试类,验证分库分表是否正常工作。
OrderServiceTest.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class OrderServiceTest {
@Autowired
private OrderService orderService;
@Test
public void testCreateAndGetOrder() {
Order order = new Order();
order.setOrderId(1L);
order.setUserId(1);
order.setStatus("INIT");
orderService.createOrder(order);
Order fetchedOrder = orderService.getOrder(1L, 1);
assertNotNull(fetchedOrder);
assertEquals("INIT", fetchedOrder.getStatus());
}
}
以上步骤可以帮助你快速入门 Sharding-JDBC 的分库分表功能,通过实际操作体验分库分表的便利性和强大功能。