shardingJDBC整合mybatisplus
时间: 2025-01-24 16:57:18 浏览: 44
### Sharding-JDBC 整合 MyBatis-Plus 示例教程
#### 项目准备
为了使Sharding-JDBC与MyBatis-Plus顺利协作,需先创建一个基础的Spring Boot工程并引入必要的依赖项。这包括但不限于`spring-boot-starter-web`, `mybatis-plus-boot-starter`, 和`sharding-jdbc-spring-boot-starter`等。
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mybatis plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!-- sharding jdbc -->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>${sharding.jdbc.version}</version>
</dependency>
```
#### 数据源配置
在application.yml文件中定义多个数据源以及分片策略的相关参数设置。这里假设存在两个真实的物理数据库实例db0和db1用于水平拆分表结构[^2]。
```yaml
spring:
shardingsphere:
datasource:
names: ds_0,ds_1
ds_0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db0?useSSL=false&serverTimezone=UTC
username: root
password: 123456
ds_1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql://localhost:3306/db1?useSSL=false&serverTimezone=UTC
username: root
password: 123456
rules:
sharding:
tables:
book:
actual-data-nodes: ds_${0..1}.book_$->{0..1}
table-strategy:
standard:
sharding-column: id
precise-algorithm-class-name: com.example.demo.algorithm.ModuloTableShardingAlgorithm
key-generate-strategy:
column: id
key-generator-class-name: io.shardingsphere.core.keygen.DefaultKeyGenerator
```
#### Mapper接口编写
通过继承`BaseMapper<T>`来快速构建CRUD操作的基础方法,如下所示:
```java
package com.macky.springbootshardingjdbc.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.macky.springbootshardingjdbc.entity.Book;
/**
* @author Macky
*/
public interface BookMapper extends BaseMapper<Book> {
}
```
此部分展示了如何利用MyBatis-Plus简化持久化层开发工作的同时享受Sharding-JDBC带来的分布式能力[^4]。
#### 自定义分片算法实现
针对具体业务场景设计合理的分片逻辑至关重要。可以通过自定义类实现`StandardShardingAlgorithm`接口完成这一目标。例如按照ID取模决定记录存储位置的方法可以这样写:
```java
package com.example.demo.algorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
import java.util.Collection;
import java.util.Properties;
public class ModuloTableShardingAlgorithm implements PreciseShardingAlgorithm<Long> {
private final Properties properties = new Properties();
public String doSharding(final Collection<String> availableTargetNames,
final PreciseShardingValue<Long> shardingValue) {
Long value = shardingValue.getValue();
int targetIndex = (int)(value % 2);
return "book_" + targetIndex;
}
}
```
上述代码片段实现了基于ID字段值对两张子表(`book_0`,`book_1`)进行轮询分配的功能。
阅读全文
相关推荐



















