当前使用版本(必填,否则不予处理)
3.4.3
该问题是如何引起的?(确定最新版也有问题再提!!!)
oceanbase数据库支持两种模式(mysql,oracle),源码默认是用的mysql的方言,如果是oracle怎么办
重现步骤(如果有就写完整)
连接信息是一样的,如果是oracle的话分页就会用mysql的方言。需要两种都可以切换所以PaginationInnerInterceptor不希望写死。 也不想覆盖类的方式做,升级会麻烦一点。 1.有没有配置可以自定义dbtype或dialect 2.自定义去覆盖之类的
报错信息
Comment From: wu-xin
PaginationInnerInterceptor 实现一个子类,重新实现findIDialect,初始到MybatisPlusInterceptor里面,这样应该就行了
Comment From: catgptjourney
PaginationInnerInterceptor 实现一个子类,实现findIDialect,应该可以到MybatisPlusInterceptor里面,这样就行了
您好,我按照您描述的方案重写了PaginationInnerInterceptor findIDialect方法,但是达梦数据库默认使用oracelDialect, 执行分页SQL时,首先执行了我的自定义findIDialect方法,其次又执行了oracelDialect 请问这种情况,如何解决。
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// PaginationInnerInterceptor 此类已重写findIDialect方法
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setDbType(DbType.DM);
paginationInnerInterceptor.setOverflow(true);
paginationInnerInterceptor.setDialect(new MyDmDialect());
// 动态表名
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
String schemaNameSpot = "test";
HashMap<String, TableNameHandler> map = new HashMap<String, TableNameHandler>(2) {{
put("page_test", (sql, tableName) -> schemaNameSpot + tableName);
}};
dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);
interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
Comment From: wu-xin
MybatisPlusInterceptor 里面new 一个你自定继承PaginationInnerInterceptor的类,在findIDialect里面可以拿到
Connection conn = executor.getTransaction().getConnection();
String jdbcUrl = conn.getMetaData().getURL();
通过jdbcUrl就可以做文章了