IBatis.Net学习笔记八--把字段映射成一个自定义对象

转载 2007年09月19日 09:44:00
在IBatis.Net中,查询后的结果会自动将每一个字段映射成Domain中的一个属性值,这个映射的过程是通过TypeHandlerFactory类进行的,在程序初始化时注册了一些系统类和类型转换类之间的关系:
            handler = new NullableBooleanTypeHandler();
            
this.Register(typeof(bool?), handler);

            handler 
= new NullableByteTypeHandler();
            
this.Register(typeof(byte?), handler);

            handler 
= new NullableCharTypeHandler();
            
this.Register(typeof(char?), handler);

            handler 
= new NullableDateTimeTypeHandler();
            
this.Register(typeof(DateTime?), handler);

            handler 
= new NullableDecimalTypeHandler();
            
this.Register(typeof(decimal?), handler);

            handler 
= new NullableDoubleTypeHandler();
            
this.Register(typeof(double?), handler);

            handler 
= new NullableGuidTypeHandler();
            
this.Register(typeof(Guid?), handler);

            handler 
= new NullableInt16TypeHandler();
            
this.Register(typeof(Int16?), handler);
            
            handler 
= new NullableInt32TypeHandler();
            
this.Register(typeof(Int32?), handler);

            handler 
= new NullableInt64TypeHandler();
            
this.Register(typeof(Int64?), handler);

            handler 
= new NullableSingleTypeHandler();
            
this.Register(typeof(Single?), handler);

            handler 
= new NullableUInt16TypeHandler();
            
this.Register(typeof(UInt16?), handler);

            handler 
= new NullableUInt32TypeHandler();
            
this.Register(typeof(UInt32?), handler);

            handler 
= new NullableUInt64TypeHandler();
            
this.Register(typeof(UInt64?), handler);

            handler 
= new NullableSByteTypeHandler();
            
this.Register(typeof(SByte?), handler);

            handler 
= new NullableTimeSpanTypeHandler();
            
this.Register(typeof(TimeSpan?), handler);

那么如果想将数据库中的一个字段映射成我们自己的一个类,在这个类中进行一些个性化处理,应该怎么办呢?
本来我想仿照StringTypeHandler类写一个自己的类型处理类,但是通过查看IBatis的源代码,就算写好了自己的
类型处理类,好像也找不到注册的接口(如果哪位兄弟找到了接口,望告知)

另一种方式是通过已经注册的CustomTypeHandler类型,实行其中的ITypeHandlerCallback接口来实现的,具体实现方式如下:
我这里实现的只是一个演示程序,演示将数据库中的Account_LastName和Account_Email字段映射成自定义的Property类型,同时把它们放入一个Hashtable中。
1、自定义Property类
namespace GSpring.Common
{
    
public class Property
    
{
        
private string _dataValue;

        
public string DataValue
        
{
            
get return _dataValue; }
            
set { _dataValue = value; }
        }


        
private string _dataType;

        
public string DataType
        
{
            
get return _dataType; }
            
set { _dataType = value; }
        }

    }

}
2、实现ITypeHandlerCallback接口的类
namespace GSpring.Common
{
    
public sealed class PropertyTypeHandler : ITypeHandlerCallback
    
{

        
public object ValueOf(string Value)
        
{
            Property obj 
= new Property();
            obj.DataValue 
= Value;
            
return obj;
        }


        
public object GetResult(IResultGetter getter)
        
{
            Property obj 
= new Property();
            
if (getter.Value != null && getter.Value != System.DBNull.Value)
            
{
                obj.DataValue 
= (string)getter.Value;
            }

            
return obj;
        }


        
public void SetParameter(IParameterSetter setter, object parameter)
        
{
            setter.Value 
= ((Property)parameter).DataValue;
        }


        
public object NullValue
        
{
            
get return null; }
        }

    }


}

主要是其中的GetResult和SetParameter方法,实现和数据库之间的存取操作。
3、修改对应的Domain类,加入两个属性:

        public Hashtable ht = new Hashtable();
        Property _emailAddress1 
