mybatis.net – 3 mybatis.net 的命名空間問題

來源:互聯網
上載者:User

在上一篇的對應檔中,Maps/ProductMap.xml 配置元素的根項目的開始標記如下所示:

<sqlMap namespace="EntityModel" xmlns="http://ibatis.apache.org/mapping"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

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 陳述式了。比如,原來的語句就需要修改為如下所示的代碼了。

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.