mybatis名稱空間namespace注意
阿新 • • 發佈:2019-02-15
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);