1. 程式人生 > >mybatis名稱空間namespace注意

mybatis名稱空間namespace注意

namespace 是什麼呢?是不是 C# 中的名稱空間呢?

其實不是的,這個名稱空間與對映檔案中的 statements 中配置的 SQL 語句的 id 有關。

在大型專案中,可能存在大量的 SQL 語句,這時候,為每個 SQL 語句起一個唯一的標識 id 就變得並不容易了。為了解決這個問題,在 mybatis 中,可以為每個對映檔案起一個唯一的名稱空間,這樣,定義在這個對映檔案中的每個 SQL 語句就成了定義在這個名稱空間中的一個 id。只要我們能夠保證每個名稱空間是唯一的,即使在不同對映檔案中的語句的 id 相同,也就不會衝突了。

與 C# 不同的是,這個通過名稱空間管理語句標識的機制預設並不啟用,也就是說,預設並不考慮我們定義的名稱空間,而是直接使用語句的 id 。

何時啟用名稱空間機制,取決於 SqlMap.config 配置檔案中定義的 useStatementNamespaces 配置引數的設定。此設定預設為 false.

<properties>
    <property key="useStatementNamespaces" value="false" />
</properties>


只有當這個引數設定為 true 的時候,名稱空間機制才會啟用,啟用之後,在程式碼中,就必須使用帶有名稱空間的標識來訪問 SQL 語句了。比如,原來的語句就需要修改為如下所示的程式碼了。

List<EntityModel.Product> productList
    = Mapper.QueryForList<EntityModel.Product>("EntityModel.GetAllProducts", null);