= new Property();
        
public Property EmailAddress1
        
{
            
get
            
{
                
return _emailAddress1;
            }

            
set
            
{
                _emailAddress1.DataType 
= "string";
                _emailAddress1.DataValue 
= value.DataValue;
                ht[
"邮件"= _emailAddress1;
            }

        }


        Property _lastName1 
= new Property();
        
public Property LastName1
        
{
            
get
            
{
                
return _lastName1;
            }

            
set
            
{
                _lastName1.DataType 
= "string";
                _lastName1.DataValue 
= value.DataValue;
                ht[
"姓名"= _lastName1;
            }

        }

4、修改配置文件:

        <resultMap id="account-result"  class="Account" >
            
<result property="Id"           column="Account_ID"/>
            
<result property="FirstName"    column="Account_FirstName"/>
            
<result property="LastName1"     column="Account_LastName"  typeHandler="GSpring.Common.PropertyTypeHandler"/>
            
<result property="EmailAddress1" column="Account_Email" typeHandler="GSpring.Common.PropertyTypeHandler"/>
        
</resultMap>

主要是利用了其中的typeHandler属性来指定一个类型转换器。

 

相关文章推荐

.net 映射数据库操作--自定义属性忽略字段

1.自定义属性类:public class ModelPropertyAttribute : Attribute{bool nottablecolum; public bool NotTableCol...
  • sdt0263
  • sdt0263
  • 2011年03月14日 14:44
  • 1131

Spring.NET学习笔记11——自定义对象行为(基础篇)

Spring.NET通过几个专门的接口来控制容器中对象的行为。说到对象的行为无非就要提到对象的生命周期控制。类似在WinForm开发,Form生命周期中,Load方法为Form的载入方法和Dispos...

APS.NET_MVC5学习笔记-给电影表和模型添加新字段

在本节中,您将使用Entity Framework Code First来实现模型类上的操作。从而使得这些操作和变更,可以应用到数据库中。 默认情况下,就像您在之前的教程中所作的那样,使用 En...

Nutch 1.3 学习笔记 外传 扩展Nutch插件实现自定义索引字段

扩展Nutch插件实现自定义索引字段 1.Nutch与Solr的使用介绍   1.1 一些基本的配置 在conf/nutch-site.xml加入http.agent.name的属性 生成一...

C#制作ORM映射学习笔记一 自定义Attribute类

之前在做unity项目时发现只能用odbc连接数据库,感觉非常的麻烦,因为之前做web开发的时候用惯了ORM映射,所以我想在unity中也用一下ORM(虽然我知道出于性能的考虑这样做事不好的,不过自己...

(学习Asp.net Ajax笔记一)使用 Microsoft AJAX Library 创建自定义客户端脚本之一

什么时候使用类型系统 当您要执行下列操作时,可以使用 Microsoft AJAX Library 的功能: 向 JavaScript 代码中添加面向对象的功能,以提高代码的重用性、灵...

Spring.NET学习笔记4——对象的创建(基础篇)

学过了前面的课程,我们来一起学习Spring.NET的IoC容器对象的创建。  创建对象一般有3种方式:1.构造器创建,2.静态工厂创建,3.实例工厂创建  多数情况下,容器会根据对象定义中的type...

Spring.NET学习笔记7——依赖对象的注入(基础篇)

  一、属性注入  上篇我们简单提到依赖注入的用途。回顾一下所讲内容,发现在object节点下使用了。而property 标签正是用来属性注入的。而ref是用来标识是关联到哪个object。而name...

黑马程序员之ADO.NET学习笔记:SqlCommand(命令对象)

1.实例化的时候默认初始化的四个属性 2.创建命令对象   使用连接对象的“CreateCommand()”方法创建命令对象,也可以使用new来实例化对象!   SqlCommand comma...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IBatis.Net学习笔记八--把字段映射成一个自定义对象
举报原因:
原因补充:

(最多只允许输入30个字)