• 咱就入个门之NHibernate映射文件配置(一)


    之前写了数据库连接配置,这次说说映射文件的配置,即表映射【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才能正确执行。

  • 相关阅读:
    log4j输出信息到mongodb
    mongodb日志服务器方案
    mongodb的高级操作(聚合框架)
    mongdb高级操作(group by )
    mongodb的优化
    mongodb集成spring
    mongodb的固定集合(优化效率)
    mongodb的查询操作符
    mongoDB中的连接池(转载)
    mongodb在java驱动包下的操作(转)
  • 原文地址:https://www.cnblogs.com/huaxia283611/p/nhibernate_hbm_xml.html
Copyright © 2020-2023  润新知