mybatis的一个很神奇的问题,二次查询没有数据。有没有大佬帮看一下

最近遇到了一个mybatis很神奇的问题,是关于二次查询的
场景是这样的,我们的管理平台有个统计报表的页面,然后也有导出的功能,我是这样做的,查询和导出使用的是同一个查询的方法,然后导出将查询出来的list作为参数传到Excel导出的工具类。之前上线的功能测试也没有问题。过了一段时间也就是最近忽然说导出的数据为空。然后我就debug了,竟然发现同样的一个方法执行第二次没有结果。控制台也没有打印第二次执行的sql。这里先贴上截图。


然后我在网上查了一下,说的是mybatis的缓存的问题,建议加上flushCache=“true”,然后我就尝试了一下,但是丝毫没有影响,只要是执行导出第二次查询的时候,查到的结果一定是空的。所以有没有大佬帮忙看看呀,我已经尝试了一上午了,还没有找到解决途径。包括修改mybatis 配置文件关闭缓存。 重新复制一遍方法修改查询的id。脑壳疼

两次执行的都是同一个方法,第一次有数据?第二次没?
但是我看你调用的mapper方法,不一样啊。一个是queryDe..一个是export...

这是我尝试的修改mapper的方法名,因为我搜的说的是mybatis是按照id去命中的,mapper。所以我在尝试换个id看他是不是还会去走缓存而不去数据库重新查询。我感觉他肯定还是去缓存里找这些数据了,但是没找到也不去数据库重新查询。xml的方法是一样的,复制粘贴的

没遇到过这种问题,第一次检索有数据,第二次检索就没了。。。玄学,不确定是不是mybatis得问题,你用jdbcTemplate试试看?

我也是头一次遇到这个。之前上线测试这个功能其实还是好好的。过一段忽然就成这样了 :expressionless: 真的是玄学问题,我试试jdbcTemplate看看能不能查到吧

mybatis:“基操,勿6”。
估计也是缓存的问题,之前我也遇到过。解决方式也是莫名其妙,检查了下自己mybatis的缓存设置,不同的缓存等级影响的范围是不一样的。刷新缓存,重启,clean一下反正各种玄乎各种来。然后就莫名其妙解决了

我现在就在各种尝试 :expressionless:但是运气还没那么好,他还没有给我返回值。依然是空的

检查下同时间段有么有其他sql语句会影响到你的查询结果,你看看sqlsession缓存中有没有保存你的查询数据。

别的sql应该影响不到这个,因为这个查询加导出只有一个sql。sqlsession怎么查看啊?我这边也是想openSqlSession,但是一直没找到正确的查看方法。 大佬能指点一下吗?怎么获取到当前的sqlsession,并且打开查看数据?

resultType有时候会映射有问题,建议使用resultMap,然后在resultMap里进行字段绑定

1 个赞