如何浅析iBATIS.NET字段映射自定义对象,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
iBATIS.NET字段映射是什么意思呢?在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中。
iBATIS.NET字段映射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; } } } }
iBATIS.NET字段映射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方法,实现和数据库之间的存取操作。
iBATIS.NET字段映射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; } }
iBATIS.NET字段映射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属性来指定一个类型转换器。
关于如何浅析iBATIS.NET字段映射自定义对象问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。