spring不进debug却反回了_SpringMVC + Mybatis bug调试 SQL正确,查数据库却返回NULL

今天碰到个bug,虽然小,但是有点意思

背景是SpringMVC + Mybatis的一个项目,mapper文件里写了一条sql 大概相当于 select a from tableA where b = "123" 这样的级别

然后不管传进去的是什么 数据库里有没有 都会返回null

第一反应是sql语句写错了,比如把1和小写L弄混了之类的,传给sql的参数里有奇怪的空格等等

于是打开debug log 拿到传给sql的preparedStatement 和对应的参数

复制到console里自己查了一下,可以执行,返回结果也正确,说明不是sql的问题

既然不是sql的问题,那只好调试一下代码了

既然preparedStatement sql能够被打印出来,所以就不从业务逻辑加断点了,直接定位到PreparedStatement类 找到execute方法,上个断点开始单步

单步的时候发现ide提示说源代码和class文件对应行不一致,并且对我正在监视的变量报了一个类中不存在该变量的错

所以怀疑是引用冲突了

接下来确认一下是不是引用了奇怪的类 ,用下面这个方法去定位一下PreparedStatement的位置

public static String where(final Class cls) {

if (cls == null)throw new IllegalArgumentException("null input: cls");

URL result = null;

final String clsAsResource = cls.getName().replace('.', '/').concat(".class");

final ProtectionDomain pd = cls.getProtectionDomain();

if (pd != null) {

final CodeSource cs = pd.getCodeSource();

if (cs != null) result = cs.getLocation();

if (result != null) {

if ("file".equals(result.getProtocol())) {

try {

if (result.toExternalForm().endsWith(".jar") ||

result.toExternalForm().endsWith(".zip"))

result = new URL("jar:".concat(result.toExternalForm())

.concat("!/").concat(clsAsResource));

else if (new File(result.getFile()).isDirectory())

result = new URL(result, clsAsResource);

}

catch (MalformedURLException ignore) {}

}

}

}

if (result == null) {

final ClassLoader clsLoader = cls.getClassLoader();

result = clsLoader != null ?

clsLoader.getResource(clsAsResource) :

ClassLoader.getSystemResource(clsAsResource);

}

return result.toString();

}

用where方法去查一下类,发现jvm没有加载我认为的msql-java-connector-5.1.63 而是加载了一个内部类库里的java-connector,定位进去看了一下 确实是写的有问题,原因找到了。

最后到maven依赖里,打开依赖树,找到了加载这个自定义connector的pom条目,配置了 ,然后重启项目,解决。

SpringMVC,MyBatis商品的增删改查

一.需求 商品的增删改查 二.工程结构 三.代码 1.Mapper层 (1) ItemsMapperCustom.java package com.tony.ssm.mapper; import ja ...

关于SQL语句中SUM函数返回NULL的解决办法

SUM 是SQL语句中的标准求和函数,如果没有符合条件的记录,那么SUM函数会返回NULL. 但多数情况下,我们希望如果没有符合条件记录的情况下,我们希望它返回0,而不是NULL,那么我们可以使用例如 ...

保存 Mybatis打印的SQL日志到数据库

之前做项目,一般会有一张,用户操作记录的数据表,里面主要包括一些,用户请求的URL和请求参数,用以记录用户做过哪些事情.并没有以文件的形式来做记录,当然只适合于一些用户量特别少的系统. 而Mybati ...

MyBatis入门2_增删改查+数据库字段和实体字段不一致情况

本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 当数据库字段和实体bean中属性不一致时 之前数据库P ...

设置Mybatis打印调试sql的两种方式

http://blog.csdn.net/gao36951/article/details/53641432 ********************************************* ...

spring-mvc Mybatis插件打印SQL

代码: package com.chainup.exchange.service.adapter; import com.chainup.exchange.service.impl.AccountSe ...

springmvc+mybatis 做分页sql 语句

<?xml version="1.0" encoding="UTF-8" ?>-// ...

SQL语句查数据库中某一列是否有重复项

Select 列名,COUNT(列名)FROM 表名GROUP BY 列名HAVING COUNT( 列名 ) 〉1

怎么用SQL语句查数据库中某一列是否有重复项

SELECT 某一列, COUNT( 某一列 ) FROM 表 GROUP BY 某一列 HAVING COUNT( 某一列 ) 〉1 这样查询出来的结果, 就是 有重复, 而且 重复的数量.

随机推荐

Vi&sol;VIM键盘图&comma; Vi&sol;vim学习图

Vi/vim学习图 引用: Vi键盘图片可视化教程 http://www.cnblogs.com/me115/archive/2010/11/16/1878295.html 网上的文章易流失.感谢分享 ...

HDU 1241 :Oil Deposits

Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

Vue深度学习(2)

Text 可以在表单的input 元素上使用v-model 指令来创建双向数据绑定.它会根据input元素的类型自动选取正确的绑定模式.

...

4yue 22

1 # 1 . 进程 线程 协程 之间的相同点和不同点 #相同点:都能帮助我们实现并发操作,规避IO时间,提高执行效率 #进程:内存隔离 操作系统级别 可以利用多核(高计算) 计算机中资源分配的最小单 ...

&lbrack;20180608&rsqb;Wrong Results with IOT&comma; Added Column and Secondary Index&period;txt

[20180608]Wrong Results with IOT, Added Column and Secondary Index.txt --//链接:http://db-oriented.com ...

TOP排行新闻列表。

效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值