Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 实现分库分表功能实战代码
时间: 2024-06-09 18:08:11 浏览: 213
以下是 Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 实现分库分表的实战代码:
1. 添加依赖
在 `pom.xml` 文件中添加以下依赖:
```xml
<dependencies>
<!-- Sharding-JDBC -->
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>4.1.1</version>
</dependency>
<!-- Mybatis-Plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
</dependencies>
```
2. 配置数据源
在 `application.yml` 文件中配置数据源:
```yaml
spring:
datasource:
# 主库
master:
url: jdbc:mysql://localhost:3306/db_master?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
# 从库
slave:
url: jdbc:mysql://localhost:3306/db_slave?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
```
3. 配置 Sharding-JDBC
在 `application.yml` 文件中配置 Sharding-JDBC:
```yaml
spring:
shardingsphere:
datasource:
names: master, slave # 数据源名称
master:
type: com.zaxxer.hikari.HikariDataSource
slave:
type: com.zaxxer.hikari.HikariDataSource
config:
sharding:
tables:
user:
actualDataNodes: master.user_$->{0..1} # 分表规则,user_0 和 user_1 表
tableStrategy:
inline:
shardingColumn: id
algorithmExpression: user_$->{id % 2} # 分表规则,根据 id 取模
databaseStrategy:
inline:
shardingColumn: id
algorithmExpression: master # 分库规则,根据 id 取模
bindingTables:
- user # 绑定表,即需要进行分库分表的表
```
4. 配置 Mybatis-Plus
在 `application.yml` 文件中配置 Mybatis-Plus:
```yaml
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 下划线转驼峰
```
5. 编写实体类
创建 `User` 实体类,用于映射数据库中的 `user` 表:
```java
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
```
6. 编写 Mapper 接口
创建 `UserMapper` 接口,用于定义操作 `user` 表的方法:
```java
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
```
7. 编写 Service 类
创建 `UserService` 类,用于调用 `UserMapper` 接口中的方法:
```java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getById(Long id) {
return userMapper.selectById(id);
}
public boolean save(User user) {
return userMapper.insert(user) > 0;
}
public boolean updateById(User user) {
return userMapper.updateById(user) > 0;
}
public boolean removeById(Long id) {
return userMapper.deleteById(id) > 0;
}
}
```
8. 测试
在 `UserController` 类中进行测试:
```java
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user")
public User getUser(Long id) {
return userService.getById(id);
}
@PostMapping("/user")
public boolean addUser(@RequestBody User user) {
return userService.save(user);
}
@PutMapping("/user")
public boolean updateUser(@RequestBody User user) {
return userService.updateById(user);
}
@DeleteMapping("/user")
public boolean removeUser(Long id) {
return userService.removeById(id);
}
}
```
启动应用程序,访问 `http://localhost:8080/user?id=1` 可以得到 `id` 为 1 的用户信息。访问 `http://localhost:8080/user` 并传入用户信息,可以添加用户。访问 `http://localhost:8080/user` 并传入更新后的用户信息,可以更新用户信息。访问 `http://localhost:8080/user?id=1` 并使用 DELETE 方法,可以删除用户。
阅读全文