映射文件详解(转)

简介: NHibernate中的映射文件详解   NHibernate是通过映射文件,将数据表中的记录转化为对象,将记录中的字段转化为对象的属性,所以说映射文件是O/R映射中至关重要的一个环节,下面就对其进行详细的讲解说明。

NHibernate中的映射文件详解

 

NHibernate是通过映射文件,将数据表中的记录转化为对象,将记录中的字段转化为对象的属性,所以说映射文件是O/R映射中至关重要的一个环节,下面就对其进行详细的讲解说明。

NHibernate中的映射文件其实质是一个XML文档。可用使用任何的文本编辑器对其进行编辑操作。

 

<?xml version="1.0" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"

 namespace="Eg" assembly="Eg">

  <class name="Cat" table="CATS" discriminator-value="C">

    <id name="Id" column="uid" type="Int64">

      <generator class="identity"/>

    </id>

    <discriminator column="subclass" type="Char"/>

    <property name="Birthdate" type="Date"/>

    <property name="Color" not-null="true"/>

    <property name="Sex" not-null="true" update="false"/>

    <property name="Weight"/>

    <many-to-one name="Mate" column="mate_id"/>

    <set name="Kittens">

      <key column="mother_id"/>

      <one-to-many class="Cat"/>

    </set>

    <subclass name="DomesticCat" discriminator-value="D">

      <property name="Name" type="String"/>

    </subclass>

  </class>

  <class name="Dog">

    <!-- mapping for Dog could go here -->

  </class>

</hibernate-mapping>

 

映射文件中不仅描述了NHibernate在运行时需要使用到的元素类型和属性,同时还包含了额外的元素属性,如被映射字段是否允许为空等。

Schema

NHibernate中所使用的所有映射文件均使用nhibernate-mapping-2.0 schemaNHibernate会把这种Schema作为嵌入资源使用。

Hibernate-mapping

