继承我的问题。我正在使用mybatis使用注释。为此,我创建了自己的mybatis接口,现在我想抛出自己的自定义异常,如果执行查询出错。这是代码形式我的意思。
考虑我用来封装一些SQL查询的以下接口:
public interface MyMapper {
@Select("SELECT id, title, description, creationDate, modificationDate, owner_id AS \"owner.id\" "
+ " FROM article WHERE article_id = #{id}")
Article getArticle(int id);//If this fails I want my own custom Exception to be thrown
}
如果我的查询有问题,或者以某种方式执行getArticle(int id)失败,我希望它抛出我自己的自定义异常而不是IBatisException。如果不可能,有人可以建议树层次结构异常因为知道树的层次结构也会帮助我知道我可以捕获的所有异常。不幸的是,如果出现问题,我甚至无法捕获SqlException。只有IBatisException和Exception。
答案 0 :(得分:2)
首先,我在DAO实例中包装对MyMapper的每次调用,并在特定位置保留异常层次结构(ExceptionHandler):
public class MyDAO {
MyMapper mapper;
public Article getArticle(int id) {
try {
return mapper.getArticle(id);
} catch (PersistenceException e) {//IbatisException is deprecated
throw ExceptionHandler.handle(e);
}
}
}
try / catch子句可能会在每个方法中重复,因此使用Java代理或AspectJ重构异常处理功能可能是一种选择。
有可能使用加载时间编织和编织映射器本身而不是DAO。但是,我更倾向于让DAO留下自己扩展功能的空间
关于异常层次结构MyBatis已经拥有它自己的异常hierarchy。如果您使用的是Spring,它拥有自己的数据访问异常层次结构,因此您可以尝试MyBatis-Spring集成。但是当documentation状态时,基础DataAccessException是
Expert中讨论的数据访问异常层次结构的根 一对一的J2EE设计和开发
因此,您可能会尝试根据上述内容实施类似的内容。