天天看點

IBatis.Net學習筆記八--把字段映射成一個自定義對象

在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,如需轉載請自行聯系原作者