MyBatis 执行 SQL 报错:String 无法转换为 Long 的排查与解决实录
在日常开发中,MyBatis 作为一款优秀的持久层框架,极大地简化了 Java 应用与数据库之间的交互操作。然而,即使是经验丰富的开发者,也难免会遇到一些令人困惑的报错问题。本文将分享一次 “String can not cast be Long” 报错的踩坑与解决过程,带你了解分表策略在其中引发的 “蝴蝶效应”。
问题初现:莫名奇妙的类型转换报错
在项目开发过程中,我们定义了一个简单的接口方法
Integer getOverduepoint(@Param("orgId") String orgId,@Param("channelId") String channelId);
期望通过传入组织 ID 和渠道 ID,从数据库中获取逾期积分数据。对应的 MyBatis 的 XML 文件中,我们仔细编写了 SQL 语句,并且明确没有设置resultType为Long 。但在实际执行 SQL 时,却意外地抛出了 “String can not cast be Long” 的类型转换异常。
面对这个报错,第一反应是检查 SQL 语句和返回值类型配置。由于代码中没有涉及任何将String转换为Long的显式操作,且resultType配置正常,一时间问题的根源变得扑朔迷离。我们反复检查 MyBatis 的映射文件、接口定义以及 SQL 语法,均未发现明显错误,排查陷入僵局。
抽丝剥茧:分表策略暴露问题
经过一番深入排查,最终将目光锁定在项目所采用的分表策略上。在该业务场景中,系统根据<