这是我的问题。我正在使用 mybatis 使用注释。为此,我创建了自己的 mybatis 接口(interface),现在如果执行查询出现任何问题,我想抛出自己的自定义异常。这是我的确切意思的代码形式。
考虑我用来封装一些 SQL 查询的以下接口(interface):
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。
最佳答案
首先,我将对 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 是
Root of the hierarchy of data access exceptions discussed in Expert One-On-One J2EE Design and Development
因此,您可能会尝试根据上述书籍实现类似的东西。
关于java - 使用带有注解的MyBatis如果发生MySql错误则抛出自己的自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24779906/