前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mybatis报Invalid bound statement,终于被我找到原因了

Mybatis报Invalid bound statement,终于被我找到原因了

作者头像
大风写全栈
发布2024-11-29 16:48:09
发布2024-11-29 16:48:09
1.6K00
代码可运行
举报
文章被收录于专栏:锤子代码锤子代码
运行总次数:0
代码可运行

起因

最近在给老项目升级,有个项目是MyBatis写的。

SQL语句是写在XML里面的,ResultMap写了一百多行,整个文件上千行。代码混乱不好管理,就计划升级到MyBatis Plus。

采用在Java类中用Java代码实现的方式,简化XML文件。

原本计划MyBatis和MyBatis Plus一起使用,转念一想,反正要升级,不如彻底一点,直接全部都换成MyBatis Plus。

总结了几个升级步骤,如果你们需要升级可以参考:

  1. 将依赖中的MyBatis依赖移除,改成MyBatis Plus依赖(默认包含MyBatis);
  2. 移除MyBatisConfig类,MyBatis Plus会自动配置,不需要配置类;
  3. 针对实体类,需要增加MyBatis Plus的注解,比如表名用@TableName,字段ID用@TableId,字段列(如果列名不一致[驼峰转下划线除外]):@TableField等等
  4. 在对应的Mapper接口中继承BaseMapper<T>,此时接口就具有了基础的CRUD功能。

经过上面几个步骤,基本就接入到MyBatis Plus了。

如果还有特别复杂的SQL怎么办?

像之前一样编写XML,返回类型指定相应的类名。

异常怎么触发的?

异常信息如下:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.OrderMapper.queryOldOrder

大概意思就是找不到这个方法。

找了半上午,一直找不到原因。

各种找,后面在看配置信息的时候,似乎发现了问题。

忘了改配置

由于是从老配置转过来的,之前的配置如下:

代码语言:javascript
代码运行次数:0
运行
复制
mybatis-plus:
  mapper-locations: classpath*:mapper/*.xml
  type-aliases-package: com.example.entity
  configuration:
    cache-enabled: true
    use-generated-keys: true
    default-executor-type: simple
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl

问题出在mapper-locations的路径上,实际上我的xml映射文件在mapper/system/这个路径下面。

看出端倪之后,将xml映射文件移动到/main/resources/mapper/目录下,编译,再次运行就没报错了。

总结一下,MyBatis Plus或者MyBatis报错的时候,先检查一下配置是否正确。

又是天天上一当,当当不一样。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 锤子代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档