今天遇到了问题有点尴尬, 有个需求需要兼容mysql和oracle分页查询, 此时想到了使用mybatis-plus插件来解决。但是根据官网来操作之后发现只支持mysql不支持oracle。最后发现是因为官网demo在配置中指定了DbType.H2。关于h2这里不多介绍只说明是一种语法和mysql差不多的数据库。
操作如下:
官方配置
// 最新版
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
实际配置
// 最新版
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
查询代码
IPage<Map<String, Object>> page = new Page<>();
page.setSize(pageSize);
page.setCurrent(pageNum);
data = executeMapper.selectPageVoTest(page, sql).getRecords();
源码分析:
这里可以看到,如果dbType不为空的话,那么就会根据dbType返回dialect。
protected IDialect findIDialect(Executor executor) {
if (dialect != null) {
return dialect;
}
if (dbType != null) {
dialect = DialectFactory.getDialect(dbType);
return dialect;
}
return DialectFactory.getDialect(JdbcUtils.getDbType(executor));
}