IbatisNet一下簡稱Ibatis包括DataAccess和DataMapper兩部分。整個Solution包括三個主項目:
IBatisNet.Common
IBatisNet.DataAccess
IBatisNet.DataMapper
和一個輔助項目:IBatisNet.Common.Logging.Log4Net。
Common項目是DataAccess和DataMapper的公共基礎,提供通用功能和公共服務。DataAccess是DAO框架,DataMapper是SqlMap映射框架。Common.Logging.Log4Net是對log4net日志服務的代理,利用log4net日志框架產生和輸出日志。
二.各項目介紹
Commons
根目錄:
DataSource類封裝了數據源信息,包括數據源的標志名Name,數據源的提供者Provider和數據源所代表的連接字符串ConnectionString。DataSource類有下列屬性:
[Serializable]
[XmlRoot("dataSource", Namespace="http://ibatis.apache.org/dataMapper")]
類中的Property(屬性)也有[XmlAttribute]屬性(Attribute),例如public string ConnectionString屬性有[XmlAttribute("connectionString")]。
所以類可被反序列化為xml文件,也可以直接通過XmlNode解析為對象。DataSourceDeSerializer類就是從XmlNode中讀取信息并生成DataSource類。
DataSource屬性和配置文件中的dataSource節點對應。
Provider類封裝了data provider(數據提供者)信息,例如程序集名稱AssemblyName,是否是默認提供者IsDefault,ConnectionClass,DataAdapterClass等提供者程序的信息。并提供了IDbCommand GetCommand(),IDbDataAdapter GetDataAdapter()等方法,為上層應用隱藏了具體驅動(數據提供程序)的細節。與DataSource一樣Provider也是可以序列化為xml文件,并通過ProviderDeSerializer.cs中的ProviderDeSerializer類從XmlNode中構造Provider實例。
IDalSession類是Ibatis中的基礎接口。封裝了數據訪問相關的會話信息,比如數據源,連接和事物對象。用于管理數據源相關信息,比如:
IDbCommand CreateCommand(CommandType commandType);
///
/// Create an IDataParameter
///
/// An IDataParameter.
IDataParameter CreateDataParameter();
///
/// Create a DataAdapter
///
/// The statement or stored procedure
/// used to select records in the data source.
/// An IDbDataAdapter.
IDbDataAdapter CreateDataAdapter(IDbCommand command);
///
/// Create a DataAdapter
///
/// An IDbDataAdapter.
IDbDataAdapter CreateDataAdapter();
連接管理的相關方法,比如:
///
/// Open a connection.
///
void OpenConnection();
///
/// Open a connection, on the specified connection string.
///
/// The connection string
void OpenConnection(string connectionString);
///
/// close a connection
///
void CloseConnection();
事務管理相關的方法,比如:
///
/// Begins a transaction on the current connection
/// with the specified IsolationLevel value.
///
/// The transaction isolation level for this connection.
/// Open a connection.
void BeginTransaction(bool openConnection, IsolationLevel isolationLevel);
///
/// Commit a transaction and close the associated connection
///
void CommitTransaction();
///
/// Commits the database transaction.
///
/// Close the connection
void CommitTransaction(bool closeConnection);
///
/// Rollbak a transaction and close the associated connection
///
void RollBackTransaction();
///
/// Rolls back a transaction from a pending state.
///
/// Close the connection
void RollBackTransaction(bool closeConnection);
等。
Exception目錄:
Exception目錄中的類定義了框架的異常類型。
IBatisNetException是框架基礎類,其他框架異常都繼承自它。
ConfigurationException類用于處理配置過程中出現的異常。
ForeignKeyException類用于代表外鍵異常和錯誤。
ProbeException類代表較表層的異常,通過該異??梢蕴骄可顚釉?,也用于通過流節序列化并組裝成異常實例的過程(不是太清楚)??蚣苤性赗eflectionInfo和ObjectProbe中有使用。
Logging目錄:
Logging目錄類似于apache jarkata中的commons log,對log進行了封裝,可以同時支持多種log實現,并通過配置文件進行配置。不詳細說明。
Pagination目錄:
Pagination目錄輔助查詢分類。
PaginatedArrayList類實現了IPaginatedList接口。用于維護頁碼和頁中的數據內容。維護分頁狀態實現分頁算法。PaginatedArrayList和具體的數據訪問無關,內部通過ArrayList容器分類。
Transaction目錄:
Transaction目錄中的類用于事務管理。
IsolationLevel枚舉定義了事務的隔離級別。
TransactionOptions結構指明了事務行為:事務時間段和隔離級別。
TransactionScopeOptions枚舉描述了事務范圍(Transaction scope)和事務的關聯關系。
TransactionScope用于管理分布式事務,不過只支持1.1而且對操作系統由要求,不支持win2000。
Utilities目錄:
Utilities目錄中是一些公用類。
ConfigWatcherHandler類用于監視配置文件以便在配置文件修改的時候進行相應的處理,比如重新加載并處理配置文件。該類中注意Timer類和FileSystemWatcher類的用法。
DBHelperParameterCache類用于對存儲過程參數的緩存。
HashCodeProvider類的public static int GetIdentityHashCode(object obj)方法返回obj的HashCode。
Resources類用于簡化資源文件的訪問??梢酝ㄟ^流,文件和url獲取資源文件,并解析為XmlDocument。
ScriptRunner類用于執行sql腳本語句。
StringTokenizer類類似于java中的StringTokenizer,可以分割字符串為字符串數組。
Utilities/Objects目錄:
Utilities/Objects目錄下的類主要用于反射。
ObjectProbe由于獲取對象的反射信息和運行時值信息。
ReflectionInfo主要緩存了類的定義信息,可以使property和get/set方法的映射更加簡單。
Utilities/Proxy目錄:
Utilities/Proxy目錄利用Castle DynamicProxy的代理類。
CachedProxyGenerator繼承自Castle DynamicProxy的ProxyGenerator,通過CreateProxy方法利用ProxyBuilder.CreateInterfaceProxy(interfaces, targetType )創建動態代理。
IProxyGenerator一個標志接口。
ProxyGeneratorFactory工廠類,獲取Castle DynamicProxy的一個ProxyGenerator實例。
Utilities/TypesResolver目錄:
Utilities/TypesResolver目錄中的類用于類型解析。也就是利用反射和程序集從字符串構造出相應的類型。
TypeResolver的Type Resolve (string typeName)方法從程序集中獲取類型信息。
CachedTypeResolver繼承自TypeResolver,增加了緩存功能。
TypeAliasResolver類定義了Ibatis內部的別名和實際類型的映射,例如list-〉new ArrayList(),以及將系統的內置值類型變換為相應的對象類型。
Xml目錄:
Xml目錄包含一個NodeUtils類,主要用于從XmlNode中解析屬性,和從NameValueCollection中獲取值,ParsePropertyTokens(string str, NameValueCollection properties) 方法用于將str中的占位符用相應的properties中的值替代。str中可以有多個占位符屬性。