后端使用的是SSM框架,同一条url(http://xxxx/xx/xx.do),两次请求返回的数据不一致,数据是直接取mysql数据库。例如:数据库表有1,2,3,4,共4条数据,第一次返回4条数据,第二次有可能返回3条数据.......在数据库查询每次都是有4条数据,就是请求的时候是有问题的。有没有大神指点一下·~~~~
service层,dao层和sql贴出来
查询跟数据库没关系,把你的两次请求,controller里面获得的参数严格对比就知道了
可能是你的controller里面有问题导致的
有没有传参数?很多条件你没发出来,无法分析
你可以打印下你的sql , 用你的sql 去数据执行下
对比一下每次请求的参数,看看有什么不一样,查询条件或者一些参数的改变都会造成输出结果的影响;或者写个单元测试来看看多次测试是否结果都是不一样的?也可以debug一下,看看有什么异样,再不行就把查询的sql的后台打印一下,就可以轻松知道端倪了
把你的查询sql debug出来一对比就知道了,你说的请求一样只是表面上的,可能请求参数前后不一致!
发的语句和参数检查下
对比两次sql有什么不同,同时不要在前台看数据,在后台调用完你的sql之后,看下两次的数据是否相同
看看有没有拦截器,aop之类的机制。
首先mybatis不会出现这样的问题,所以可以检查一下:
1. 每次参数是否一致
2. 把真正执行的SQL打印出来,看看两次有什么不一样的地方
3. 把mybatis配置的SQL修改一下,去掉所有参数,看看是否会产生这个问题
4. 确认一下是否查询是同一个数据库
5. 确认一下在两次查询之间是否有其他人或者程序修改数据
6. 用同样的SQL在客户端工具里查一下,看看和你哪一次查询结果相同
根据以上不同情况再做分析。
看样子应该是用了Interceptor实现mybatis分页,你看看除了业务参数前端所传的分页参数是否一致
首先,看你controller里面有没有同名的请求路径,然后看看service还有dao里面有没有关联错相对应的方法,然后你可以在controller进行一个debug,测试一下
会不会是你数据库变动了?
对比下两次执行的sql 然后是不是有什么事务没提交也没回滚的 也会导致这种问题
配置一下log4j,用这个打印一下输出的数据库语句和传入的参数,记得导入log4j的jar