之前写了数据库连接配置,这次说说映射文件的配置,即表映射【ORM的核心就是此啦!】。

下面我们使用最原始的手动配置hbm.xml文件。

步骤:

1、添加People类

namespace NHibernateStudy
{
public class People
{
/// <summary>
/// 主键
/// </summary>
public virtual String Id { get; set; } /// <summary>
/// 姓名
/// </summary>
public virtual string Name { get; set; } /// <summary>
/// 性别
/// </summary>
public virtual bool Sex { get; set; } /// <summary>
/// 年龄
/// </summary>
public virtual Int32 Age { get; set; } public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual string FullName { get; set; }
public virtual string TempFullName { get; set; }
}
}

2、添加People.hbm.xml文件【注意哦:生成操作要改为“嵌入的资源”——右击文件,选择属性】

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateStudy" namespace="NHibernateStudy">
<class name="People" table="peoples">
<id name="Id" column="id" type="String">
<generator class="uuid.hex" />
</id>
<property name="Name" column="name" type="String" />
<property name="Sex" column="sex" type="Boolean" />
<property name="Age" column="age" type="Int32" /> <property name="FirstName" column="firstname" type="String" />
<property name="LastName" column="lastname" type="String" />
<property name="FullName" formula="firstname||lastname" type="String" />
<property name="TempFullName" formula="(select A.firstname||A.lastname from peoples as A where A.id=id)" type="String" />
</class>
</hibernate-mapping>

3、hibenate.cfg.xml中添加映射文件配置【添加到session-factory节点内】

<mapping resource="NHibernateStudy.People.hbm.xml" assembly="NHibernateStudy" />

4、可以操作People添加数据啦!

ISessionFactory sessionFactory = (new Configuration()).Configure().BuildSessionFactory();
ISession session = sessionFactory.OpenSession(); #region 添加一条数据
session.Delete("from People;");
session.BeginTransaction().Commit(); People p = new People();
p.Name = "addp" + DateTime.Now.ToString("MMddHHmmss");
p.Sex = false;
p.Age = 25;
p.FirstName = "first" + DateTime.Now.ToString("MMddH");
p.LastName = "last" + DateTime.Now.ToString("Hmmss");
session.Save(p);
session.BeginTransaction().Commit();
session.Evict(p);
#endregion #region 显示数据库数据
//session.Clear();
IList<People> ps = session.CreateCriteria<People>().List<People>();
foreach (var item in ps)
{ Console.WriteLine("ID:" + item.Id + " Name:" + item.Name + " Sex:" + item.Sex + " Age:" + item.Age);
Console.WriteLine("FirstName:" + item.FirstName + " FullName:" + item.FullName + " TempFullName:" + item.TempFullName);
}
#endregion

上述代码中有两个额外的要点,下面理一下

第一个是自动生成id的策略,第二个是formula的使用

1、官方提供了许多常用的ID生成策略,基本足够用了,当然也可以自己实现。【注:个人常用的应该是uuid.hex了,主要是使用guid的字符串】

详见官方文档:查看;此处仅接受个人常用

identity 数据库生成int型主键
uuid.hex System.Guid使用ToString()生成Guid
guid.comb Guid类型标识符

其中uuid映射为字符串类型,guid映射为Guid类型。

2、关于formula的使用,主要用于一个字段不是直接来自于数据库,是通过计算或多表筛选得出的。上文中就使用firstname和lastname拼接fullname【sqlite中字符串拼接用‘||’】。

其中需要注意的:新增数据,保存后立即查询,formula不生效,需要执行session.clear()清空缓存以使生效,或者使用session.Evict(x)将之前加的数据从缓存中移除,如此,formula才能正确执行。

咱就入个门之NHibernate映射文件配置(一)的更多相关文章

  1. 咱就入个门之NHibernate映射文件配置(二)

    上一篇主要介绍了NHibernate映射文件的基础配置,这篇我们介绍下NHibernate的一对多及多对一配置(文中我直接使用双向关联,即一和多两端都配置,开发中可以只使用一端),同时略带介绍下NHi ...

  2. 用MyGeneration模板生成NHibernate映射文件和关系

    用我的MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many) MyGeneration的几个NHibernate模 ...

  3. NHibernate之映射文件配置说

    1. hibernate-mapping 这个元素包括以下可选的属性.schema属性,指明了这个映射所引用的表所在的schema名称.假若指定了这个属性, 表名会加上所指定的schema的名字扩展为 ...

  4. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  5. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap good

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  6. 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]

    上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之insert.update.delete>介绍了insert.update.delete的用法,本篇将介绍select ...

  7. 深入浅出Mybatis系列八-mapper映射文件配置之select、resultMap

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇<深入浅出Mybatis系列(七)---mapper映射文件配置之inse ...

  8. MyGeneration模板生成NHibernate映射文件和关系(one-to-one,one-to-many,many-to-many)

    MyGeneration的几个NHibernate模板功能已经很强,但还是存在些问题.例如:Guid主键支持不佳,代码不易修改,不支持中文注释等等.所以我决定自己来改写此模版.我把一部分通用的函数提取 ...

  9. Hibernate的映射文件配置

    对象关系的映射是用一个XML文档来说明的.映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等.下面从一个映射的例子开始讲解映射元素,映射文件的代码如下: <?x ...

随机推荐

  1. HTML——选择器

    在前面的章节中,我们展示了一些有关如何选取 HTML 元素的实例. 关键点是学习 jQuery 选择器是如何准确地选取您希望应用效果的元素. jQuery 元素选择器和属性选择器允许您通过标签名.属性 ...

  2. 《Head First Servlet JSP》学习笔记二

    一. 二. 三. 四. 五. 六. 七. 八. 九. 十. 十一. 十二.  

  3. Ubuntu里面软件的安装与卸载

    在Ubuntu里面,有时候碰到软件配置错了,这是重新再安装的话,会检测到已安装,系统不会再重新安装,就需要卸载之后重装 1.通过deb包安装的情况: 安装.deb包: 代码:sudo dpkg -i ...

  4. vs2008与windbg的使用

    WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件.使用windgb进行程序调试是一个很有必要的技能. ...

  5. Java中对List集合内的元素进行顺序、倒序、随机排序的示例代码

    import java.util.Collections; import java.util.LinkedList; import java.util.List; public class Test ...

  6. Unity3d《Shader篇》地球旋转上空悬浮云层

    记得把纹理设置成Repeat Shader "Custom/Earth" { Properties { _MainTex ("Base (RGB)", 2D) ...

  7. Mybatis中的in查询和foreach标签

    Mybatis中的foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separato ...

  8. Windows下查看局域网内某台计算机的MAC地址

    我们知道在局域网中,在Windows下,查看局域网内其他主机的ip和对应mac地址的命令是: arp -a 这样可以看到ip和mac地址的对应关系,还是比较方便的 但是有些时候使用arp命令并不能列出 ...

  9. Icon Font的转换

    Icon Font是用于网页的纯色图标,这里引用一张网络图片: 由于体积小,易维护等特点,IconFont应用非常广泛. 这里推荐一个转换器,通过Upload一个后缀ttf的字体文件,可以反解出文件下 ...

  10. nyoj163_Phone List_字典树

    Phone List 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 Given a list of phone numbers, determine if it i ...