记一次分页助手与高斯数据库的使用记录

背景:SpringBoot+Mybatis+GaussDB项目,使用PageHelper做分页查询时出错,提示请设置helperDialect参数

在这里,我首先说说我解决问题的思路。这里说的思路,是指依靠自己,不去百度而光看源码和报错信息来解决问题的,因为这样对自己解决问题的能力提升比较大。

根据错误栈信息定位到出错代码,可以发现是一个Mapper接口,具体差不多是这样:

xxxxMapper.qryXXX();

观察代码,全程分页插件只调用了:Page page = PageHelper.startPage(1, 5);

那么基本可以肯定是PageHelper在初始化时的其他配置导致的,可能是Properties啊,application配置文件之类的,点进去PageHelper的源码,发现了一个设置Properties的地方,其中有一个叫autoDialect=xxx()的设置项很可疑,点进去

后面经过多层调用,找到了报错信息的代码处PageAutoDialect,也就找到了出错原因:传入的数据库连接url被提取两个indexOf(":")之间的字符串(比如jdbc:db2://99.12.13.14:9000 这样的连接,明显是连接db2数据库),并在对应的hashMap中找对应的注册类,没找到高斯数据库的,所以报错了。

接下来就是找有没有“手动配置”的代码了。这里就考验读和分析源码的能力,和Java能力了。

经过分析,发现在PageAutoDialect类里有相关的函数initDialect,并在SpringBoot初始化时调用,读取DataSource的Properties并找到key为dialectAlias并且值为alias1=xx.dialectClass;alias2=dialectClass2形式。

怎么给DataSource设置Properties呢?往回查看调用该函数的地方,有两处,一个是autoConfigure,一个是interceptor拦截器,在拦截器里添加Properties,最终会被读取并添加进PageHelper的属性中。

PS:没有附代码,也不详细,只是记录下大概的过程。想看详细过程,

你可能感兴趣的:(记一次分页助手与高斯数据库的使用记录)