mybatis plus 的动态表名的配置
时间: 2023-09-27 07:12:35 浏览: 118
MyBatis-Plus 支持动态表名的配置,可以通过实现 `IMetaObjectHandler` 接口和使用 MyBatis-Plus 提供的 `SqlHelper` 工具类来实现。
下面是一个简单的示例:
1. 实现 `IMetaObjectHandler` 接口,重写 `getTableName` 方法,根据需要返回不同的表名。
```java
public class DynamicTableNameHandler implements IMetaObjectHandler {
private static final ThreadLocal<String> TABLE_NAME_HOLDER = new ThreadLocal<>();
public static void setTableName(String tableName) {
TABLE_NAME_HOLDER.set(tableName);
}
public static void clearTableName() {
TABLE_NAME_HOLDER.remove();
}
@Override
public void insertFill(MetaObject metaObject) {
setTableName("table1");
// ...
}
@Override
public void updateFill(MetaObject metaObject) {
setTableName("table1");
// ...
}
@Override
public String getTableName(MetaObject metaObject, String sql, String tableName) {
String dynamicTableName = TABLE_NAME_HOLDER.get();
if (StringUtils.isNotBlank(dynamicTableName)) {
return dynamicTableName;
}
return tableName;
}
}
```
2. 在需要动态设置表名的地方调用 `DynamicTableNameHandler.setTableName` 方法设置表名。例如:
```java
DynamicTableNameHandler.setTableName("table2");
userService.save(user);
DynamicTableNameHandler.clearTableName();
```
3. 使用 MyBatis-Plus 提供的 `SqlHelper` 工具类生成 SQL 语句时,传入动态表名即可。例如:
```java
String sql = SqlHelper.getInsertSql(User.class, DynamicTableNameHandler.getTableName(), metaObject);
```