错坑示范:
1.项目运行后访问报错:
Invocation of init method failed
如图(留意这两框里的变量)
原因猜测: 在dao的实现类中在用 SqlSessionTemplate 后注入没有将 其继承 JdbcDaoSupport这个关系删掉,造成对象内容注入混乱。
之前的错误代码:
解决办法:将这个继承关系去掉
再进一步分析:
首先是第一个变量dataSource背后的关系,他来自于DataSourceTransactionManager这个类,然后这个类又在jdbc这个包下
第二个变量jdbcTemplate,他同样也在jdbc这个包下,不知道该用啥亲戚关系形容合适,总之就是说,他们两的关系很近,血缘相同
然后再看看我们代码中放的那个注入的配置对象,他是mybatis下的spring,也就是说和上面那个其实关系不搭,也就是呆一起会犯冲。所以我们把那个继承关系删掉,自己做主,就能跑起来了
2.项目进行访问跳转后,页面报出异常错误信息:
According to TLD or attribute directive in tag file, attribute [items] does not accept any expressions
分析:在进行使用JSTL的时, 原文件中c标签指令是这样的:
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>。
看上去好像没问题的样子,查以前的笔记发现自己少写了点东西,对照加上去就解决了
解决办法:以前的c标签指令是:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
实际上第一个指令也是可行的,不过会要稍微麻烦点,详细处理方式请见该文:JSTL的EL表达式
3.在修改完前面的错误之后,我的项目运行再次迎来bug:
Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias ‘BaseResultMap’. Cause: java.lang.ClassNotFoundException: Cannot find class: BaseResultMap
先看翻译
原因:org.apache.ibatis.type.TypeException:无法解析类型别名“ BaseResultMap”。
原因:java.lang.ClassNotFoundException:找不到类:BaseResultMap
原因:项目在运行的时候,去取那个结果集BaseResultMap,取不出来,由此定位到相应的Mapper文件,注意看此处的返回类型
自动生成的mapper文件中先定义了返回类型resultMap,而resultMap和resultType不能同时存在。所以肯定会报错。为什么不能同时存在呢,因为返回类型不一样,代表着它们的取值方式会不一样,同样的内容同时用两种方式就会混乱。
具体详细原因和区别及应用场景,见大佬文章 Mybatis中的resultType和resultMap
这就是我学习ssm遇到的几个异常bug,虽说是极大程度上因为粗心导致的,不过要是在能够解决问题的前提下,更好的去了解它后面的原因,以后就能够对这类问题的印象就更加深刻。
学习java到现在,我感觉其实处理好每一个bug的背后都是在和自己对话,更加深刻一波,哈哈