.Net——Nhibernate实现CRUD

简介:                最近用到SSH(spring+struct+hibernate),从java里面的hibernate,不自觉联系到.net里面的Nhibernate。        下面来简单聊下Nhibernate.    一,引入Dll               主要有三个:                 基本的就这三个,其他的,比如Castle.Core.dll,Castle.DynamicProxy2.dll,Iesi.Collections.dll,log4net.dll 就用到了再引入吧。



               最近用到SSH(spring+struct+hibernate),从java里面的hibernate,不自觉联系到.net里面的Nhibernate。


        下面来简单聊下Nhibernate.


    一,引入Dll

   

           主要有三个:


        


        基本的就这三个,其他的,比如Castle.Core.dll,Castle.DynamicProxy2.dll,Iesi.Collections.dll,log4net.dll

 就用到了再引入吧。


    二,编写Nhibernate配置文件


                      

<?xml version="1.0" encoding="utf-8"?>
<!-- 
This template was written to work with NHibernate.Test.
Copy the template to your NHibernate.Test project folder and rename it in hibernate.cfg.xml and change it 
for your own use before compile tests in VisualStudio.
-->
<!-- This is the System.Data.dll provider for SQL Server -->
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
  <!--表明一些配置是针对session-factory配置的,sessionfactory是hibernate中的一个类,这个类主要负责保存hibernate的配置信息,以及对session的操作-->
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property><!--配置数据库的驱动程序,hibernate在连接数据库时,需要用到数据库的驱动程序-->
    <property name="connection.connection_string">server=ZB-LIUHCH-PC\SQLEXPRESS;database=TestMemcached;uid=sa;pwd=123456;</property>
      <!--Server=ZB-LIUHCH-PC\SQLEXPRESS;UserID=sa;Database=TestMemcached;Password=123456;-->
    <property name="adonet.batch_size">10</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <!--<property name="use_outer_join">true</property>-->
    <property name="command_timeout">10</property>
    <property name="hbm2ddl.auto">update</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
    <mapping assembly="NhibernateTest"/>
  </session-factory>
</hibernate-configuration>


   PS:文件属性为始终复制到输出路径;



三,编写实体类及其配置文件


    实体类:

 

namespace NhibernateTest
{
   public class User
    {
        public virtual string UserCode { get; set; }
        public virtual string UserName { get; set; }
        public virtual string UserAge { get; set; }
    }
}

   配置文件:


 

<?xml version="1.0" encoding="utf-8" ?>
<!--assembly:程序集,namespace:命名空间-->
<hibernate-mapping  xmlns="urn:nhibernate-mapping-2.2" assembly="NhibernateTest"  namespace="NhibernateTest">
  <class name="NhibernateTest.User,NhibernateTest" table="User">
    <!--主键-->
    <id name="UserCode" type="string" unsaved-value="null">
      <column name="UserCode" sql-type="nvarchar" not-null="true" unique="true"/>
      <generator class="assigned"></generator>
    </id> 
    <property name="UserName" type="String">
      <column name="UserName" sql-type="nvarchar"  not-null="false"/>
    </property>
    <property name="UserAge" type="String">
      <column name="UserAge" sql-type="nvarchar"  not-null="false"/>
    </property>

  </class>
</hibernate-mapping>


四,测试代码


       为了方便操作使用nhibernate,最好编写一个工具类:


         

 public class NHibernateHelper
        {
            private ISessionFactory _sessionFactory;
            public NHibernateHelper()
            {
                //创建ISessionFactory
                _sessionFactory = GetSessionFactory();
            }
            /// <summary>
            /// 创建ISessionFactory
            /// </summary>
            /// <returns></returns>
            public ISessionFactory GetSessionFactory()
            {
                //配置ISessionFactory
                return (new Configuration()).Configure().BuildSessionFactory();
            }
            /// <summary>
            /// 打开ISession
            /// </summary>
            /// <returns></returns>
            public ISession GetSession()
            {
                return _sessionFactory.OpenSession();
            }
        }


            之后我们写四段代码来简单看看CRUD操作:


          

  static void Main(string[] args)
        {
            Configuration configuration = new Configuration().Configure("hibernate.cfg.xml");  //nhibernate的配置文件的路径
            ISessionFactory sessionFactory = configuration.BuildSessionFactory();
            ISession isession = sessionFactory.OpenSession();

            #region 添加用户
                User user = new User() { 
                    UserName="漠漠水田飞白鹭",
                    UserAge="789",
                    UserCode="momoshuitianfeibailu"
                };
                isession.Save(user);
                //isession.Flush();
                //isession.Close();
              
            #endregion

            #region 读取用户信息
                User MyUser = isession.Get<User>("momoshuitianfeibailu");
            #endregion

            #region 更新用户信息
                MyUser.UserAge="00000000";
                isession.Update("momoshuitianfeibailu", MyUser); 
            #endregion

            #region 删除数据
                isession.Delete(MyUser);
                isession.Flush();
                isession.Close();

            #endregion
        }


             整个项目结构:


              

 



           小结:

                 以前在配置spring的时候就有这种感觉,感觉java平台下面的配置文件和。net平台下的配置文件配置起来大致是雷同的,还是蛮有意思的。


                 另一方面,与之前使用过的EF相比,EF因为有三种开发模式,code first,DB first, Model First,选择性比较大,如果我不想配置那么多文件,完全可以直接db first,之后各种东西就生成了,我直接用一个上下文参数就可以操作数据库。而Nhibernate的配置文件则要手写,万一我一手抖,写错一个字母,debug就耗费好多时间。


                 但是Nhibernate感觉比EF轻量一点儿,而且Nhibernate的透明持久化,这个特性挺有意思的,与EF相比,可以说它是基于Session的,不是长连接。


                     个人感觉就这么多啦。。

            









                               

目录
相关文章
|
22天前
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
37 2
|
API 开发工具
基于 .NET Core 2.2 的 Console 控制台实现简单 HTTP 请求的【CRUD】操作
Demo 说明:该项目是基于 .NET Core 2.2 的 Console 控制台实现简单的 http 模拟请求,对应http谓词实现的CRUD的封装操作;本项目依赖的 NuGet 包:Microsoft.AspNetCore.Http.Abstractions;Newtonsoft.Json;RestSharp;&lt;Project Sdk=&quot;Microsoft.NET.Sdk&quot;...
136 0
基于 .NET Core 2.2 的 Console 控制台实现简单 HTTP 请求的【CRUD】操作
|
关系型数据库 MySQL 数据库
NET连接MySQL数据库的CRUD
NET连接MySQL数据库的CRUD
163 0
NET连接MySQL数据库的CRUD
|
开发框架 JavaScript 前端开发
ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
429 0
ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
|
Web App开发 .NET API
从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD
原文:从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD 第1部分:http://www.cnblogs.com/cgzl/p/7637250.html 第2部分:http://www.
956 0
|
开发框架 .NET Java
下一篇
无影云桌面