世界球精选!使用PageHelper分页插件时,必须设置helper属性

2023-03-01 09:07:32 | 来源:腾讯云


(相关资料图)

问题背景

开发语言:Java插件版本:pagehelper:5.3.1,pagehelper-spring-boot:1.4.3问题描述:使用原生MySQL驱动时正常,使用某个第三方驱动(兼容mysql)时报错。 报错信息:
com.githubpagehelper.PageException: 使用PageHelper分页插件时,必须设置helper属性。

问题分析

应用使用的是mybatis分页插件pagehelper,在不指定方言(dialect)的情况下会直接报错,报错是信息是使用pagehelper插件必须设置helper属性;尝试设置别名信息,同样会报错,设置如下:
pagehelper.helper-dialect=mysql
可以通过代码指定的方式处理,但涉及改动程序,不推荐,例如:
PageHelper.startPage(page, limit).using("mysql");         List list= mapper.list();         PageInfo pageInfo = new PageInfo<>(list);
第三方驱动本身无问题怀疑是引入的插件包有问题

问题定位

对比测试另一个系统,发现正常,没有对应的报错。对比2个系统中的配置,发现正常的系统,使用的是kebab-case风格;报错的系统,使用的是camelCase风格;下载helper源码进行分析,确定是插件本身问题:1.4.4版本修复了这个问题:

helper针对dialect的处理机制:默认它会通过配置的连接串用mysql去识别,换了连接串后,需要通过配置文件指定mysql。 配置文件的参数,有横线和驼峰的区别(1.4.4之前,有bug,只能识别驼峰式的配置);

public static AbstractHelperDialect instanceDialect(String dialectClass, Properties properties) {    AbstractHelperDialect dialect;    if (StringUtil.isEmpty(dialectClass)) {        throw new PageException("使用 PageHelper 分页插件时,必须设置 helper 属性");    }
public AbstractHelperDialect extractDialect(String dialectKey, MappedStatement ms, DataSource dataSource, Properties properties) {    String dialect = PageAutoDialect.fromJdbcUrl(dialectKey);    return PageAutoDialect.instanceDialect(dialect, properties);}
public static String fromJdbcUrl(String jdbcUrl) {    final String url = jdbcUrl.toLowerCase();    for (String dialect : dialectAliasMap.keySet()) {        if (url.contains(":" + dialect.toLowerCase() + ":")) {            return dialect;        }    }    return null;}
static {    //注册别名    registerDialectAlias("hsqldb", HsqldbDialect.class);    registerDialectAlias("h2", HsqldbDialect.class);    registerDialectAlias("phoenix", HsqldbDialect.class);    registerDialectAlias("postgresql", PostgreSqlDialect.class);    registerDialectAlias("mysql", MySqlDialect.class);    registerDialectAlias("mariadb", MySqlDialect.class);    registerDialectAlias("sqlite", MySqlDialect.class);    registerDialectAlias("herddb", HerdDBDialect.class);    registerDialectAlias("oracle", OracleDialect.class);    registerDialectAlias("oracle9i", Oracle9iDialect.class);    registerDialectAlias("db2", Db2Dialect.class);...

可以看到,pagehelper默认是通过jdbc的url去自动识别dialect。例如mysql的,它会用":mysql:"去匹配有没有对应的dialect。而第三方驱动的jdbc连接串用的是 ":xxxxx:",这个pagehelper默认是没有的,因此不能用自动识别。 要在配置文件中指定dialect,指定用mysql就可以了,是兼容的。问题在于helper这个包,在1.4.4版本之前,它只能识别驼峰式配置。

解决办法

使用驼峰式配置参数使用pagehelper 1.4.4以上版本
上一篇 下一篇

世界球精选!使用PageHelper分页插件时,必须设置helper属性

eleemosynary

全球讯息:咽喉炎吃什么药止咳化痰_咽喉炎吃什么药好得快

世界资讯:两小儿辩日翻译

当前短讯!上下联怎么贴左右怎么分_上下联怎么贴

黄婷婷发博回应被纳入失信被执行人名单:尊重司法判决

承泽翡翠直播间 当前视点

80天环游地球好词好句英文_80天环游地球好词好句

织田信长死于什么_织田信长怎么死的

The Capital Group Companies,inc.增持康希诺生物30.76万股 每股作价约68.58港元

盲人跑者何亚君:在按摩店只是活着,跑步才是生活 当前时讯

环球速看:Value Date_value date是什么意思

一组代码,引发千亿量化私募“对簿公堂”!最新回应来了

每日简讯:万润股份:公司一向依法合规运营,公司2022年前三季度存货较2021年末增加主要系为后期订单储备库存

起底江西行李箱藏尸案逃犯 案件详情始末大披露 速讯

世界球精选!使用PageHelper分页插件时,必须设置helper属性

eleemosynary

全球讯息:咽喉炎吃什么药止咳化痰_咽喉炎吃什么药好得快

世界资讯:两小儿辩日翻译

当前短讯!上下联怎么贴左右怎么分_上下联怎么贴

黄婷婷发博回应被纳入失信被执行人名单:尊重司法判决

承泽翡翠直播间 当前视点

80天环游地球好词好句英文_80天环游地球好词好句

织田信长死于什么_织田信长怎么死的

The Capital Group Companies,inc.增持康希诺生物30.76万股 每股作价约68.58港元

盲人跑者何亚君:在按摩店只是活着,跑步才是生活 当前时讯

环球速看:Value Date_value date是什么意思

一组代码,引发千亿量化私募“对簿公堂”!最新回应来了

每日简讯:万润股份:公司一向依法合规运营,公司2022年前三季度存货较2021年末增加主要系为后期订单储备库存

起底江西行李箱藏尸案逃犯 案件详情始末大披露 速讯

圣骑士救赎技能怎么学_圣骑士 救赎技能|每日精选

泪囊堵塞最佳治疗方案_泪囊堵塞的治疗办法 天天微资讯

叙利亚遭遇强震也拦不住美军继续盗取石油 全球观点

【环球快播报】丁雪珍

环球快看:公积金付首付,南京发布实施细则

有声作品的声音设计理念

星球重启开服有什么活动?海外怎么预下载星球重启

三河镇太华村志愿服务队

天天微头条丨2023年海南省青少年足球联赛收官

每日看点!京滨城际滨海西站市政配套工程土方开挖全部完成

中国长城董秘回复:公司可为低轨卫星互联网建设筑牢信息安全底座

酒仙网公司地址公司电话_洒仙网首页

中国柔道队收获二金三铜_全球今头条

环球焦点!停更后仍占26%的份额:Win7会成为第二个WindowsXP吗?

不可思议de1100·走近野生动物 世界今亮点