mybatis-plus集成后分页查询不兼容mysql和oralce问题
今天遇到了问题有点尴尬, 有个需求需要兼容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)); }
下一篇:
Oracle存储过程案例详解