新人求教:关于ibatis的SqlMapClient,怎么避免异常声明?
比如一个接口
public interface Facade{
public boolean Login(String username,String password);
}
一个实现(通过Spring注入一个SqlMapClient):
class FacadeImpl implements Facade{
private SqlMapClient Mapper;
public boolean Login(String username,String password){
HashMap map ....此处省略,主要是把参数放进去
return Mapper.QueryForObject("test",map)==null;
}
}
问题来了,MyEclipse5.1GA报错,说SqlMapClient的QueryForObject方法声明了异常
SQLException抛出,
必须在Login方法上同样声明抛出此类异常,这倒也ok,问题是后面又说接口也要声明异常,这就痛苦了,
难道我的每个接口的方法一涉及到数据库就得声明这个异常吗?感觉太不人性化了啊,我看过另一个项目的源代码,人家的Service接口就从来没有声明过throws,这是怎么回事,他用了SqlClientTempla以及support等iBatis提示不建议使用的类,我都糊涂了,求好心人解惑,非常感谢!!!!
------解决方案--------------------正确的处理
异常抛出异常是个好习惯,如果sql语句出错了也没有异常怎么debug
千万别出现
try{
...
}catch(Exception e){
//最差劲也要throw
}
当然 你也可以写一个 baseService 把QueryForObject 这些方法重新封装一下 然后里面都
try{
Mapper.QueryForObject...
}catch(Exception e){
e.printStackTrace();
}
不过不建议这么做,如果有事物的话不会回滚,后续还有其他操作的话不会中断。可能遇到意想不到的结果那时候就会很欢乐
------解决方案--------------------
我们也用ssi框架都要抛出异常,分系统异常和业务异常,我觉得还是让spring帮你写代码比较好,service层如果不抛异常的话spring配置的事物就不起作用,接口声明怎么会与实现无关。异常不抛出的话调用者就不能捕获。习惯了就好了,写代码的时候 throws XXException 都是下意识打出来的不打都会觉得别扭