映射文件详解(转)

简介: 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/

转载请注明:博客园

目录
相关文章
|
3月前
|
SQL Java 数据库连接
MyBatis映射文件深入
MyBatis映射文件深入
61 0
|
5月前
|
SQL 安全 Java
MyBatis映射文件深入--动态sql
MyBatis映射文件深入--动态sql
45 0
|
XML Java 数据库连接
Mybatis的mapper.xml 映射文件没有提示?
1、先来看一下Mapper.xml的头文件 ——1-1、从标文件中可以看到标黄的是Mapper.xml的命名空间,不提示就是该网络的地址获取不到信息 或 没有配置目录的mybatis-3-mapper.dtd
Mybatis的mapper.xml 映射文件没有提示?
|
1月前
|
XML Java 数据库连接
【Mybatis】XML映射文件
【Mybatis】XML映射文件
27 0
|
8月前
|
SQL 存储 缓存
Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?(下)
Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?(下)
|
8月前
|
SQL 缓存 Java
Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?(上)
Mybatis之配置文件与映射文件的“那些事”,你真的知道吗?(上)
|
9月前
|
XML Java 数据库连接
Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id 是否可以重复?
394 0
|
10月前
|
XML SQL Java
MyBatis XML 映射文件
MyBatis XML 映射文件
|
Java 数据库连接 数据库
Mybatis在Mapper.xml中的嵌套查询
Mybatis在Mapper.xml中的嵌套查询
Mybatis在Mapper.xml中的嵌套查询
|
SQL XML 安全
Mybatis-4-映射文件详解2
今天继续记录下Mybatis细化的一些特性。
66 0
Mybatis-4-映射文件详解2