mybatis--org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

 

mysql在入库的时候报这个错

 

 

一般的原因 
Mapper interface和xml文件的定义对应不上,需要检查包名,namespace,函数名称,方法名称等能否对应上。 
按以下步骤一一执行: 
1、检查xml文件 和 interface 是否在一个包下 
2、检查xml文件的namespace 是否和 interface 一一对应 
3、检查接口的方法名是否和xml的id 一致。

5、去掉xml文件中的中文注释 
6、随意在xml文件中加一个空格或者空行然后保存

我后面发现是xml里面没有 方法对应的sql【意不意外】。

 

修改完成后,测试环境保存成功,结果在生产上报如下错误

 

 

liuzhizhi@lzz-rmbp|sakila-db # mysql -uroot -p < sakila-data.sql
Enter password:
ERROR 1785 (HY000) at line 81: When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, 
updates to non-transactional tables can only be done in either autocommitted statements or 
single-statement transactions, and never in the same statement as updates to transactional tables.

 

查了一下发现是和mysql的存储引擎有关系,

因为代码里有这样的语句

 

    public void insert(TInterfaceLogNew interfaceLogVoNew, TInterfaceLogNewConcent interfaceLogNewConcent) {
        logger.info("[接口日志]保存开始.");
        interfaceLogNewConcentDao.insert(interfaceLogNewConcent);
        interfaceLogNewDao.insertLog(interfaceLogVoNew);
        logger.info("[接口日志]保存成功.");
    }

 

这个方法是在一个事物里面的,而 t_interface_log_new_concent 的表的 引擎是InnoDB

 

 

另一个表的引擎是 MyISAM,

后来将表都改为 InnoDB,入库不报错。

 

但是 有几张表是进行了分表,需要 关联查询的。

查询会报错

 

最后的解决方案是 所有这几张表都改为: MyISAM。 

 

转载于:https://www.cnblogs.com/llq1214/p/11396732.html

### 回答1: mybatis-plus是MyBatis的一个增强工具,它提供了更多的功能和便利的操作,使得使用MyBatis更加方便快捷。 而org.apache.ibatis.binding.BindingException: invalid bound statement异常表示在执行数据库操作时,绑定了一个无效的MyBatis语句。 造成该异常的原因可能是: 1. 未在对应的Mapper接口中定义该方法对应的SQL语句。 2. 方法名与Mapper接口中定义的方法名不一致,导致找不到对应的SQL语句。 3. 找不到对应的Mapper接口。 解决该异常的方法: 1. 确保在Mapper接口中定义了所有需要执行的SQL语句,且方法名与对应的SQL语句有一致的命名规则。 2. 检查方法名与Mapper接口中定义的方法名是否一致。 3. 检查Mapper接口的包路径,确保MyBatis能够正确地扫描到该接口。 如果以上方法都检查了,但还是无法解决该异常,可以尝试重新导入mybatis-plus依赖或者对其版本进行升级,也可以查看具体的异常信息,以便更加准确定位到问题所在。 总之,org.apache.ibatis.binding.BindingException: invalid bound statement异常是由于绑定了一个无效的MyBatis语句所导致的,需要检查对应的Mapper接口和SQL语句是否正确。 ### 回答2: mybatis-plus是一个基于mybatis的增强工具,可以简化mybatis的使用,提供了很多便捷的功能。然而,当出现"org.apache.ibatis.binding.BindingException: Invalid bound statement"错误时,通常是由于绑定的SQL语句在mybatis-plus中未找到或错误的引用导致的。 出现这个错误可能有几种原因,首先需要确认绑定的SQL语句是否正确,包括SQL语句的拼写、参数的传递等。 另外,如果使用的是mybatis-plus自动生成的mapper接口,需要检查该接口是否正确继承了mybatis-plus提供的基础接口(如BaseMapper),并且调用的方法名与mapper接口定义的方法名保持一致。 还可能是由于配置文件的问题引起的,需要检查mybatis的配置文件(通常是mybatis-config.xml)中是否正确配置了mapper的包扫描路径和mapper的引用等。 如果以上都检查无误,仍然无法解决问题,可以通过查看具体的错误堆栈信息,定位到出错的位置,进一步分析和排查问题。如果有必要,可以上网搜索类似问题的解决方案,或者向社区寻求帮助。 总之,mybatis-plus的"org.apache.ibatis.binding.BindingException: Invalid bound statement"错误通常是由于SQL语句未找到或错误的引用导致的,通过检查SQL语句、接口的继承关系、配置文件等多个方面,可以解决这个问题。 ### 回答3: mybatis-plus org.apache.ibatis.binding.BindingException: invalid bound statement 这个错误通常表示在MyBatis-Plus中的代码中存在无效的绑定语句。具体来说,可能是因为以下原因之一: 1. XML文件中的命名空间或语句ID错误:请确保在mybatis-plus-config.xml或mapper.xml中定义的命名空间和语句ID是正确的。检查是否存在拼写错误或命名空间与语句ID之间的对应关系错误。 2. 语句ID不存在:请检查在代码中是否正确引用了存在的语句ID。如果在mapper.xml文件中没有定义相应的语句,或者语句ID错误,则会出现此错误。 3. mapper接口方法名称错误:如果使用的是mapper接口与XML映射方式,确保在Java接口中定义的方法名称与mapper.xml中定义的语句ID相匹配。如果方法名称错误,会导致无法找到对应的绑定语句。 4. SQL语句错误:检查在mapper.xml中定义的SQL语句是有效的。注意SQL语法是否正确,表名和列名是否正确,以及是否有无效的SQL语句。 5. 配置文件错误:检查mybatis-plus-config.xml中是否存在配置错误。例如,检查是否正确配置了数据库连接信息以及其他必要的配置项。 综上所述,要解决这个错误,需要逐一检查以上几个方面的可能原因,并予以纠正。确认命名空间、语句ID、方法名称等是否正确,检查SQL语句的准确性,并确保配置文件中的配置正确。通过排查和修复以上问题,可以解决该错误并使代码正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值