当前位置:   article > 正文

pageHelp 多数据源_pagehelper多数据源

pagehelper多数据源

pageHelper实现gbase分页 , 原来gbase也有好多版本, 不同版本之间查询sql有不同,另外连接url也不同, 如下图只比较了gbase8a 和gbase8s

gbase8agbase8s
urljdbc:gbase://[host][:port]/[database]?user=[username]&password=[password]jdbc:gbasedbt-sqli://[{host}:{port}][/dbname]: GBASEDBTSERVER=[servername][;name=value]…

代码使用动态数据源分页出现问题,项目跑在oracle上, 但是项目是动态切换数据源, 可以查询gbase数据库中数据,出现了问题.  

gbase8a数据库使用pageHelper 分页 出现了first skip这些关键字, 报错了, 显然当前数据库不支持这些关键字分页 . 这是因为这些关键字是gbase8s的分页, 而项目中的是gbase8a, 在这之前还这不知道gbase还有这区分. 具体两种数据库查询sql有什么不同,我也不清楚. 不过gbase8a使用的mysql语法.

解决办法

1. 在启动类里添加如下代码

  1. public static void main(String[] args)
  2. {
  3. // System.setProperty("spring.devtools.restart.enabled", "false");
  4. SpringApplication.run(RuoYiApplication.class, args);
  5. PageAutoDialect.registerDialectAlias("gbase", MySqlDialect.class);
  6. System.out.println("MySqlDialect--->");
  7. }
PageAutoDialect.registerDialectAlias("gbase", MySqlDialect.class);
这个就是修改pageHelper中 gbase8a使用mysql方言

查看PageHelper源码

类加载的过程中, 会自动注册数据库名和对应的类, 这些方言类, 主要就是用来拼接分页sql的. 比如

MysqlDialect中会有如下代码

我们在运行时, 发现gbase8a会被解析到infomix 这个上使用infomixDialect这个类, 这里边就是有first skip关键字, 这里 显然错啦, 

 

所以手动在启动时候给指定方言类

至于为什么key是gbase 而不是infomix

因为在执行到这里时候发现dialect.toLowerCase 结果是 :gbase: 

源码在切换数据源时候, 从dialectAliasMap中获取key, 匹配 url 中 ':gbase: ' 如果匹配不到会报错 需要配置helperDialect之类的错误. 

这里在启动时候调用registerDialectAlias 其实就是往dialectAliasMap中放只类, 这里放置后就ok具体

PageAutoDialect.registerDialectAlias("gbase", MySqlDialect.class);

 2. 另外在application.yml配置

这里不增加helperDialect 配置, auto-dialect: true, 看源码可知这里auto-dialect可以不用添加, 没有helperDialect就是使用默认的自动方言选择. 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/88173
推荐阅读
相关标签
  

闽ICP备14008679号