1. 程式人生 > 其它 >iBatis.Net(2):基本概念與配置

iBatis.Net(2):基本概念與配置

寫完第一篇,有朋友給我發郵件,說想讓我配合例項寫會不會更好一些,可是呢,我覺得這就相當於那些北大的什麼鳥給無辜的孩子們吃快餐一樣,我是堅決反對那樣的,知其然不知其所以然,可能你當下可以從那裡學點東西然後找到個工作,但是那樣的知識體系是不適合我們發展的,當然了,這也是小白的個人觀點,畢竟人那什麼鳥比我飛的漂亮的多,至於iBatis這東西,說簡單不簡單,說難不難,很多基礎的概念配置的東西,還是很有必要研究一下的,至於他的使用倒是很簡單,所以也希望朋友們能真正吃透他,您的功力如何,並不在於您有多麼鋒利的武器,而在於您能把它的鋒利發揮到一個什麼程度,好了    閒話少說,書歸正傳

iBaits的配置是以SqlMap.config的XML描述為核心,該檔案提供了詳細的資料來源配置,資料對映以及一些其他的配置,在程式執行的時候,這個檔案將首先被分析,確定資料庫提供者,資料來源等等的內容,然後返回一個應用程式中的DataMapper物件,sqlMapper類是DataMapper框架的核心,他是程式與DataMapper框架的API,通過建立SqlMapper類完成DataMapper客戶的建立,每種配置檔案對應一個數據源,但是在一個應用程式中可以使用多個DataMapper客戶,通過建立多個配置檔案,並在初始化DataMapper客戶的時候把配置檔名作為引數傳入,就可以在一個應用程式中使用多個DataMapper客戶,對於多個DataMapper客戶應用程式的這些配置來說,可以使用不通的配置命名,而資料來源卻是同一個資料庫,這是完全可以的

勘誤:在上一篇中我把xsd檔案的存放路徑寫錯啦,正確的應該是 “VS2008安裝路徑XmlSchemas ”,其他版本的VS我沒有注意過有沒有區別,大家可以自己試一下啦,如果找不到的話可以@我

SqlMap.config配置

在整個iBatis應用中,這個檔案起著一箇中樞的作用,是最關鍵的一個配置檔案,這一篇我主要寫一下他詳細的配置方式,這裡我先給出一個示例,然後詳細的解釋一下他的配置方式

<?xml version="1.0" encoding="utf-8"?>
<sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <properties>
    <property resource="DataAccessInfo.config"/>
  </properties>
  
  <settings>
    <setting useStatementNamespaces="false"/>
    <setting cacheModelsEnabled="true"/>
    <setting validateSqlMap="false"/>
  </settings>
  
  <providers embedded="providers.cinfig"/>
  
    <!-- Database connection information -->
    <database>
        <provider name="sqlServer2005"/>
        <dataSource name="NorthWind" connectionString="Data Source=${DataSource};Initial Catalog=aspnetdb;Persist Security Info=True;User ID=sa;Password=123123."/>
    </database>
  <alias>
    <typeAlias alias="Customers" type="iBatisSample.Domain.Customers,iBatisSample"/>
    
  </alias>
    <sqlMaps>
            <sqlMap resource="Maps/Customers.xml" />
    <sqlMap resource="Maps/Orders.xml"/>
    </sqlMaps>

</sqlMapConfig>

在你的iBatis元件包裡,你應該可以找到一個sample.sqlmap.config的檔案,這是一個示例性的檔案

首先properties節點,在它下面可以定義若干個property節點來引用檔案或者配置一些鍵值對,這些,這些鍵值對或者引用檔案中的鍵值對會在所有的配置中經常使用,而也會有頻繁更改的可能,比如資料庫連線串,所以我們就可以把它定義為一個鍵值對,或者定義在引用的檔案裡,起到統一管理的作用,引用的方式有以下三種

resource:通過相對路徑來確定檔案的位置

url:通過絕對路徑來確定檔案位置

embedded:通過嵌入資源方式來確定檔案位置

被引用的檔案示例如下(DataAccessInfo.config)

<?xml version="1.0" encoding="utf-8" ?>
<setting>
  <add key="DataSource" value="XIAOYAOJIAN"/>
</setting>

這樣我們就可以使用“${DataSource}”的方式在其他位置使用它了,而要更改他的值的時候,只許要更改一處

然後是Settings節點,在這個節點裡,可以設定一些iBatis的屬性,根據我們專案的需求,分別配置,達到我們對DataMapper的最優化,我們可以新增的設定項和含義我下面給出

useStatementNamespaces

預設為false,如果為true在程式中通過名稱訪問資料查詢語句的時候,需要使用他的全域性完整名稱空間

cacheModelsEnabled

預設為true ,是否啟動快取,這只是一個全域性設定,也就是說還可以在以後臨時更改

validateSqlMap

預設為false,是否啟用SqlMapConfig.xsd來驗證工程中的對映檔案

useReflectionOptimizer

預設為true,是否使用c#的reflection機制來訪問c#中物件的屬性

useEmbedStatementParams

這個我暫時還不知道是什麼意思#24

然後是providers節點,這個節點定義了我麼需要使用的資料庫提供者和資料庫提供者的連線資訊,說是“定義”倒不如說是“指定”,因為所有的“定義”都是在providers.config中,我們在SqlMap.config中只需要指定使用哪種資料庫和提供一些連線資訊就可以啦,不過不要忘記了在proviers.config把我們要使用的那種資料庫名後面緊跟著的enabled屬性設定為true,在SqlMap.config中指定的提供者名稱一定要與providers.config中的提供者名稱完全一致,例如,我在這裡使用的就是sqlServer2005,另外,也可以把providers.config中某個provider的default設定為true或者1,就不需要在SqlMap.config中指定要使用的提供者啦,不過這就只可以使用一種資料提供者啦,在iBatis中,提供了很多中資料庫提供者,已經完全可以滿足我們使用啦

接下來是alias節點,通過這個節點可以給一些很長的類名指定一個別名,這樣,在iBatis的使用過程中就省去和很多麻煩,讓我們的使用更方便也更直接,例如

<typeAlias alias="Customers" type="iBatisSample.Domain.Customers,iBatisSample"/>

這裡,我為我專案(iBatisSample)下的Domain下的Customers類指定了一個別名Customers,

在iBatis中,已經為我們預設了很多的別名,我們可以直接使用他們,同時在定義我們自己的別名的時候注意不要與預定義的重名,具體內容如下圖所示

接下來是database節點了,我想這個的意義就不用我說了吧,在這個節點下需要一個provider和一個datasource元素,如果我們使用預設的資料庫提供者,可以不新增這個provider元素,datasource元素用來確定資料來源連線字串,並給它指定一個名稱,在SqlMap.config中,可以有多個database節點,在最上面的示例用資料庫連線字串我通過${DataSource}的方式使用了我們在DataAccessInfo.config中的DataSource的值“XIAOYAOJIAN “

最後就是SqlMaps節點啦,在基於資料對映的情況下,應用程式的對映檔案定義了SQL語句和儲存過程,同時也定義了輸入引數和返回物件的型別,隨著應用程式的複雜化,我們就需要把很多對映檔案放在不同的檔案中分別管理和使用,所以就有了這個SqlMaps節點,在他下面可以有若干個<SqlMap/>節點來分別指定要引用的對映檔案,同樣引用方式也有三種  就是resource、url和embedded

至於對映檔案的配置和寫法,我會在下一篇以及以後配合例項講的,這一篇就寫到這裡啦