版本
implementation('com.baomidou:mybatis-plus-boot-starter:3.3.0')
配置config
MybatisPlusConfig.java
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInterceptor.setLimit(-1);
//动态表名解析器 分表的 表 需要手动导入 (如 user 表 想根据http header 中 '_hospital' 值来动态 生成 user_12 之类的的表)
Map<String, ITableNameHandler> tableNameHandlerMap = new HashMap<>();
tableNameHandlerMap.put("user", myDynamicTableNameParser());
DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser().setTableNameHandlerMap(tableNameHandlerMap);
ArrayList<ISqlParser> sqlParsersList = new ArrayList<>();
sqlParsersList.add(dynamicTableNameParser);
paginationInterceptor.setSqlParserList(sqlParsersList);
return paginationInterceptor;
}
@Bean
public ITableNameHandler myDynamicTableNameParser() {
return (metaObject, sql, tableName) -> {
//获取 请求头 参数 动态分配表名 ,如果是spring security oauth2 就改成从 authentication.getPrincipal() 配置的用户信息中获取
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
String hospitalId = attr.getRequest().getHeader("_hospital");
hospitalId = !hospitalId.isEmpty() ? "_" + hospitalId : "";
return tableName + hospitalId;
};
}
}
测试
//userController.java
@Autowired
private IUserService userService;
@GetMapping(value = "/")
public ResponseEntity<Page<User>> list(@RequestParam(required = false) Integer current, @RequestParam(required = false) Integer pageSize) {
if (current == null) {
current = 1;
}
if (pageSize == null) {
pageSize = 10;
}
Page<User> aPage = userService.page(new Page<>(current, pageSize));
return new ResponseEntity<>(aPage, HttpStatus.OK);
}
//IUserService.java
public interface IUserService extends IService<User> {}
//UserServiceImpl.java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {}
//UserMapper.java
public interface UserMapper extends BaseMapper<User> {}
IDEA 的 http Client
GET http://localhost:7080/Demo/user/
_hospital: 10
生成的sql 语句就会变成