日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

【IBatis.Net】 各种配置说明

發(fā)布時(shí)間:2025/3/8 asp.net 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【IBatis.Net】 各种配置说明 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、各個(gè)配置文件的作用說明

  providers.config:指定數(shù)據(jù)庫提供者,.Net版本等信息。

  xxxxx.xml:映射規(guī)則。

  SqlMap.config:大部分配置一般都在這里,如數(shù)據(jù)庫連接等等。

二、默認(rèn)配置文件的存放位置

  在Windows應(yīng)用項(xiàng)目或者類庫項(xiàng)目中,需要放在項(xiàng)目的/bin/debug/目錄下。

  在Web應(yīng)用程序中,需要放在應(yīng)用程序根目錄。

  當(dāng)然,這也不是強(qiáng)制性的,也可以很靈活地配置

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); //這個(gè)"SelectAllPerson"就是xml映射文件的Idreturn ListPerson;}

  例如以上代碼,就從指定的位置去加載了SqlMap.config。注意,雖然SqlMap.config是從指定的位置,但是要注意里面的resource引入的資源,還是從原來的默認(rèn)目錄開始找,例如

<providers resource="providers.config"/>

  SqlMap.config里面的providers.config這個(gè)東西,還是需要在原來默認(rèn)位置。

三、SqlMap.config

  下面先放上一個(gè)在官網(wǎng)直接下載后的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>

  1、properties節(jié)點(diǎn)

  properties節(jié)點(diǎn)通常用于引入在外部定義一些鍵值對配置文件,以方便在后面統(tǒng)一調(diào)用,這樣修改的時(shí)候,只修改就可以了。

  它的引入方式有3種:

  •   resource: 通過相對路徑來確定文件的位置。
  •   url:   ? 通過絕對路徑來確定文件位置。
  •   embedded:通過嵌入資源方式來確定文件位置。

  <sqlMap embedded = "命名空間.文件名.后綴名, 命名空間"/>

  例如,你在外部的config文件中,定義了一個(gè)數(shù)據(jù)庫連接

<?xml version="1.0" encoding="utf-8" ?> <setting><add key="connectionString" value="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/> </setting>

  這樣在SqlMap.config文件就可以這樣寫:

<!--數(shù)據(jù)庫連接字符串--><database><provider name="sqlServer2008"/><dataSource name="Test" connectionString="${DataSource}"/></database>

  2、Settings節(jié)點(diǎn)

  Settings節(jié)點(diǎn)里,可以配置以下5個(gè)信息:

  • useStatementNamespaces:默認(rèn)flase,是否使用全局完整命名空間。
  • cacheModelsEnabled :默認(rèn)true,是否啟用緩存。
  • validateSqlMap:默認(rèn)false,使用啟用SqlMapConfig.xsd來驗(yàn)證映射XML文件。
  • useReflectionOptimizer:默認(rèn)true,是否使用反射機(jī)制訪問C#中對象的屬性。
  • useEmbedStatementParams 是否使用嵌入的方式聲明可變參數(shù)

  示例:

<settings><setting useStatementNamespaces="false"/>  --使用全局完整命名空間</settings>

  使用全局命名空間時(shí),不同的xml映射文件,id互不影響。如果出現(xiàn)提示出現(xiàn) 重復(fù)的sql Id的情況,大多是沒啟用。如果啟用,則執(zhí)行sql語句時(shí),要用命名空間.id的方式。這個(gè)理所當(dāng)然要啟用的。區(qū)分清楚點(diǎn)好,否則很容易出現(xiàn)xml 的 sql id重復(fù)的情況。

  3、Providers節(jié)點(diǎn)

  示例:

<providers resource="providers.config"/>

  這里使用引入外部配置文件的方式實(shí)現(xiàn)。

  4、alias節(jié)點(diǎn)

  alias節(jié)點(diǎn)用于為類指定一個(gè)別名,通常用于為一些很長的類名指定一個(gè)別名,這樣可以減少一些代碼。

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

  以上代碼的意思是,為iBatis.Domain.Person類指定一個(gè)別名Person。Person就代表iBatis.Domain.Person這個(gè)類。

  起初我以為別名只是起了縮短配置類的作用,但后來我發(fā)現(xiàn)別名是還有其他作用的,它還指明了IBatis.net應(yīng)該到哪個(gè)程序集去找實(shí)體類。

  如果程序偶爾報(bào)如下錯誤,那么你就要考慮加上別名了。

  “/”應(yīng)用程序中的服務(wù)器錯誤。

  Could not load type from string value 'xxx'

<alias><typeAlias alias="Field" type="Nx.Domain.Common.Field, Nx.Domain" /> </alias>

  Ibatis.Net有很多默認(rèn)的別名:

  

  5、database節(jié)點(diǎn)

  指定一個(gè)你選擇使用的數(shù)據(jù)庫,和數(shù)據(jù)庫連接。

  示例:

<database><provider name="sqlServer2008"/><dataSource name="Test" connectionString="server=KISSDODOG-PC;uid=sa;pwd=123;database=Test"/></database>

  6、SqlMaps節(jié)點(diǎn)

  SqlMaps節(jié)點(diǎn),用于配置映射信息。通常在映射信息寫在外部,在這個(gè)節(jié)點(diǎn)引入。

四、映射文件

  映射文件與NHibernate類似,都是指定哪個(gè)屬性名,對于哪個(gè)列名。不過貌似沒有NHibernate那么復(fù)雜,東西貌似不多,不過也可能只是我了解得太少。

  下面來看看省略的寫法(當(dāng)property與column完全相同時(shí),可以這樣寫):

