且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

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

更新时间:2022-09-18 15:14:36

在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学习笔记八--把字段映射成一个自定义对象namespace GSpring.Common
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学习笔记八--把字段映射成一个自定义对象            Property obj 
= new Property();
IBatis.Net学习笔记八--把字段映射成一个自定义对象            
if (getter.Value != null && getter.Value != System.DBNull.Value)
IBatis.Net学习笔记八--把字段映射成一个自定义对象            
{
IBatis.Net学习笔记八--把字段映射成一个自定义对象                obj.DataValue 
= (string)getter.Value;
IBatis.Net学习笔记八--把字段映射成一个自定义对象            }

IBatis.Net学习笔记八--把字段映射成一个自定义对象            
return obj;
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学习笔记八--把字段映射成一个自定义对象            
get
IBatis.Net学习笔记八--把字段映射成一个自定义对象            
{
IBatis.Net学习笔记八--把字段映射成一个自定义对象                
return _lastName1;
IBatis.Net学习笔记八--把字段映射成一个自定义对象            }

IBatis.Net学习笔记八--把字段映射成一个自定义对象            
set
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,如需转载请自行联系原作者