寫在前面的話:我自己也是一個初學者,寫這個專題只是為了對學過知識的鞏固,如果有什么不對的地方,歡迎大家指正……………………
第一篇就簡單介紹一下什么是IbatisNet,然后寫一個簡單的Demo,在后面再詳細介紹IbatisNet的工作原理和IbatisNet的優缺點。為什么按照這個順序呢?舉個簡單的例子來說,我現在給你一輛自行車,你不可能一上來就開始分析它是怎么運動的吧,你得首先會騎它,等你會騎了你才會發現這個車子怎么好,怎么不好。這樣你才有資格說它有什么優點,有什么缺點,好了, 不廢話了,首先介紹一下什么是IbatisNet:
應該有很多人都聽說過Ibatis吧,沒錯IbatisNet就是Ibatis在.net上的一個移植版本,所以它們倆基本是差不多的。所以IbatisNet自然也是一個輕量級的ORM框架,於是我們又想起來了hibnate和Nhibnate,它們也是一個輕量級的ORM實體框架(關於IbatisNet和Nhibnate的優缺點我就不介紹了,如果想了解可以看這篇博客ibatis VS hibernate 經典論述http://www.cnblogs.com/tjsquall/archive/2009/06/23/1508977.html)不過嚴格的來說IbatisNet並不是一種很正統的ORM解決方案。因為它不像NHibernate那樣,具備全自動的數據操作,包括查詢,插入,更新,刪除,也沒有像它那樣,與數據庫的約束關系有緊密的聯系。IbatisNet為我們提供了一種更為靈活的方便的可控的方式去實現類似與ORM的解決方案,在這里我們需要自己寫全部的Sql語句,這樣有好處也有壞處,好處是:
1,允許sql以最自然的方式書寫,沒有字符串拼接,沒有參數設置,沒有結果獲取。對應用程序的代碼沒有任何的影響。
2,支持對存儲過程的直接調用,業務邏輯從數據庫中分離出來,程序有更強的移植性。
3,IbatisNet有許多o/rm工具一樣的特性,高速緩存,運行時生成代碼,延遲加載等。(貌似不是寫sql語句的好處…………)
4,IbatisNet支持動態sql來處理查詢。
最大的缺點就是我們還需要編寫大量的sql語句,但是值得感到高興的是,我們只需要提供這些SQL語句,和為它提供它所需的參數外,接下來的事情就無需我們參與了。這也是iBatis最核心的功能,它會根據具體傳進來的參數值,動態生成一條可執行的SQL語句並且為這些SQL參數提供不同的具體值。然后根據配置好的數據訪問驅動,自動為DbCommand添加DbParameter,自動執行SQL語句,使用IDataReader返回出數據集,生成並返回一個或多個強類型數據類對象。好了,介紹就先介紹到這兒吧,下面直接來個Demo吧,估計還是看着代碼爽…………
一, 准備工作
軟件下載
下載地址:http://code.google.com/p/mybatisnet/downloads/list?can=1
二,開始編碼
1, 首先我們要引用IbatisNet的兩個DLL文件(創建項目和創建數據庫我就不說了)他們分別是:
2,添加IbatisNet默認的配置文件sqlmap.config和database.config和providers.config
首先簡單介紹一下database.config

1 <?xml version="1.0" encoding="utf-8" ?> 2 <settings> 3 <!-- 用戶的數據庫連接在這里設置--> 4 <add key="userid" value="sa" /> 5 <add key="password" value="805072" /> 6 <add key="database" value="ibatisdata" /> 7 <add key="datasource" value="." /> 8 <add key="selectKey" value="select @@IDENTITY as value" /> 9 <add key="directory" value="Maps" /> 10 <add key="useStatementNamespaces" value="false" /> 11 <add key="provider" value="sqlServer2.0" /> 12 </settings>
這個配置文件主要是配置數據庫的連接,它是以鍵值對的形式存在。
再來簡單介紹一下providers.config

1 <?xml version="1.0" encoding="utf-8"?> 2 <providers 3 xmlns="http://ibatis.apache.org/providers" 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 5 6 <clear/> 7 <provider 8 name="sqlServer1.0" 9 description="Microsoft SQL Server 7.0/2000, provider V1.0.3300.0 in framework .NET V1.0" 10 enabled="true" 11 assemblyName="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection" 12 commandClass="System.Data.SqlClient.SqlCommand" 13 parameterClass="System.Data.SqlClient.SqlParameter" 14 parameterDbTypeClass="System.Data.SqlDbType" 15 parameterDbTypeProperty="SqlDbType" 16 dataAdapterClass="System.Data.SqlClient.SqlDataAdapter" 17 commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder" 18 usePositionalParameters="false" 19 useParameterPrefixInSql="true" 20 useParameterPrefixInParameter="true" 21 parameterPrefix="@"/> 22 <provider 23 name="sqlServer1.1" 24 description="Microsoft SQL Server 7.0/2000, provider V1.0.5000.0 in framework .NET V1.1" 25 enabled="true" 26 default="true" 27 assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.SqlClient.SqlConnection" 28 commandClass="System.Data.SqlClient.SqlCommand" 29 parameterClass="System.Data.SqlClient.SqlParameter" 30 parameterDbTypeClass="System.Data.SqlDbType" 31 parameterDbTypeProperty="SqlDbType" 32 dataAdapterClass="System.Data.SqlClient.SqlDataAdapter" 33 commandBuilderClass="System.Data.SqlClient.SqlCommandBuilder" 34 usePositionalParameters="false" 35 useParameterPrefixInSql="true" 36 useParameterPrefixInParameter="true" 37 parameterPrefix="@"/> 38 <provider 39 name="sqlServer2.0" 40 enabled="true" 41 description="Microsoft SQL Server 2005, provider V2.0.50215.0 in framework .NET V2.0" 42 assemblyName="System.Data, Version=2.0.50215.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 43 connectionClass="System.Data.SqlClient.SqlConnection" 44 commandClass="System.Data.SqlClient.SqlCommand" 45 parameterClass="System.Data.SqlClient.SqlParameter" 46 parameterDbTypeClass="System.Data.SqlDbType" 47 parameterDbTypeProperty="SqlDbType" 48 dataAdapterClass="System.Data.SqlClient.SqlDataAdapter" 49 commandBuilderClass=" System.Data.SqlClient.SqlCommandBuilder" 50 usePositionalParameters = "false" 51 useParameterPrefixInSql = "true" 52 useParameterPrefixInParameter = "true" 53 parameterPrefix="@" 54 /> 55 <provider name="OleDb1.1" 56 description="OleDb, provider V1.0.5000.0 in framework .NET V1.1" 57 enabled="true" 58 assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OleDb.OleDbConnection" 59 commandClass="System.Data.OleDb.OleDbCommand" 60 parameterClass="System.Data.OleDb.OleDbParameter" 61 parameterDbTypeClass="System.Data.OleDb.OleDbType" 62 parameterDbTypeProperty="OleDbType" 63 dataAdapterClass="System.Data.OleDb.OleDbDataAdapter" 64 commandBuilderClass="System.Data.OleDb.OleDbCommandBuilder" 65 usePositionalParameters="true" 66 useParameterPrefixInSql="false" 67 useParameterPrefixInParameter="false" 68 parameterPrefix=""/> 69 <provider 70 name="Odbc1.1" 71 description="Odbc, provider V1.0.5000.0 in framework .NET V1.1" 72 enabled="true" 73 assemblyName="System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.Odbc.OdbcConnection" 74 commandClass="System.Data.Odbc.OdbcCommand" 75 parameterClass="System.Data.Odbc.OdbcParameter" 76 parameterDbTypeClass="System.Data.Odbc.OdbcType" 77 parameterDbTypeProperty="OdbcType" 78 dataAdapterClass="System.Data.Odbc.OdbcDataAdapter" 79 commandBuilderClass="System.Data.Odbc.OdbcCommandBuilder" 80 usePositionalParameters="true" 81 useParameterPrefixInSql="false" 82 useParameterPrefixInParameter="false" 83 parameterPrefix="@"/> 84 <provider 85 name="oracle9.2" 86 description="Oracle, Oracle provider V9.2.0.401" 87 enabled="false" 88 assemblyName="Oracle.DataAccess, Version=9.2.0.401, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection" 89 commandClass="Oracle.DataAccess.Client.OracleCommand" 90 parameterClass="Oracle.DataAccess.Client.OracleParameter" 91 parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType" 92 parameterDbTypeProperty="OracleDbType" 93 dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter" 94 commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder" 95 usePositionalParameters="false" 96 useParameterPrefixInSql="true" 97 useParameterPrefixInParameter="false" 98 parameterPrefix=":" 99 useDeriveParameters="false"/> 100 <provider 101 name="oracle10.1" 102 description="Oracle, oracle provider V10.1.0.301" 103 enabled="false" 104 assemblyName="Oracle.DataAccess, Version=10.1.0.301, Culture=neutral, PublicKeyToken=89b483f429c47342" connectionClass="Oracle.DataAccess.Client.OracleConnection" 105 commandClass="Oracle.DataAccess.Client.OracleCommand" 106 parameterClass="Oracle.DataAccess.Client.OracleParameter" 107 parameterDbTypeClass="Oracle.DataAccess.Client.OracleDbType" 108 parameterDbTypeProperty="OracleDbType" 109 dataAdapterClass="Oracle.DataAccess.Client.OracleDataAdapter" 110 commandBuilderClass="Oracle.DataAccess.Client.OracleCommandBuilder" 111 usePositionalParameters="true" 112 useParameterPrefixInSql="true" 113 useParameterPrefixInParameter="true" 114 parameterPrefix=":" 115 useDeriveParameters="false"/> 116 <provider 117 name="oracleClient1.0" 118 description="Oracle, Microsoft provider V1.0.5000.0" 119 enabled="false" 120 assemblyName="System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" connectionClass="System.Data.OracleClient.OracleConnection" 121 commandClass="System.Data.OracleClient.OracleCommand" 122 parameterClass="System.Data.OracleClient.OracleParameter" 123 parameterDbTypeClass="System.Data.OracleClient.OracleType" 124 parameterDbTypeProperty="OracleType" 125 dataAdapterClass="System.Data.OracleClient.OracleDataAdapter" 126 commandBuilderClass="System.Data.OracleClient.OracleCommandBuilder" 127 usePositionalParameters="false" 128 useParameterPrefixInSql="true" 129 useParameterPrefixInParameter="false" 130 parameterPrefix=":"/> 131 <provider 132 name="ByteFx" 133 description="MySQL, ByteFx provider V0.7.6.15073" 134 enabled="false" 135 assemblyName="ByteFX.MySqlClient, Version=0.7.6.15073, Culture=neutral, PublicKeyToken=f2fef6fed1732fc1" connectionClass="ByteFX.Data.MySqlClient.MySqlConnection" 136 commandClass="ByteFX.Data.MySqlClient.MySqlCommand" 137 parameterClass="ByteFX.Data.MySqlClient.MySqlParameter" 138 parameterDbTypeClass="ByteFX.Data.MySqlClient.MySqlDbType" 139 parameterDbTypeProperty="MySqlDbType" 140 dataAdapterClass="ByteFX.Data.MySqlClient.MySqlDataAdapter" 141 commandBuilderClass="ByteFX.Data.MySqlClient.MySqlCommandBuilder" 142 usePositionalParameters="false" 143 useParameterPrefixInSql="true" 144 useParameterPrefixInParameter="true" 145 parameterPrefix="@"/> 146 <provider 147 name="MySql" 148 description="MySQL, MySQL provider V1.0.5.13785" 149 enabled="false" 150 assemblyName="MySql.Data, Version=1.0.5.13785, Culture=neutral, PublicKeyToken=c5687fc88969c44d" connectionClass="MySql.Data.MySqlClient.MySqlConnection" 151 commandClass="MySql.Data.MySqlClient.MySqlCommand" 152 parameterClass="MySql.Data.MySqlClient.MySqlParameter" 153 parameterDbTypeClass="MySql.Data.MySqlClient.MySqlDbType" 154 parameterDbTypeProperty="MySqlDbType" 155 dataAdapterClass="MySql.Data.MySqlClient.MySqlDataAdapter" 156 commandBuilderClass="MySql.Data.MySqlClient.MySqlCommandBuilder" 157 usePositionalParameters="false" 158 useParameterPrefixInSql="true" 159 useParameterPrefixInParameter="true" 160 parameterPrefix="?"/> 161 <provider name="SQLite3" 162 description="SQLite, SQLite.NET provider V0.21.1869.3794" 163 enabled="false" 164 assemblyName="SQLite.NET, Version=0.21.1869.3794, Culture=neutral, PublicKeyToken=c273bd375e695f9c" 165 connectionClass="Finisar.SQLite.SQLiteConnection" 166 commandClass="Finisar.SQLite.SQLiteCommand" 167 parameterClass="Finisar.SQLite.SQLiteParameter" 168 parameterDbTypeClass="System.Data.DbType, System.Data" 169 parameterDbTypeProperty="DbType" 170 dataAdapterClass="Finisar.SQLite.SQLiteDataAdapter" 171 commandBuilderClass="Finisar.SQLite.SQLiteCommandBuilder" 172 usePositionalParameters="false" 173 useParameterPrefixInSql="true" 174 useParameterPrefixInParameter="true" 175 parameterPrefix="@" 176 setDbParameterPrecision="false" 177 setDbParameterScale="false"/> 178 <provider 179 name="Firebird1.7" 180 description="Firebird, Firebird SQL .NET provider V1.7.0.33200" 181 enabled="false" 182 assemblyName="FirebirdSql.Data.Firebird, Version=1.7.0.33200, Culture=neutral, PublicKeyToken=fa843d180294369d" connectionClass="FirebirdSql.Data.Firebird.FbConnection" 183 commandClass="FirebirdSql.Data.Firebird.FbCommand" 184 parameterClass="FirebirdSql.Data.Firebird.FbParameter" 185 parameterDbTypeClass="FirebirdSql.Data.Firebird.FbDbType" 186 parameterDbTypeProperty="FbDbType" 187 dataAdapterClass="FirebirdSql.Data.Firebird.FbDataAdapter" 188 commandBuilderClass="FirebirdSql.Data.Firebird.FbCommandBuilder" 189 usePositionalParameters="false" 190 useParameterPrefixInSql="true" 191 useParameterPrefixInParameter="true" 192 parameterPrefix="@"/> 193 <provider 194 name="PostgreSql0.7" 195 description="PostgreSql, Npgsql provider V0.7.0.0" 196 enabled="false" 197 assemblyName="Npgsql, Version=0.7.0.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" 198 connectionClass="Npgsql.NpgsqlConnection" 199 commandClass="Npgsql.NpgsqlCommand" 200 parameterClass="Npgsql.NpgsqlParameter" 201 parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType" 202 parameterDbTypeProperty="NpgsqlDbType" 203 dataAdapterClass="Npgsql.NpgsqlDataAdapter" 204 commandBuilderClass="Npgsql.NpgsqlCommandBuilder" 205 usePositionalParameters="false" 206 useParameterPrefixInSql="true" 207 useParameterPrefixInParameter="true" 208 parameterPrefix=":"/> 209 <provider 210 name="PostgreSql0.7.1" 211 description="PostgreSql, Npgsql provider V0.7.1.0" 212 enabled="false" 213 assemblyName="Npgsql, Version=0.7.1.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" 214 connectionClass="Npgsql.NpgsqlConnection" 215 commandClass="Npgsql.NpgsqlCommand" 216 parameterClass="Npgsql.NpgsqlParameter" 217 parameterDbTypeClass="NpgsqlTypes.NpgsqlDbType" 218 parameterDbTypeProperty="NpgsqlDbType" 219 dataAdapterClass="Npgsql.NpgsqlDataAdapter" 220 commandBuilderClass="Npgsql.NpgsqlCommandBuilder" 221 usePositionalParameters="false" 222 useParameterPrefixInSql="true" 223 useParameterPrefixInParameter="true" 224 parameterPrefix=":"/> 225 <provider 226 name="iDb2.10" 227 description="IBM DB2 Provider, V 10.0" 228 enabled="false" 229 assemblyName="IBM.Data.DB2.iSeries, Version=10.0.0.0,Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26, Custom=null" connectionClass="IBM.Data.DB2.iSeries.iDB2Connection" 230 commandClass="IBM.Data.DB2.iSeries.iDB2Command" 231 parameterClass="IBM.Data.DB2.iSeries.iDB2Parameter" 232 parameterDbTypeClass="IBM.Data.DB2.iSeries.iDB2DbType" 233 parameterDbTypeProperty="iDB2DbType" 234 dataAdapterClass="IBM.Data.DB2.iSeries.iDB2DataAdapter" 235 commandBuilderClass="IBM.Data.DB2.iSeries.iDB2CommandBuilder" 236 usePositionalParameters="true" 237 useParameterPrefixInSql="false" 238 useParameterPrefixInParameter="false" 239 parameterPrefix=""/> 240 <provider 241 name="Informix" 242 description="Informix NET Provider, 2.81.0.0" 243 enabled="false" 244 assemblyName="IBM.Data.Informix, Version=2.81.0.0, Culture=neutral, PublicKeyToken=7c307b91aa13d208" 245 connectionClass="IBM.Data.Informix.IfxConnection" 246 commandClass="IBM.Data.Informix.IfxCommand" 247 parameterClass="IBM.Data.Informix.IfxParameter" 248 parameterDbTypeClass="IBM.Data.Informix.IfxType" 249 parameterDbTypeProperty="IfxType" 250 dataAdapterClass="IBM.Data.Informix.IfxDataAdapter" 251 commandBuilderClass="IBM.Data.Informix.IfxCommandBuilder" 252 usePositionalParameters = "true" 253 useParameterPrefixInSql = "false" 254 useParameterPrefixInParameter = "false" 255 useDeriveParameters="false" 256 /> 257 </providers>
該文件必須存在,並且不能改變它的文件名,該文件描述了如何連接數據庫,無須配置。
sqlmap.config配置文件簡介:

1 <?xml version="1.0" encoding="utf-8"?> 2 <sqlMapConfig xmlns="http://ibatis.apache.org/dataMapper" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 3 <properties embedded="database.config,SqlMaps"/> 4 <settings> 5 <setting useStatementNamespaces="${useStatementNamespaces}"/> 6 <setting cacheModelsEnabled="true"/> 7 <setting validateSqlMap="false"/> 8 </settings> 9 <!-- 加載數據庫驅動 --> 10 <providers embedded="providers.config,SqlMaps"/> 11 <database> 12 <provider name="${provider}"/> 13 <!--<dataSource name="iBatisNet" connectionString="data source=${datasource};database=${database};user id=${userid};password=${password};connection reset=false;connection lifetime=5; min pool size=1; max pool size=50"/>--> 14 <dataSource name="iBatisNet" connectionString="data source=.;database=ibatisdata;user id=sa;password=805072;connection reset=false;connection lifetime=5; min pool size=1; max pool size=50"/> 15 </database> 16 17 <sqlMaps> 18 <!-- 所有的xml文件--> 19 <sqlMap embedded="Map.Classes.xml,SqlMaps"/> 20 </sqlMaps> 21 </sqlMapConfig>
主要介紹一下這個配置文件的節點:
1,properties節點:
可以根據需要配置一些常量屬性。如果這些屬性有很多的話可以單獨寫一個文件里面,再通過resource(或url, embedded分別是引用url和編譯在程序中的資源文件)屬性引用 進來。
resource |
指定the properties文件從application的根目錄進行加載 resource="properties.config" |
url |
指定the properties文件從文件的絕對路徑進行加載 url="c:\Web\MyApp\Resources\properties.config" 或者 url="file://c:\Web\MyApp\Resources\properties.config" |
embedded |
指定文件可以作為程序集的資源文件進行加載' embedded=" database.config,SqlMaps” |
2,settings節點:
cacheModelsEnabled |
是否啟用sqlMap上的緩存機制 Example: cacheModelsEnabled=”true” Default: true (enabled) |
useStatementNamespaces |
是否使用Satement命名空間,這里的命名空間指的是映射文件中sqlMap節點的namespace屬性,如上例中針對Person表的映射文件sqlMap節點 <sqlMap namespace="Person" xmlns="http://ibatis.apache.org/mapping" xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance> 這里,指定了此sqlMap節點下定義的操作均叢屬於“Person”命名空間在useStatementNamespaces=”true”的情況下,Statement調用需追加命名空間,如:sqlMap.Update(“Person.UpdatePerson”,person);否則直接通過Statement名稱調用即可,如sqlMap.Update(“UpdatePerson”,person);但請注意此時需要保證所有映射文件中,statement定義無重名 Example: useStatementNamespaces=”false” Default: false (disabled) |
validateSqlMap |
是配置要不要啟示SqlMapConfig.xsd schema驗證映射文件. Example: validateSqlMap=”false” Default: false (disabled) |
3,provider節點:
配置數據驅動提供類配置文件的路徑和文件名,通過resource(或url, embedded分別是引用url和編譯在程序中的資源文件)屬性引用進來,參數的含義同properties。
ADO.NET是通過數據訪問提供程序(Provider)訪問數據庫。IBatisNet使用的是插件式結構來使用這些數據庫提供程序,每一個Provider對應於providers.config文件中 定義的一個provider項。1.3版本的Provider.config文件中定義了已經實現的16個provider(如上圖),通過設置這個文件中的幾個參數來決定使用哪個數據庫提供程序。
4,database節點 :
主要指定數據庫驅動,和數據庫連接字符串
<database>
<provider name="${provider}"/>
<dataSource name="iBatisNet" connectionString="data source=${datasource};database=${database};user id=${userid};password=${password};connection reset=false;connection lifetime=5; min pool size=1; max pool size=50"/>
</database>
5,sqlMaps節點 :
sqlMap節點指定了映射文件的位置,配置中可以出現多個sqlMap節點,以指定項目內所包含的所有映射文件。
1,創建實體(要養成一個良好的編碼習慣,代碼一定要加上注釋)

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Model 7 { 8 [Serializable] 9 public class Calsses : Entity 10 { 11 private int id; 12 /// <summary> 13 /// 班級編號 14 /// </summary> 15 public int Id 16 { 17 get { return id; } 18 set { id = value; } 19 } 20 private string name; 21 /// <summary> 22 /// 班級名稱 23 /// </summary> 24 public string Name 25 { 26 get { return name; } 27 set { name = value; } 28 } 29 private string description; 30 /// <summary> 31 /// 班級描述 32 /// </summary> 33 public string Description 34 { 35 get { return description; } 36 set { description = value; } 37 } 38 } 39 }
2,XML配置文件解釋
這里見簡單介紹一下常用的配置(至少我常用配置(菜鳥級程序員)),具體其他的配置在后面再講。

1 <?xml version="1.0" encoding="utf-8" ?> 2 <sqlMap namespace="Classes" xmlns="http://ibatis.apache.org/mapping" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > 4 <!--配置你的實體類的別名,一般的都是一個實體類對應一個xml--> 5 <alias> 6 <typeAlias alias="classes" type="Model.Calsses,Model" /> 7 </alias> 8 9 <!--找到你的實體類與數據庫字段的對應關系,如果數據庫字段與實體類一樣 這個可以省略不要--> 10 <resultMaps> 11 <resultMap id="SelectAllResult" class="classes"> 12 <result property="Id" column="calsses_id" /> 13 <result property="Name" column="classes_name" /> 14 <result property="Description" column="classes_description" /> 15 </resultMap> 16 </resultMaps> 17 <statements> 18 <!--查詢操作 id是你在操作類(也就是我的項目中的service類)中要用到的,resultMap表示返回結果的類型--> 19 <select id="SelectAllClasses" resultMap="SelectAllResult"> 20 select calsses_id as Id, 21 classes_name as Name, 22 classes_description as Description 23 from calsses 24 </select> 25 <!--查詢操作 id是你在操作類(也就是我的項目中的service類)中要用到的,resultMap表示返回結果的類型,parameterClass傳過來參數的類型,要注意傳過來的參數名要跟下面的字段可以一樣也可以不一樣。--> 26 <select id="SelectByClassesId" resultClass="classes" parameterClass="int"> 27 select 28 calsses_id as Id, 29 classes_name as Name, 30 classes_description as Description 31 from calsses 32 where calsses_id = #calsses_id# 33 </select> 34 <!--添加操作 id是你在操作類(也就是我的項目中的service類)中要用到的,parameterClass傳過來參數的類型,這里是實體類。注意下面的selectKey,如果你的id是自增的它會自動把值賦給id--> 35 <insert id="InsertClasses" parameterClass="classes"> 36 <selectKey property="Id" type="post" resultClass="int"> 37 ${selectKey} 38 </selectKey> 39 insert into calsses(classes_name,classes_description) values(#Name#,#Description#) 40 </insert> 41 <!--修改操作 id是你在操作類(也就是我的項目中的service類)中要用到的,parameterClass傳過來參數的類型,這里是實體類。--> 42 <update id="UpdateClasses" parameterClass="classes"> 43 update calsses set classes_name=#Name#, 44 classes_description=#Description# 45 where calsses_id=#Id# 46 </update> 47 <!--刪除操作 id是你在操作類(也就是我的項目中的service類)中要用到的,parameterClass傳過來參數的類型--> 48 <delete id="DeleteClasses" parameterClass="int"> 49 delete calsses 50 where calsses_id = #calsses_id# 51 </delete> 52 </statements> 53 </sqlMap>
3,簡單看一下IbatisNet的ISqlMapper
在IbatisNet中,我們把所有的配置和映射都放在XML文件里(當然,這未必是一定需要的),但是,XML文件不是可執行的,所以,如果我們要在我們的c#代碼里使用IbatisNet的映射,就必須通過一個類來加載、分析、使用它。
所以在IbatisNet中,提供給了我們很多的API來做這些事情,配置以及映射文件的加載和監視是在 創建SqlMapper實例的時候進行的,而所有的數據映射的工作以及我們對數據庫的操作,是需要在SqlMapper實例上調用方法來完成 的,SqlMapper實例具有多線程並且長期活動的性質,在IbatisNet外界,可以隨處使用這樣的方法來調用得到SqlMapper實例ISqlMapper mapper=Mapper.Instance();在我們第一次調用Mapper.Instance()的時候,DomSqlMapBuilder對象會通過解析SqlMap.config(默認路徑和命名)文件來出創建SqlMapper實例,在 以后的調用中,則會使用緩存中的mapper對象,那么,如果我們在應用程序運行期間,修改了我們的映射文檔,結果是怎樣的呢。如果我們使用Mapper.Instance()的方法來得到mapper對象,則在這個過程中,默認使用了DomSqlMapBuilder.ConfigureAndWatch的方法來監視配置文件的狀況,如果期間出現了改動,SqlMapper對象會被安全的重新載入,當然,如果你不喜歡IbatisNet替你做這件事情,則可以通過ISqlMapper mapper=builder.Configure()來獲取sqlMapper實例。
iBatis提供了多種方法對SqlMapper.Config文檔的內容進行加載,前面我們講過默認情況下SqlMapper.Config的存放位置,那么如果我們不是放在了默認位置或者不是默認的文件名該怎么辦呢?在默認情況下,我們可以使用這樣的方法得到SqlMapper實例 ISqlMapper mapper=builder.Configure(),其實這個Configure可以接受一個參數,他可以是String類型,FilePath對象,Uri對象XmlDocument對象,甚至是Stream類型 比如:
String str=”file://F:/databse.config”;
builder.Configure(str);
我就采用傳參數的方式:

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using IBatisNet.DataMapper; 6 using System.Reflection; 7 using System.IO; 8 using IBatisNet.DataMapper.Configuration; 9 10 namespace SqlMaps 11 { 12 public class MyIbatisNet 13 { 14 public static ISqlMapper SqlMap; 15 private static readonly object syncObj = new object(); 16 static MyIbatisNet() 17 { 18 if (SqlMap == null) 19 { 20 lock (syncObj) 21 { 22 if (SqlMap == null) 23 { 24 Assembly assembly = Assembly.Load("SqlMaps"); 25 Stream stream = assembly.GetManifestResourceStream("SqlMaps.sqlmap.config"); 26 DomSqlMapBuilder builder = new DomSqlMapBuilder(); 27 SqlMap = builder.Configure(stream); 28 } 29 } 30 } 31 } 32 } 33 }
這是一個簡單的單例模式。通過反射找到那個配置文件然后傳給builder.Configure();
4,簡單看一下操作類是如何來執行增刪改查的。

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using Model; 6 7 namespace BLLService 8 { 9 public class ClassesService : BaseBLLService 10 { 11 12 /// <summary> 13 /// 2013-07-26 14 /// 獲取全部班級信息 15 /// </summary> 16 /// <returns>班級實體集合</returns> 17 public IList<Calsses> GetAllClasses() 18 { 19 return SqlMap.QueryForList<Calsses>("SelectAllClasses", null); 20 } 21 /// <summary> 22 /// 2013-07-26 23 /// 查詢班級實體 24 /// </summary> 25 /// <param name="calsses_id">班級編號</param> 26 /// <returns>班級實體</returns> 27 public Calsses GetClassesByid(int calsses_id) 28 { 29 return (Calsses)SqlMap.QueryForObject("SelectByClassesId", calsses_id); 30 } 31 /// <summary> 32 /// 2013-07-26 33 /// 添加班級信息 34 /// </summary> 35 /// <param name="calssses">班級實體</param> 36 public void AddClaases(Calsses calssses) 37 { 38 SqlMap.Insert("InsertClasses", calssses); 39 } 40 /// <summary> 41 /// 2013-07-26 42 /// 修改班級信息 43 /// </summary> 44 /// <param name="calsses">班級實體</param> 45 public void UpdateClasses(Calsses calsses) 46 { 47 SqlMap.Update("UpdateClasses",calsses); 48 } 49 /// <summary> 50 /// 2013-07-26 51 /// 刪除班級信息 52 /// </summary> 53 /// <param name="calslesid">班級編號</param> 54 public void DeleteClasses(int calslesid) 55 { 56 SqlMap.Delete("DeleteClasses", calslesid); 57 } 58 } 59 }
這里主要簡單的提供了幾個簡單的方法,對於一些其它的方法的調用將在后面講。第一篇就簡單的介紹的這里,主要是為了讓初學者可以快速的用起來。下面有一個簡單的Demo可以下載,供初學者參考使用…………
注意的一些細節(作為初學者可能會碰到的問題)
1,配置沒有設置為嵌入的資源,導致找不到文件
2,寫錯應用程序集的名字,或者命名空間不統一。
好了……就寫到這兒吧……自己也是一個菜鳥,寫它只是為了鞏固一下自己學到的知識(上一個項目中剛用的,屬於短平快的學習方式),肯定有很多不對的地方,歡迎大家指正………………
源碼下載地址:http://download.csdn.net/detail/woaixiaozhi/5822555