providers.config:指定數據庫提供者,.Net版本等信息。html
xxxxx.xml:映射規則。sql
SqlMap.config:大部分配置通常都在這裏,如數據庫鏈接等等。數據庫
在Windows應用項目或者類庫項目中,須要放在項目的/bin/debug/目錄下。apache
在Web應用程序中,須要放在應用程序根目錄。緩存
固然,這也不是強制性的,也能夠很靈活地配置服務器
public IList<PersonModel> GetList() { //ISqlMapper mapper = Mapper.Instance(); DomSqlMapBuilder builder = new DomSqlMapBuilder(); ISqlMapper mapper = builder.Configure(@"C:\Users\Administrator\Desktop\Ibatis.Net測試\Ibatis.Net測試\SqlMap.config"); IList<PersonModel> ListPerson = mapper.QueryForList<PersonModel>("SelectAllPerson", null); //這個"SelectAllPerson"就是xml映射文件的Id return ListPerson; }
例如以上代碼,就從指定的位置去加載了SqlMap.config。注意,雖然SqlMap.config是從指定的位置,可是要注意裏面的resource引入的資源,仍是從原來的默認目錄開始找,例如app
<providers resource="providers.config"/>
SqlMap.config裏面的providers.config這個東西,仍是須要在原來默認位置。ide
下面先放上一個在官網直接下載後的sample.SqlMap.config函數
<?xml version="1.0" encoding="utf-8"?> <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <properties resource="../../../Files/properties.config"/> <settings> <setting useStatementNamespaces="false"/> </settings> <providers resource="../../../Files/providers.config"/> <!-- Database connection information --> <database> <provider name="OleDb2.0"/> <dataSource name="Blogs" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=../../../Files/Blogs.mdb"/> </database> <sqlMaps> <sqlMap resource="../../../Files/Maps/Access/Post.xml" /> <sqlMap resource="../../../Files/Maps/Access/Blog.xml" /> <sqlMap resource="../../../Files/Maps/Access/Author.xml" /> </sqlMaps> </sqlMapConfig>
一、properties節點性能
properties節點一般用於引入在外部定義一些鍵值對配置文件,以方便在後面統一調用,這樣修改的時候,只修改就能夠了。
它的引入方式有3種:
<sqlMap embedded = "命名空間.文件名.後綴名, 命名空間"/>
例如,你在外部的config文件中,定義了一個數據庫鏈接
<?xml version="1.0" encoding="utf-8" ?> <setting> <add key="connectionString" value="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/> </setting>
這樣在SqlMap.config文件就能夠這樣寫:
<!--數據庫鏈接字符串--> <database> <provider name="sqlServer2008"/> <dataSource name="Test" connectionString="${DataSource}"/> </database>
二、Settings節點
Settings節點裏,能夠配置如下5個信息:
示例:
<settings> <setting useStatementNamespaces="false"/> --使用全局完整命名空間 </settings>
使用全局命名空間時,不一樣的xml映射文件,id互不影響。若是出現提示出現 重複的sql Id的狀況,大可能是沒啓用。若是啓用,則執行sql語句時,要用命名空間.id的方式。這個理所固然要啓用的。區分清楚點好,不然很容易出現xml 的 sql id重複的狀況。
三、Providers節點
示例:
<providers resource="providers.config"/>
這裏使用引入外部配置文件的方式實現。
四、alias節點
alias節點用於爲類指定一個別名,一般用於爲一些很長的類名指定一個別名,這樣能夠減小一些代碼。
<typeAlias alias="Person" type="iBatis.Domain.Person,iBatisSample"/>
以上代碼的意思是,爲iBatis.Domain.Person類指定一個別名Person。Person就表明iBatis.Domain.Person這個類。
起初我覺得別名只是起了縮短配置類的做用,但後來我發現別名是還有其餘做用的,它還指明瞭IBatis.net應該到哪一個程序集去找實體類。
若是程序偶爾報以下錯誤,那麼你就要考慮加上別名了。
「/」應用程序中的服務器錯誤。
Could not load type from string value 'xxx'
<alias> <typeAlias alias="Field" type="Nx.Domain.Common.Field, Nx.Domain" /> </alias>
Ibatis.Net有不少默認的別名:
五、database節點
指定一個你選擇使用的數據庫,和數據庫鏈接。
示例:
<database> <provider name="sqlServer2008"/> <dataSource name="Test" connectionString="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/> </database>
六、SqlMaps節點
SqlMaps節點,用於配置映射信息。一般在映射信息寫在外部,在這個節點引入。
映射文件與NHibernate相似,都是指定哪一個屬性名,對於哪一個列名。不過貌似沒有NHibernate那麼複雜,東西貌似很少,不過也可能只是我瞭解得太少。
下面來看看省略的寫法(當property與column徹底相同時,能夠這樣寫):
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="Ibatis" xmlns="http://ibatis.apache.org/mapping" xmlns:xls="http://www.w3.org/2001/XMLSchema-instance"> <statements> <select id="SelectAllPerson" resultClass="Ibatis.Net.Domain.PersonModel"> select * from person </select> </statements> </sqlMap>
下面再來看看所有寫全的寫法,爲了展現不一樣,我將Id和Name的屬性名改成PersonId,PersonName:
<?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="Ibatis" xmlns="http://ibatis.apache.org/mapping" xmlns:xls="http://www.w3.org/2001/XMLSchema-instance"> <resultMaps> <resultMap id="Person" Class="Ibatis.Net.Domain.PersonModel"> <!--id會被statements節點所用,Class實體類所在位置--> <result property="PersonId" column="Id"/> <!--property實體類的屬性名,column對應的列名--> <result property="PersonName" column="Name"/> </resultMap> </resultMaps> <statements> <select id="SelectAllPerson" resultMap="Person"> <!--id在程序中會被SqlMapper實體類所調用,resultMap就是resultMap節點的id--> select * from person </select> </statements> </sqlMap>
resultMaps部分:定義了數據庫字段名與實體類屬性名之間的關係。固然,若是你數據庫字段名與實體類屬性名徹底同樣,那麼resultMaps部分是能夠省略的。另外要注意一點,ResultMap的列比你查詢的列不能少,也不能多。它不會說,ResultMap裏映射的列多了,該屬性就自動將select返回的列自動置null,而是直接全部列都不映射賦值。也就是說,Person表有Id,Name,Age3列,若是你只想要SELECT兩個列(Id,Name),那麼ResultMap裏面的3列映射沒用了,你必須另外搞一個ResulpMap只映射兩列的。不爽。
statements部分:用於定義你須要執行的語句,在程序中經過select的id調用。
屬性 |
說明 |
parameterMap |
參數映射,需結合parameterMap節點對映射關係加以定義,對於存儲過程以外的statement而言,建議使用parameterClass做爲參數配置方式,一方面避免了參數映射配置工做,另外一方面其性能表現更加出色 |
parameterClass |
參數類。指定了參數類型的完整類名(包括命名空間),能夠經過別名避免每次書寫冗長的類名 |
resultMap |
結果映射,需結合resultMap節點對映射關係加以定義 |
resultClass |
結果類。指定告終果類型的完整類名(包括命名空間),能夠經過別名避免每次書寫冗長的類名 |
cacheModel |
Statement對應的Cache模塊 |
extends |
重複使用SQL子句 |
一、extends
extends用於提取一段重複使用的SQL語句而避免重複書寫
<select id="SelectAllCustomers" resultMap="Customer"> SELECT * FROM Customers </select> <select id="SelectAllCustomerOrderByCustomerID" resultMap="Customer" extends="SelectAllCustomers"> ORDER BY CustomerID </select>
二、parameterMap的屬性
它能夠接受三個屬性,id/class/extends,其中是有id是必須的,class用於聲明使用的實體類名稱,能夠是別名,也能夠是全名,extends,可想而知,不解釋
在它下一級節點中應該包含若干個parameter元素,來指定對象屬性與當前變量的映射規則,parameter有以下經常使用屬性:
三、resultMap的屬性
它的屬性不少是和parameterMap想對應的,可是值得一提的是它下面能夠添加一個constructor元素來匹配一個構造函數。固然,這個的前提是Customers類中有這樣一個構造函數。例如:
<resultMaps> <resultMap id="Customer" class="Customers"> <constructor> <argument argumentName="PersonId" column="PersonID"/> <argument argumentName="PersonName" column="PersonName"/> </constructor> <result property="PersonId" column="PersonID"/> <result property="PersonName" column="PersonName"/> </resultMap> </resultMaps>
四、存儲過程
這裏有一點區別就是,只可使用parameterMap,而不可使用parameterClass,其實想想,您難道還會爲每個存儲過程定義個傳入的實體類嗎?還有一點,就是他的參數徹底是按照 parameterMap中的定義自動匹配的。
<procedure id="demoProcedure" parameterMap="procedureDemo"> CustOrderHist </procedure>
五、對SQL片斷的引用
在編寫SqlMaps的時候,常常須要把一個SQL語句進行拆分,而後在不通的地方引用它咱們可使用sql和include的組合來完成。
<sql id="order"> ORDER BY PersonID </sql>
<select id="SelectAllCustomerOrderByCustomerID" resultMap="Customer"> SELECT * FROM Person <include refid="test"/> </select>
轉載自 http://www.cnblogs.com/kissdodog/p/3293381.html