<?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節(jié)點(diǎn)所用,Class實(shí)體類所在位置--><result property="PersonId" column="Id"/> <!--property實(shí)體類的屬性名,column對應(yīng)的列名--><result property="PersonName" column="Name"/></resultMap></resultMaps><statements><select id="SelectAllPerson" resultMap="Person"> <!--id在程序中會被SqlMapper實(shí)體類所調(diào)用,resultMap就是resultMap節(jié)點(diǎn)的id-->select * from person</select></statements> </sqlMap>

  resultMaps部分:定義了數(shù)據(jù)庫字段名與實(shí)體類屬性名之間的關(guān)系。當(dāng)然,如果你數(shù)據(jù)庫字段名與實(shí)體類屬性名完全一樣,那么resultMaps部分是可以省略的。另外要注意一點(diǎn),ResultMap的列比你查詢的列不能少,也不能多。它不會說,ResultMap里映射的列多了,該屬性就自動將select返回的列自動置null,而是直接所有列都不映射賦值。也就是說,Person表有Id,Name,Age3列,如果你只想要SELECT兩個(gè)列(Id,Name),那么ResultMap里面的3列映射沒用了,你必須另外搞一個(gè)ResulpMap只映射兩列的。不爽。

  statements部分:用于定義你需要執(zhí)行的語句,在程序中通過select的id調(diào)用。

?

屬性

說明

parameterMap

參數(shù)映射,需結(jié)合parameterMap節(jié)點(diǎn)對映射關(guān)系加以定義,對于存儲過程之外的statement而言,建議使用parameterClass作為參數(shù)配置方式,一方面避免了參數(shù)映射配置工作,另一方面其性能表現(xiàn)更加出色

parameterClass

參數(shù)類。指定了參數(shù)類型的完整類名(包括命名空間),可以通過別名避免每次書寫冗長的類名

resultMap

結(jié)果映射,需結(jié)合resultMap節(jié)點(diǎn)對映射關(guān)系加以定義

resultClass

結(jié)果類。指定了結(jié)果類型的完整類名(包括命名空間),可以通過別名避免每次書寫冗長的類名

cacheModel

Statement對應(yīng)的Cache模塊

extends

重復(fù)使用SQL子句

  1、extends

  extends用于提取一段重復(fù)使用的SQL語句而避免重復(fù)書寫

<select id="SelectAllCustomers" resultMap="Customer">SELECT * FROM Customers </select><select id="SelectAllCustomerOrderByCustomerID" resultMap="Customer" extends="SelectAllCustomers">ORDER BY CustomerID </select>

  2、parameterMap的屬性

  它可以接受三個(gè)屬性,id/class/extends,其中是有id是必須的,class用于聲明使用的實(shí)體類名稱,可以是別名,也可以是全名,extends,可想而知,不解釋
在它下一級節(jié)點(diǎn)中應(yīng)該包含若干個(gè)parameter元素,來指定對象屬性與當(dāng)前變量的映射規(guī)則,parameter有如下常用屬性:

  • property:指定類中的一個(gè)屬性
  • columu:定義的參數(shù)名稱
  • direction:用于聲明存儲過程的參數(shù)方向(input,output,inputoutput)
  • dbType:用于指定property映射到數(shù)據(jù)庫中的數(shù)據(jù)類型
  • type:用于為參數(shù)的對象指定CLR類型
  • nullValue:指定在property為何值時(shí),將會在存儲數(shù)據(jù)時(shí)候,替換為null,這是經(jīng)常會被用到的
  • size:用于指定最大值
  •   3、resultMap的屬性

      它的屬性很多是和parameterMap想對應(yīng)的,但是值得一提的是它下面可以添加一個(gè)constructor元素來匹配一個(gè)構(gòu)造函數(shù)。當(dāng)然,這個(gè)的前提是Customers類中有這樣一個(gè)構(gòu)造函數(shù)。例如:

    <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>

      4、存儲過程

      這里有一點(diǎn)區(qū)別就是,只可以使用parameterMap,而不可以使用parameterClass,其實(shí)想一想,您難道還會為每一個(gè)存儲過程定義個(gè)傳入的實(shí)體類嗎?還有一點(diǎn),就是他的參數(shù)完全是按照 parameterMap中的定義自動匹配的。

    <procedure id="demoProcedure" parameterMap="procedureDemo">CustOrderHist </procedure>

    ?

      5、對SQL片段的引用

      在編寫SqlMaps的時(shí)候,經(jīng)常需要把一個(gè)SQL語句進(jìn)行拆分,然后在不通的地方引用它我們可以使用sql和include的組合來完成。

    <sql id="order">ORDER BY PersonID </sql>
    <select id="SelectAllCustomerOrderByCustomerID" resultMap="Customer">SELECT * FROM Person<include refid="test"/> </select>

    ?



    ?

    五、$與#的區(qū)別

      • SELECT * FROM TABLE WHERE Id = #id#?其中如果字段id為字符串類型,那么#id#表示的就是'id',也就是說會自動加引號。如果id為整型,那么#id#就是整型;
      • SELECT * FROM TABLE WHERE Id =?$id$ ,如果字段id為整型,Sql語句就不會出錯,但是如果字段id為字符串類型,那么Sql語句應(yīng)該寫成 SELECT * FROM TABLE WHERE Id =?'$id$',否則會出錯,因?yàn)樗粫詣釉黾訂我枴?/li>

    ?

    ?

    轉(zhuǎn)載自?http://www.cnblogs.com/kissdodog/p/3293381.html

    轉(zhuǎn)載于:https://www.cnblogs.com/qifei-jia/p/8033486.html

    總結(jié)

    以上是生活随笔為你收集整理的【IBatis.Net】 各种配置说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。