在IBatis.Net中,查詢後的結果會自動将每一個字段映射成Domain中的一個屬性值,這個映射的過程是通過TypeHandlerFactory類進行的,在程式初始化時注冊了一些系統類和類型轉換類之間的關系:
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableBooleanTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(bool?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableByteTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(byte?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableCharTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(char?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableDateTimeTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(DateTime?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableDecimalTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(decimal?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableDoubleTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(double?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableGuidTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(Guid?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableInt16TypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(Int16?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableInt32TypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(Int32?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableInt64TypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(Int64?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableSingleTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(Single?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableUInt16TypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(UInt16?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableUInt32TypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(UInt32?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableUInt64TypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(UInt64?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableSByteTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(SByte?), handler);
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 handler = new NullableTimeSpanTypeHandler();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 this.Register(typeof(TimeSpan?), handler);
那麼如果想将資料庫中的一個字段映射成我們自己的一個類,在這個類中進行一些個性化處理,應該怎麼辦呢?
本來我想仿照StringTypeHandler類寫一個自己的類型處理類,但是通過檢視IBatis的源代碼,就算寫好了自己的
類型處理類,好像也找不到注冊的接口(如果哪位兄弟找到了接口,望告知)
另一種方式是通過已經注冊的CustomTypeHandler類型,實行其中的ITypeHandlerCallback接口來實作的,具體實作方式如下:
我這裡實作的隻是一個示範程式,示範将資料庫中的Account_LastName和Account_Email字段映射成自定義的Property類型,同時把它們放入一個Hashtable中。
1、自定義Property類
IBatis.Net學習筆記八--把字段映射成一個自定義對象 namespace GSpring.Common
IBatis.Net學習筆記八--把字段映射成一個自定義對象 {
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public class Property
IBatis.Net學習筆記八--把字段映射成一個自定義對象 {
IBatis.Net學習筆記八--把字段映射成一個自定義對象 private string _dataValue;
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public string DataValue
IBatis.Net學習筆記八--把字段映射成一個自定義對象 {
IBatis.Net學習筆記八--把字段映射成一個自定義對象 get { return _dataValue; }
IBatis.Net學習筆記八--把字段映射成一個自定義對象 set { _dataValue = value; }
IBatis.Net學習筆記八--把字段映射成一個自定義對象 }
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 private string _dataType;
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public string DataType
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 get { return _dataType; }
IBatis.Net學習筆記八--把字段映射成一個自定義對象 set { _dataType = value; }
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 }
IBatis.Net學習筆記八--把字段映射成一個自定義對象 }
2、實作ITypeHandlerCallback接口的類
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public sealed class PropertyTypeHandler : ITypeHandlerCallback
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public object ValueOf(string Value)
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 Property obj = new Property();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 obj.DataValue = Value;
IBatis.Net學習筆記八--把字段映射成一個自定義對象 return obj;
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public object GetResult(IResultGetter getter)
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 if (getter.Value != null && getter.Value != System.DBNull.Value)
IBatis.Net學習筆記八--把字段映射成一個自定義對象 {
IBatis.Net學習筆記八--把字段映射成一個自定義對象 obj.DataValue = (string)getter.Value;
IBatis.Net學習筆記八--把字段映射成一個自定義對象 }
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public void SetParameter(IParameterSetter setter, object parameter)
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 setter.Value = ((Property)parameter).DataValue;
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public object NullValue
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 get { return null; }
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 主要是其中的GetResult和SetParameter方法,實作和資料庫之間的存取操作。
3、修改對應的Domain類,加入兩個屬性:
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public Hashtable ht = new Hashtable();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 Property _emailAddress1 = new Property();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public Property EmailAddress1
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 get
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 return _emailAddress1;
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 set
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 _emailAddress1.DataType = "string";
IBatis.Net學習筆記八--把字段映射成一個自定義對象 _emailAddress1.DataValue = value.DataValue;
IBatis.Net學習筆記八--把字段映射成一個自定義對象 ht["郵件"] = _emailAddress1;
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 Property _lastName1 = new Property();
IBatis.Net學習筆記八--把字段映射成一個自定義對象 public Property LastName1
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 return _lastName1;
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 _lastName1.DataType = "string";
IBatis.Net學習筆記八--把字段映射成一個自定義對象 _lastName1.DataValue = value.DataValue;
IBatis.Net學習筆記八--把字段映射成一個自定義對象 ht["姓名"] = _lastName1;
IBatis.Net學習筆記八--把字段映射成一個自定義對象
IBatis.Net學習筆記八--把字段映射成一個自定義對象 4、修改配置檔案:
IBatis.Net學習筆記八--把字段映射成一個自定義對象 <resultMap id="account-result" class="Account" >
IBatis.Net學習筆記八--把字段映射成一個自定義對象 <result property="Id" column="Account_ID"/>
IBatis.Net學習筆記八--把字段映射成一個自定義對象 <result property="FirstName" column="Account_FirstName"/>
IBatis.Net學習筆記八--把字段映射成一個自定義對象 <result property="LastName1" column="Account_LastName" typeHandler="GSpring.Common.PropertyTypeHandler"/>
IBatis.Net學習筆記八--把字段映射成一個自定義對象 <result property="EmailAddress1" column="Account_Email" typeHandler="GSpring.Common.PropertyTypeHandler"/>
IBatis.Net學習筆記八--把字段映射成一個自定義對象 </resultMap>
主要是利用了其中的typeHandler屬性來指定一個類型轉換器。
本文轉自永春部落格園部落格,原文連結:http://www.cnblogs.com/firstyi/archive/2007/09/04/881446.html,如需轉載請自行聯系原作者