赞
踩
pageHelper实现gbase分页 , 原来gbase也有好多版本, 不同版本之间查询sql有不同,另外连接url也不同, 如下图只比较了gbase8a 和gbase8s
gbase8a | gbase8s | |
url | jdbc: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. 在启动类里添加如下代码
- public static void main(String[] args)
- {
- // System.setProperty("spring.devtools.restart.enabled", "false");
- SpringApplication.run(RuoYiApplication.class, args);
-
- PageAutoDialect.registerDialectAlias("gbase", MySqlDialect.class);
- System.out.println("MySqlDialect--->");
- }
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就是使用默认的自动方言选择.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。