<hibernate-mapping

    schema="schemaName" (1=""

    default-cascade="none|save-update" (2=""

    auto-import="true|false" (3=""

    default-access="property|field|nosetter|ClassName" (4=""

    assembly="assembly.name" (5=""

    namespace="namespace.name" (6="")

>

 

 

这个元素有六个可选属性。

·Schema(可选) :数据表结构名称;

·Default-cascade(可选,默认值为none) :数据表级联类型;

·Auto-import(可选,默认值true) :指示出是否可以在查询语句中不指定类名;

·Default-access(可选,默认值为”property):指示出NHibernate用于访问字段的策略;

·Assemble(可选):如果在引用实体类时没有指明类名前缀,则用此选项值作为默认的类名前缀;

·Namespace(可选):指示同名称空间;

 

如果你有两个同名的被持久化的对象(classname相同),则必须将”auto-import” 选项值设为false,否则当你访问这个对象时NHibernate会抛出一个异常。

 

Class

<class

    name="ClassName" (1=""

    table="tableName"(2=""

    discriminator-value="discriminator_value"(3=""

    mutable="true|false"(4=""

    schema="owner"(5=""

    proxy="ProxyInterface"(6=""

    dynamic-update="true|false"(7=""

    dynamic-insert="true|false"(8=""

    polymorphism="implicit|explicit"(9=""

    where="arbitrary sql where condition"(10=""

    persister="PersisterClass"(11=""

    lazy="true|false"(12="")

/>

 

·name:持久类在.Net中的类型的的全名及其所在程序集;

·table:数据库中的数据表名称;

·discriminator-value(可选,默认值为类名):用于区分单独的子集,使用与多态形式;

·mutable(可选,默认值为true):指定类实例是否易变;

·schema(可选):重新指定hibernate-mapping中的Schema选项值;

·proxy(可选):指定用于实现惰性初始的接口,如果所有属性都被声明为Virtual,则可以将类名指定给此选项;

·dynamic-update(可选,默认值false):指示出NHibernate在运行时产生的Update SQL语句是否仅包含被修改了的字段;

·dynamic-insert(可选,默认值false):指示出NHibernate在运行时产生的Insert  SQL语句是否仅包含被值不为Null的字段;

·polymorphism(可选,默认值implict):指示出是否需要有确指明查询是否使用多态性;

·where(可选):指定Where SQL语句可以获取这个类类型的对象;

·persister(可选):指定用户自定义的IClassPersister

·lazy(可选):将此项设为true等同与将它自己的类名赋予给proxy选项。

 

 

被映射的类必须声明一个Id与数据表中的主键相对应。Id其实也是被映射的类的一个属性,与使用Proerpty声明的属性不同的是ID属性值必须是唯一的,通过ID可以将对象转化为数据表中唯一的一条记录,同样也可以将数据表中的记录转化为对象。

 

<id

    name="propertyName" (1=""

    type="typename" (2=""

    column="column_name" (3=""

    unsaved-value="any|none|null|id_value" (4=""

    access="field|property|nosetter|ClassName">(5)

  <generator class="generatorClass"/>

</id>    

 

·name(可选):属性的名称;

·type(可选):属性的类型;

·column(可选,默认值和属性名称相同):数据表中的主键字段名称,如果用户定义的属性名称和此字段名称相同,则此选项可忽略不写;

·unsaved-value(可选,默认值为null):为属性指定默认值,当用户创建一个新的实例时,会将该选 项值做为属性默认值;

·access(可选,默认为”property)NHibernate对属性的访问策略;

 

Generator

此节指定了用于为该持久类实例产生ID属性值的.Net数据类型。如果需要一些参数对产生类实例ID属性值的数据类型进行配置或是初始化工作,可以使用”Param 子节对其进行定义。

 

<id name="Id" type="Int64" column="uid" unsaved-value="0">

  <generator class="NHibernate.Id.TableHiLoGenerator">

    <param name="table">uid_table</param>

    <param name="column">next_hi_value_column</param>

  </generator>

</id>

 

所有的ID属性值产生器均实现了Nhibernate.Id.IdentifierGenerator接口。这是一个很简单的接口,一些应用程序会有他们自已专门的ID属性值产生器。尽量这样,NHibernate仍提供了一些内置的ID属性值产生器,

 

<property

    name="propertyName"(1=""

    column="column_name"(2=""

    type="typename"(3=""

    update="true|false"(4=""

    insert="true|false"(5=""

    formula="arbitrary SQL expression"(6=""

    access="field|property|nosetter|ClassName"(7="")

/>

·name:要映射成的属性名称;

·column(可选,默认和name值相同):数据表中的字段名称;

·type(可选):指定属性类型;

·update(可选,默认值为true):是否将此属性包含到NHibernate产生的Update SQL子句中;

·insert(可选,默认值为true):是否将此属性包含到NHibernate产生的Insert SQL子句中;

·formula(可选):用于计算该属性值的一个SQL表达式。计算属性没有在数据表中没有相应的字段与其对应;

·access(可选,默认为”property)NHibernate对属性的访问策略;

 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
JSON 小程序 JavaScript
微信小程序 wx:if wx:elif wx:else 多条件判断
微信小程序 wx:if wx:elif wx:else 多条件判断
286 0
|
6月前
|
算法 Java Python
使用Python来绘制樱花树
本文以林徽因的《你是人间的四月天》为引,将春日意象与现代职场编程艺术结合,通过Python的Turtle模块绘制分形树和花瓣图案。文章详细解析了Turtle模块的使用方法、递归算法及随机性在图形生成中的应用,展示了如何用代码创造自然美感。核心代码包含tree函数(绘制分形树)和petal函数(绘制花瓣),最终生成一幅生动的春日画卷。项目不仅帮助读者掌握Turtle绘图技巧,更激发对编程艺术的兴趣,鼓励探索数字世界的无限可能。
167 5
|
Linux Shell 编译器
Linux进程——Linux环境变量
Linux进程——Linux环境变量
137 3
|
JavaScript
Vue3倒计时(Countdown)
这篇文章介绍了如何在Vue 3中创建一个可自定义的倒计时组件(Countdown),允许设置标题、前缀、后缀、格式和样式,并提供了组件的实现代码和使用示例。
1086 2
Vue3倒计时(Countdown)
|
消息中间件 Java Spring
Springboot 集成Rabbitmq之延时队列
Springboot 集成Rabbitmq之延时队列
375 0
|
NoSQL 网络协议 Java
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
[Redis] 渐进式遍历+使用jedis操作Redis+使用Spring操作Redis
153 7
|
开发工具 Android开发
【Wing】背后的插件们
【Wing】背后的插件们
|
Java 关系型数据库 Maven
SpringBootWebProject学习4、maven打war包
SpringBootWebProject学习4、maven打war包
123 1
|
Java 编译器 Spring
一文搞懂:什么是注解?
一文搞懂:什么是注解?
194 0
|
消息中间件 前端开发 Java
从技术开始-技术路线选择
软件企业的核心是干开发,就得选好技术路线。现在开发语言那么多、技术框架也多如牛毛,需要根据业务范围、发展趋势限定一下