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。 

 

==============================================后续

 

前几天在测试环境测试数据,修改了其中一张表的字段长度。

然后就报这个错了

 

 

 

 

注意注意,这几张分表是荣辱与共的关系,唇寒齿亡!!

所有的 表的结构(索引、引擎、列、字符集等)要完全一致,完全!全!

如果 几张表的 decimal 类型的字段不一致。查询表的汇总会出问题!!

 

posted @ 2019-09-10 15:55  walkerluo  阅读(823)  评论(0编辑  收藏  举报