`

O/R Mapping基础(续二)

阅读更多

基本的值类型大致可以粗糙的分为三组:System.ValueType类型,System.Object类型和支持大对象的System.Object类型.和.NET类型一样,System.ValueType对应的列不能存储null值,而System.Object可以.

表4.3 System.ValueType 映射类型

NHibernate 类型.NET 类型Database 类型备注
Boolean System.Boolean DbType.Boolean 在没有指定类型(type) 属性时的默认值
Byte System.Byte DbType.Byte 在没有指定类型(type) 属性时的默认值
Char System.Char DbType.StringFixedLength - 1 char 在没有指定类型(type) 属性时的默认值
DateTime System.DateTime DbType.DateTime -忽略毫秒 在没有指定类型(type) 属性时的默认值
Decimal System.Decimal DbType.Decimal 在没有指定类型(type) 属性时的默认值
Double System.Double DbType.Double 在没有指定类型(type) 属性时的默认值
Guid System.Guid DbType.Guid 在没有指定类型(type) 属性时的默认值
Int16 System.Int16 DbType.Int16 在没有指定类型(type) 属性时的默认值
Int32 System.Int32 DbType.Int32 在没有指定类型(type) 属性时的默认值
Int64 System.Int64 DbType.Int64 在没有指定类型(type) 属性时的默认值
PersistentEnum 一个 System.Enum 潜在类型对应的DbType

不用在映射文件指定type="PersistentEnum".而是提供枚举的程序集全名,让NHibernate用反射来猜测类型。枚举使用的潜在类型决定适当的DbType

Single System.Single DbType.Single 在没有指定类型(type) 属性时的默认值
Ticks System.DateTime DbType.Int64 type="Ticks"必须被指定
TimeSpan System.TimeSpan DbType.Int64 在没有指定类型(type) 属性时的默认值
Timestamp System.DateTime DbType.DateTime - 取决于数据库支持 type="Timestamp"必须被指定
TrueFalse System.Boolean

DbType.AnsiStringFixedLength - 一个字符,'T' 或者'F'

type="TrueFalse" 必须被指定
YesNo System.Boolean DbType.AnsiStringFixedLength - 一个字符,'Y' 或者'N' type="YesNo"必须被指定

要掌握NHibernate或者使用某种工具生成NHibernate的hbm.xml文件,应该了解这是一个NHibernate类型名的完整的层。type="integer"被映射为Int32NHibernateType,type="short"被映射为Int16NHibernateType.查看所有的转换你可以查看NHibernate.Type.TypeFactory类的静态构造函数.

开发者创建属于他们自己的值类型也是很容易的。比如说,你可能希望持久化Int64类型的属性,持久化成为VARCHAR字段。NHibernate没有内置这样一种类型。自定义类型能够映射一个属性(或集合元素)到不止一个数据库表字段。比如说,你可能有这样的属性:Name {get; set;} ,这是String类型的,对应的持久化到三个字段:FIRST_NAME, INITIAL, SURNAME

要实现一个自定义类型,可以实现NHibernate.IUserTypeNHibernate.ICompositeUserType中的任一个,并且使用类型的全限定类名来声明属性。请查看NHibernate.DomainModel.DoubleStringType这个例子,看看它是怎么做的。

<property name="TwoStrings" type="NHibernate.DomainModel.DoubleStringType, NHibernate.DomainModel">
<column name="first_string"/>
<column name="second_string"/>
</property>

注意使用<column>标签来把一个属性映射到多个字段的做法。

虽然NHibernate内置的丰富类型和对component的支持意味着你可能很少需要使用自定义类型,至少对于你程序中经常出现的自定义类(并非实体)来说,这是一种好方法。比如说,MonetoryAmount(价格总额)对比使用ICompositeUserType来说更好,虽然它可以很容易的使用一个component实现。这样做的动机之一是抽象。通过自定义类型,以后假若你改变表示金额值的方法时,你的映射文件不需要更改,这就得到了保护。

评论

相关推荐

    Macrobject NObject O/R Mapping 框架

    NObject O/R Mapping 框架包含了 OQL.NET,一套基于 C# 和 VB.NET 等原生 .NET 语言的强类型对象查询语言 (OQL, Object Query Language) 使您甚至不需要写一行 SQL 语句。 ??NObject O/R Mapping 框架能帮您减少 30...

    O/R_Mapping思想

    O/R_Mapping思想与ADO.NET 基于.NET的Web应用框架的设计与实现 将对象映射到关系数据库——对象/关系映射(O/R_Mapping)详解 面向对象设计中的O/R映射架构

    hibernate如何用O/R Mapping框架来实现我们的数据层

    ### Hibernate与O/R Mapping框架详解 #### 一、O/R Mapping概述 O/R Mapping(Object-Relational Mapping)即对象关系映射,是一种程序技术,用于将对象模型表示的应用程序对象与关系数据库中的表进行相互转换。在...

    泛型、反射 实现 O/R mapping 示例

    在Java编程语言中,O/R Mapping(对象关系映射)是一种技术,用于将数据库中的关系数据映射到对象模型上,使得开发人员可以更方便地处理数据,而无需直接操作SQL语句。在这个示例中,我们将探讨如何利用泛型和反射来...

    Hibernate O/R Mapping 入门工程包

    **Hibernate O/R Mapping 入门工程包** 在Java开发领域,Hibernate是一个强大的对象关系映射(Object-Relational Mapping,简称ORM)框架,它能够帮助开发者将数据库操作转化为面向对象的编程,从而降低了数据库和...

    MJDU v6.0 及使用教程(注解+反射+XML+O/R Mapping+R/O Mapping)

    组件出版于 2012 年末横空出世,由于不会炒作,...我才发现原来在 2013 年时上传的 0.04 版本是不带 OR/RO Mapping 机制的。。。 想了想,还是补上 v6 这个带 OR/RO Mapping 机制的版本吧,虽然是同一时期的产物。

    Tornado O/R Mapping Engine-开源

    **Tornado O/R Mapping Engine 开源详解** Tornado O/R Mapping Engine,简称为Tornado/DB,是一款基于Java平台的对象关系映射(Object-Relational Mapping,ORM)工具。ORM技术的主要目标是通过将数据库中的数据与...

    o-x-mapping测试

    "o-x-mapping"通常指的是对象到XML的映射,它允许我们将Java对象转换为XML文档,或者从XML文档中反向创建Java对象。这种映射机制是许多框架和库的核心功能,如JAXB(Java Architecture for XML Binding)和XStream等...

    一個好好的 hibernate 介紹

    1. 对象/关系映射 (O/R Mapping) 2. Hibernate 3. Hibernate同步器 (Synchronizer) 4. 示例与实践 #### O/R Mapping(对象/关系映射) - **定义**:对象/关系映射是一种编程技术,用于将对象模型中的数据自动转换...

    hibernat培训.ppt

    本讲座主要围绕Hibernate这一强大的对象/关系映射(O/R Mapping)框架展开,旨在帮助学员理解O/R Mapping原理,掌握Hibernate的使用,并能够运用到实际项目开发中。适合熟悉Java、SQL、JDBC,具备面向对象编程经验的...

    Mapping Objects to Relational Databases O-R Mapping In Detail.doc

    **O/R Mapping(对象关系映射)详解** 在大多数现代商业应用开发项目中,开发者通常使用Java或C#等面向对象的技术构建应用程序软件,并利用关系型数据库存储数据。虽然也有用过程式语言如COBOL编写的应用,或者使用...

    O/RM自动生成工具

    2. **O/R Mapping**:对象关系映射,是ORM的核心概念。它通过定义规则将数据库表映射为类,表中的字段映射为类的属性,从而实现对象与数据库记录的对应。这样,开发者可以直接操作对象,而无需关心底层SQL语句的编写...

    hibernate学习笔记

    Hibernate是Java领域中一款流行的持久化框架,它实现了对象关系映射(O/R Mapping),将复杂的数据库操作转化为对Java对象的操作,从而简化了开发过程。本文主要围绕Hibernate 3.2的学习笔记,涵盖其基本概念、配置...

    HIBERNATE入门

    【HIBERNATE入门】是针对Java开发者的培训资料,主要介绍了如何入门并掌握Hibernate这一流行的O/R Mapping框架。Hibernate是一种用于简化Java应用程序与数据库交互的开源库,它通过对象关系映射(O/R Mapping)技术...

    Attribute 学习

    Attribute O/R Mapping是一种技术,它允许开发者使用面向对象的方式来操作数据库,而无需关心底层SQL语句的编写。这种技术大大提高了开发效率,降低了代码的复杂性。 在.NET框架中,Attribute被用作一种元数据,...

    Hibernate3 学习笔记.ppt

    【一、O/R Mapping】 O/R Mapping,即对象关系映射,是将对象模型与关系数据库之间进行映射的技术。在Hibernate中,O/R Mapping允许开发者以面向对象的方式来操作数据库,而无需关心底层的SQL语句。这极大地提高了...

Global site tag (gtag.js) - Google Analytics