上次简单记录了学习Mybatis框架遇到的问题及解决方法,今天又发现了一些细小的问题,在这里记录下来。
在使用Mybatis框架操作数据库时,其中需要创建输入流将xml配置文件加载进来,用到的方法是 getResourceAsStream(资源)
但是,这里需要注意一下,getResourceAsStream方法在多个包中都存在,但是不同包中对于方法的使用略有差别,我们再编程时大多时候使用快捷键生成代码而非完全手工输入,在自动生成是很容易忽略方法源,这里着重说明区别, 区别就是一个斜杠——”/“ 。
或许有很多小伙伴在遇到 Exception in thread "main" java.lang.NullPointerException 错误 时, 从网上找到的解决方法是 getResourceAsStream(/+配置文件名.xml)
这里,我调用方法的写法为:
InputStream inputStream = Resources.class.getResourceAsStream("/MyConfig.xml");
编写时发现:在这种方式下,不需要进行抛出或者自定义异常处理,目前还不清楚为什么不需要,以下截图主要观察红色标出的一行,可见需要在xml配置文件前加上”/“。
但在我使用时意外又调用了不同包下的 getResourceAsStream方法,同样添加一个”/“,却报错了,错误提示为: java.io.IOException: Could not find resource /MyConfig.xml
这里,我调用方法的写法为:
InputStream inputstream = org.apache.ibatis.io.Resources.getResourceAsStream("MyConfig.xml");
经过一番尝试发现:在这种方式下,不需要添加”/“,但是需要加入抛出或者自定义异常处理,以下截图主要观察红色标出的一行,没有”/“。
总结:
方法一:
①需要添加异常处理
②xml配置文件前需要添加”/“
③写法为Resources.class.getResourceAsStream()
方法二:
①需要添加异常处理
②xml配置文件前不需要添加"/"
③写法为:org.apache.ibatis.io.Resources.getResourceAsStream(),部分编程环境可能直接是Resources.getResourceAsStream(),例如myecplise编程环境就不需要前面的调用路径org.apache.ibatis.io(我是用的是ecplise编程环境,不知道为什么一定需要加上调用路径,不加还报错 = =!)
注意:以上方法的讨论的代码都是使用Alt+”/“快捷键自动生成的,不建议自己打,一方面提高编程效率,节省时间;另一方面可降低编写错误的风险。
后记:有关抛出异常处理的详细内容在学习java时学习过,但没有深入理解,我觉得需要补充一下。
原文 https://www.maiyewang.com/archives/93830