当前使用版本(必填,否则不予处理)

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就可以做文章了