mybatis 中mapper 的namespace有什麼用?

AlbenXie發表於2018-09-16

我自己定義的一個sql語句配置 可是我不懂這裡的namespace有什麼用

<mapper namespace="com.myweb.domain.Article">
    <select id="selectAllArticle" resultType="article">
            SELECT t.* FROM T_article t WHERE t.flag = '1' ORDER BY t.createtime DESC
     </select>


第二個與之相關的問題 我定義的實現類

@Repository
public class ArticleDaoImpl implements ArticleDao {
    
    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;
    public List<Article> findAll() {
        return sqlSessionTemplate.selectList("selectAllArticle");
    }
}


請問 sqlSessionTemplate.selectList("selectAllArticle"); 為什麼會呼叫Artice.xml檔案的selectAllArticle,是根據ID呼叫的嗎?  

如果在其他XMl檔案採用一樣的 id為 selectAllArticle 那程式應該會呼叫哪個? 我想應該會報錯,所以想問一下這裡namespace的作用。

我現在把namespace改成任意的一個值比如com.myweb.domain.aa 程式也不會出錯。
查閱了mybatis的相關文件說:名稱空間使得介面繫結成為可能 。可是在這裡應該如何理解,請高手幫忙解釋一下。

 

答:

在mybatis中,對映檔案中的namespace是用於繫結Dao介面的即面向介面程式設計
當你的namespace繫結介面後,你可以不用寫介面實現類,mybatis會通過該繫結自動、幫你找到對應要執行的SQL語句,如下:
假設定義了IArticeDAO介面

public interface IArticleDAO
{
   List<Article> selectAllArticle();
}


對於對映檔案如下:

<mapper namespace="IArticleDAO">
    <select id="selectAllArticle" resultType="article">
            SELECT t.* FROM T_article t WHERE t.flag = '1' ORDER BY t.createtime DESC
     </select>


注意介面中的方法與對映檔案中的SQL語句的ID一 一對應
則在程式碼中可以直接使用IArticeDAO面向介面程式設計而不需要再編寫實現類。

相關文章