前些天大学同学托我帮他们公司弄个小项目,分析他的需求,觉得很简单,就答应了。花了整整一天时间,才弄好。其中也有些收获,把项目中获得的知识记录下来,以后再用到也好迅速的捡起来。
开发工具:jdk1.5 tomcat6.0 eclipse oracle10gxe
框架:strust2.x spring3.x mybatis3.x 前台主要是jquery
收获如下:
1.mybatis作为持久层框架,有一个NULL异常的问题情况,随便举个例子
SqlSession sqlSeesion;
Users users=new Users();//user是关键字,郁闷
users.setUname(null);
users.setUage(20);
sqlSession.insert("insertUsers",users);
//sqlSession是通过注入的
//mybatis的mapper.xml和spring的xml配置就不写了
运行代码,会出现NULL异常。我首先想到的是orcale数据是否非空,结果是,可以为空。为了验证,直接用sql语句在orcale下插入成功。
这时,我就想到可能是mybatis的问题,也许你会想说sqlSession有可能是空,当然就个早就验证,spring注入是成功的。
如果是mybatis的总是,就要判断是那个环节出的问题。如是我直接在mapper中修改SQL语句,把#{uname}改成NULL,运行,插入成功
这就说明,有可能是类型转换的问题,也就是javaType转化在jdbcType中null值无法判定类型的原因。如是,我在网上搜了搜,发现很多人
也遇到了同样问题。有人说把null改成"",这样固然可以,但是这样解决问题过于直接,无法探究问题本身,最终解决办法如下:
#{uname}===>#{uname,jdbcType=VARCHAR}
2.tomcat6.0部署项目问题
直接说解决办法.
a. d:/jdk1.5/bin 配置到环境变量的path中去
b。 在环境变量中配置JAVA_HOME和JRE_HOME,后来在网上查资料,了解到这两个环境变量是在tomcat6.0/bin/setclasspath.bat中被用到了,所以有人提出了另外一个方案。就是直接将这两个变量写到setclasspath.bat中去
set JAVA_HOME=D:\jdk1.5
set JRE_HOME=D:\jdk1.5\jre
c. 运行startup.bat搞定