Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果使用带注释的MyBatis发生MySql错误,则引发自己的自定义异常_Java_Sql_Mybatis_Psql - Fatal编程技术网

Java 如果使用带注释的MyBatis发生MySql错误,则引发自己的自定义异常

Java 如果使用带注释的MyBatis发生MySql错误,则引发自己的自定义异常,java,sql,mybatis,psql,Java,Sql,Mybatis,Psql,这是我的问题。我使用mybatis使用注释。为此,我创建了自己的mybatis接口,现在如果执行查询时出现任何错误,我想抛出自己的自定义异常。这是我的确切意思 考虑以下用于封装一些SQL查询的接口: public interface MyMapper { @Select("SELECT id, title, description, creationDate, modificationDate, owner_id AS \"owner.id\" " + " FR

这是我的问题。我使用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。只有例外和例外

首先,我将在DAO实例中包装对MyMapper的每个调用,并在特定位置保留异常层次结构(ExceptionHandler):

try/catch子句可能会在每个方法中重复,因此可以选择使用Java代理或重构异常处理功能。
可以使用加载时编织和围绕映射器本身而不是DAO进行编织。但我还是希望DAO给自己留出扩展功能的空间。
关于异常层次结构,MyBatis已经有了自己的异常。在您使用Spring的情况下,它有自己的数据访问异常层次结构,所以您可以尝试MyBatis-Spring集成。但作为状态,基本DataAccessException是

Expert中讨论的数据访问异常层次结构的根 一对一J2EE设计与开发

因此,您可以尝试在前面提到的书的基础上实现类似的东西

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);
        }
    }
}