使用PageHelper分页插件时,必须设置helper属性
来源:腾讯云 时间:
2023-03-01 17:15:19
(资料图片仅供参考)
问题背景
开发语言: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以上版本为您推荐
-
helper针对dialect的处理机制:默认它会通过配置的连接串用mysql去识别,换了连接串后,需要通过配置文件指定mysql。配置文件的参数,有横线和驼
23-03-01
-
3月1日,国家统计局发布的数据显示,2月制造业采购经理指数(PMI)为52 6%,高于预期2 1个百分点,比上月上升2 5个百分点,创2012年5月以来新高。2
23-03-01
-
1、i5-4440Processor(6MCache,upto3 30GHz)i5-4590Processor(6MCache,upto
23-03-01
-
由于市场上的番茄价格飙升、供应短缺,深受英国人欢迎的食物——比萨饼,可能被迫更改饼底酱料配方,将番茄酱底改成蔬菜酱底或用只放乳酪的白
23-03-01
-
马竞官方消息,在马德里德比中受伤的雷尼尔多已经接受手术顺利出院。雷尼尔多在比赛对抗中受伤后被诊断为右膝前十字韧带断裂。球员已经于2月26
23-02-28
快讯
- 三一国际(00631.HK)加速实施电动化战略及发展新能源装备业务
- 异动快报:国恩股份(002768)12月30日13点30分触及涨停板
- 世界热头条丨康众医疗董秘回复:部分大股东减持系因其自身资金需求并按照相关法规的规定推进
- 白俄罗斯外交部就乌克兰导弹落入白境内一事召见乌大使 热推荐
- 焦点快看:博汇股份(300839):独立董事提名人声明(董向阳)
- 资生堂等著名品牌上“黑榜”,这些A股国货蒸蒸日上 动态
- 东莞国际车展门票官网查询系统_全球新视野
- 全球快播:小赢钱包逾期24天逾期还款怎么样
- 异动快报:中科云网(002306)12月29日9点39分触及涨停板_今日快看
- 百事通!重庆高速公路将进入“数字人民币时代”