簡體   English   中英

拋出自己的自定義異常如果使用MyBatis和注釋時發生MySql錯誤

[英]Throw own custom exception If MySql error occurs using MyBatis with annotations

這是我的問題。 我正在使用帶有注釋的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。

首先,將每個對MyMapper的調用包裝在DAO實例中,並將異常層次結構放在特定的位置(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已經擁有自己的異常層次 如果您使用的是Spring,它具有自己的數據訪問異常層次結構,因此您可以嘗試MyBatis-Spring集成。 但正如文檔所述,基本DataAccessException是

專家一對一J2EE設計和開發中討論的數據訪問異常層次結構的根源

因此,您可以嘗試根據上述書籍實施類似的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM