mybatis-plus 实现分表
时间: 2023-06-29 18:09:53 浏览: 137
Spring Boot 集成 Sharding-JDBC + Mybatis-Plus 实现分库分表功能
Mybatis-plus 也支持分表操作,具体实现方式如下:
1. 定义数据源和 Mybatis-plus 相关依赖:
```xml
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
```
2. 定义分表规则,可以使用自定义的分表策略,也可以使用 Mybatis-plus 提供的默认分表策略:
```java
public class MyTableNameHandler implements ITableNameHandler {
@Override
public String dynamicTableName(String sql, Object param) {
if (param instanceof Long) {
return "table_" + (Long) param % 2;
}
return null;
}
}
```
3. 配置分表策略:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public MyTableNameHandler myTableNameHandler() {
return new MyTableNameHandler();
}
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
@Bean
public DynamicTableNameParser dynamicTableNameParser(MyTableNameHandler myTableNameHandler) {
DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
dynamicTableNameParser.setTableNameHandlerMap(Collections.singletonMap("my_table", myTableNameHandler));
return dynamicTableNameParser;
}
}
```
4. 在实体类中使用 `@TableName` 注解指定表名:
```java
@Data
@TableName(value = "my_table")
public class MyEntity {
@TableId
private Long id;
private String name;
}
```
5. 在 Mapper 接口中使用 `@SqlParser` 注解开启分表功能:
```java
@Mapper
public interface MyMapper extends BaseMapper<MyEntity> {
@SqlParser(parser = DynamicTableNameParser.class)
List<MyEntity> selectListByUserId(@Param("userId") Long userId);
}
```
在执行查询操作时,Mybatis-plus 会根据参数动态生成分表 SQL,并将其交给数据源执行。
阅读全文