天天头条:使用PageHelper分页插件时,必须设置helper属性
2023-03-01 11:18:35 来源:腾讯云
【资料图】
问题背景
开发语言: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以上版本- 加快虚拟仿真实训基地建设 启动职业学校信息化建设试点很必要
- “双减”后如何在满足学生多样需求方面做“加法”?
- 处于生理活跃期且心理发展不成熟 高校开设公共卫生必修课很必要
- 打造高水平人才队伍 爱与希望的种子正在西部地区发芽
- 河南封丘“学生餐后呕吐腹泻”调查:配餐点“未批先餐” 家长盼说法
知识
- 他把银行卡卖给骗子,“黑吃黑”“截胡”十万元
- “老司机”4S店试驾豪车 结果油门当刹车撞了
- 新开工改造城镇老旧小区5.34万个
- 发动巡河志愿者2万余名 “用心护好每一条河”
- 假客服的套路:伪装成大平台客服,层层布局引人上钩
人物
- 新疆阿克苏地区库车市发生4.1级地震 震源深度18千米
- 浙江两轮核酸检测结果均为阴性 无新增本土阳性感染者
- 浙大紫金港校区已解封 有7337人有序离开该校区
- 抵返哈尔滨人员须持48小时内核酸检测阴性证明
- 重庆入河排污口整治工作推进至全市26个区县
- 【同心粤港澳 携手大湾区】南头古城,搭建深港澳三地文化创意活动交流平台
- 黑龙江讷河市启动全员核酸检测 目前讷河市全员核酸检测结果均为阴性
- 2021年广东省第七届风筝锦标赛落幕
- 长三角区域生态环境部门“云签约”长江大保护倡议书
- 四川省第二批政法队伍教育整顿:立案审查调查省级政法机关干警58人
- 藏不住了!你同事里有许多“武林高手”……
- 古老长城重焕新生机
- 让老年人更适应数字生活
- 浪漫之城打造山海城一体新地标
- 喜马拉雅的深情和誓言
- 浙江杭州2例无症状感染者系感染德尔塔变异株
- 徐州无新增确诊病例 核酸检测55515人结果均为阴性
- 内蒙古通辽市新增1例本土确诊病例、1例无症状感染者
- 青年学生成艾滋病感染高发人群 “社会疫苗”如何打?
- 上海本轮疫情涉及闭环管理的医疗机构全面恢复门急诊
- 内蒙古通辽市科尔沁区一地调整为中风险地区
- 甘肃培树“农家巧娘”增技能:返乡创业掌勺又“掌柜”
- 江西无新增本土确诊病例 上饶全面恢复正常生产生活秩序
- 内蒙古满洲里新增本土确诊病例1例 当地开展第二轮大规模核酸检测
- 海南首次发现有环志的世界极危鸟种勺嘴鹬
- 中老铁路上会四国语言的列车长:用心维护中老友谊的桥梁
- 宁夏45例新冠肺炎确诊病例均已治愈出院
- 江西中烟工业有限责任公司原总经理姚庆艳接受审查调查
- 内蒙古通辽新增本土确诊和无症状感染者各1例 轨迹公布
- 一场“网络劝生者”和“网络劝死者”的战役
- 生活在闹钟里的丈夫:自己迟一秒,渐冻症妻子就会多一分疼
- 内蒙古通辽市科尔沁区发现2名初筛阳性人员
- 11月28日16-24时,内蒙古新增本土确诊病例1例
- 辽宁新冠肺炎确诊病例零新增
- 黑龙江新增本土无症状感染者1例
- 奥密克戎毒株为何“需要关注”?现有防疫工具还有效吗?
- 冷空气继续影响我国中东部 华北黄淮等地有雾和霾天气
- 寒潮预警!我国中东部迎大范围降温 黑龙江等地降幅可达12℃
- 那年今日 | 一张漫画涨知识之11月29日
- 这辈子一定要去趟这个公园 在这里“有种爱叫放手”
