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属性来指定一个类型转换器。

 

hibernate 自定义字段查询映射为pojo对象的新思路

一般的hibernate自定义字段查询,返回的object对象数组,没有
  • pingnanlee
  • pingnanlee
  • 2014年09月23日 09:09
  • 4215

大对象属性JPA映射

以MySQL为例,保存字符数据的数据库表字段类型一般选择char,varchar,nchar,nvarchar。保存二进制数据的数据库表字段类型一般选择binary,varbinary。但是,这些类型...
  • seedshome
  • seedshome
  • 2016年08月26日 16:03
  • 1407

ORM中对象与数据库表之间的映射机制

1.实体类与数据库表一一映射 这是一种zuijin
  • haitianxiaowu
  • haitianxiaowu
  • 2014年05月17日 19:06
  • 1931

懒汉处理dapper字段名与属性名的映射方式

你还以为走路是世上最简单的事情呢?只不过是把一只脚放到另一只脚前面。但我一直很惊讶这些原本是本能的事情实际上做起来有多困难。而吃,吃也是一样的,有些人吃起东西来可困难了。说话也是,还有爱。这些东西都可...
  • fengyuzhiren
  • fengyuzhiren
  • 2017年03月02日 18:27
  • 2030

JSON和Java实体之间的数据类型映射

本教程将教你如何使用Java编程语言进行编码和解码JSON对象。让我们开始准备开始Java 和 JSON的编程环境。 环境 在开始使用Java编码和解码JSON,将需要安装JSON模块...
  • u010739551
  • u010739551
  • 2015年09月09日 11:12
  • 3309

DateTable映射到对象的字段和属性

c#反射技术小程序
  • jielizhao
  • jielizhao
  • 2014年09月01日 13:33
  • 1220

Google Gson:POJO 和 JSON 的字段映射规则

Google Gson:POJO 和 JSON 的字段映射规则
  • Silent_Paladin
  • Silent_Paladin
  • 2017年01月06日 15:40
  • 713

【反射】就是把java类中的各个成分映射成相应的java类

要反射的类 package com.xiaozhi.reflect; import java.io.InputStream; import java.util.List; public class...
  • jingtianxiaozhi01
  • jingtianxiaozhi01
  • 2014年03月17日 23:49
  • 1286

windows的映射驱动器

我们都知道电脑中的驱动器是什么,就是我们电脑里面的C盘,D盘等都叫做驱动器,或者叫做磁盘。那么网络驱动器是什么呢,这篇文章主要讲解一下网络驱动器以及他的搭建和使用。   一、什么是映射驱动器   ...
  • tr1912
  • tr1912
  • 2017年01月23日 00:22
  • 363

hibernate查询结果映射到实体和map的方法

1.sql查询封装对象,配置映射,把查询出来的数据封装到实体当中: 方法一:addEntity(A.class)设定查询出的结果映射到相应的实体中,但是这个实体必须在hibernate的映射文件中配...
  • menghuanzhiming
  • menghuanzhiming
  • 2017年06月22日 15:55
  • 2194
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IBatis.Net学习笔记八--把字段映射成一个自定义对象
举报原因:
原因补充:

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