• 学习NHibernat for .NET笔记


    虽没有大起大落,但人生还是有得失兼备,之所以要复活,一个原因是失比得要多,所以开始记录这复活的旅程。

    既然是复活,那就不会从html开始,为了更好的将知识应用到实践,以一个项目开启复活之路,当然其中会关系到很多东西,比如:SQLCSSJSASP.NET等,但最重要的是应用了在以前从未使用过的NHibernat for .NET。相信都听说过或者是用过java中的SSH,以我粗糙的了解SSHNHibernate来看,他们很相似。NHibernate是一个基于.net平台下的ORM,把对象模型与数据库中的表相对应,简单的说就是:一张表对应一个类,操作类的对象就相当于操作表中的一条数据;同时Nhibernate还提供了很多的方法、事务等工具,以便我们操作数据库。好吧,项目开始吧!

    一、创建数据库 

    在这我使用的数据库是SQL2008,新建一个Demo的数据库,在其中新建一张USER表,代码如下:

     

    create database Demo
    
    go
    
    use Demo
    
    go
    
    create table TUser(
    
    Id int identity(1,1) primary key,,
    
    UserName nvarchar(32),
    
    UserPwd  nvarchar(32)
    
    )
    
    select * from TUser
    

    如图:

    二、编写实体类与映射文件

    VS2010下新建一个项目,然后添加一个Domain的项目,新建一个Model,如下图:

    Model中新建一个实体类User,其代码如下:

     

    class TUser {
    
            public TUser() { }
    
     
    
            public virtual int Id{get;set;}
    
     
    
            public virtual string UserName{get;set;}
    
     
    
            public virtual string UserPwd{get;set;}
    
        
    
        }
    

     注意:实体类的的属性应使用virtual 来修饰,这个原因暂还未去研究,应与Nhibernate里的代理有关,先用了再说。

    在上图中有一个XML文件,里面是专用来放映射文件的,新建一个xml文件,修改文件名为:TUser.hbm.xml,然后开始编写这个文件,代码如下:

    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"  assembly="Domain"

       namespace="Domain.Model">

        <class name="Domain.Model.TUser" table="TUser">

            <!-- ID increment-->

            <id name="Id" column="Id">

                <generator class="native"></generator>

            </id>

            <!--S_LoginName -->

            <property name="UserName" column="UserName" />

            <!--S_LoginPwd  -->

            <property name="UserPwd" column="UserName" />

     </class>

    </hibernate-mapping>

       注:这里要修改这个文件的属性,如下图:

    三、使用Session来操作数据

    在使用Nhibernate之前,得从网站上去下载,很可能打不开页面,所以你懂的。将下下不的文件中的下面二个拷到bin

    新建一个DAL的项目,添加到现在的解决方案中,DALDomain都应引用以上二个文件。在DAL中新建一个TUserDAL用于存放访问数据库的方法。TUSerDAL如下:

     

    public class TUserDAL
    
        {
    
            private ISessionFactory _sessionFactory;
    
            private ISession _session;
    
     
    
            public TUserDAL(){
    
            _sessionFactory =(new Configuration()).Configure().BuildSessionFactory();
    
            _session = _sessionFactory.OpenSession();
    
            }
    
            /// <summary>
    
            /// 创洹?建¨
    
            /// </summary>
    
            /// <param name="client"></param>
    
            /// <returns></returns>
    
            public Boolean CreateUser(TUser client)
    
            {
    
                try
    
                {
    
                    _session.Save(client);
    
                    _session.Flush();
    
                    return true;
    
                }
    
                catch (Exception e1)
    
                {
    
                    return false;
    
                }
    
            }
    
            /// <summary>
    
            /// 通过yusertId删?出?数簓据Y
    
            /// </summary>
    
            /// <param name="Id"></param>
    
            /// <returns></returns>
    
            public bool DeleteUser(int userId)
    
            {
    
                try
    
                {
    
                    TUser temp = null;
    
                    temp = _session.Get<TUser>(userId);
    
                    _session.Delete(temp);
    
                    return true;
    
                }
    
                catch (Exception e2)
    
                {
    
                    return false;
    
                }
    
            }
    
            /// <summary>
    
            /// 通?过yuserId查é找ò信?息¢
    
            /// </summary>
    
            /// <param name="userId"></param>
    
            /// <returns></returns>
    
            public TUser FindTUserInfo(int userId)
    
            {
    
                return _session.Get<TUser>(userId);
    
            }
    
            /// <summary>
    
            /// 获?得?所ù有瓺ClientInfo
    
            /// </summary>
    
            /// <returns></returns>
    
            public IList<TUser> GetAllUserInfo()
    
            {
    
                return _session.CreateQuery("from TUser").List<TUser>();
    
            }
    
            /// <summary>
    
            /// 验é证¤用?户§名?与?密ü码?
    
            /// </summary>
    
            /// <param name="Name"></param>
    
            /// <param name="Pwd"></param>
    
            /// <returns></returns>
    
            public TUser ValidLoginNameAndPwd(string Name, string Pwd)
    
            {
    
                return _session.CreateQuery("from TUser as c where c.UserName=:fN and c.UserPwd=:fP").SetString("fN", Name).SetString("fP", Pwd).List<TUser>().FirstOrDefault();
    
            }
    
        }
    

     

    四、使用Ext.Net完成登录页面

    Ext.Net一个第三方控件,我们也可以从官网上找到,然后下载,将下图中的文件拷到bin下面:

    有一个hibernate.cfg.xml文件,是在下载Nhibernate中的,里面存放了数据库的连接信息。

    新建一个aspx页面作为我们的登录页,我们使用EXT.NET完成这个页面,代友如下:

     

    <div>
    
            <ext:Window ID="loginWin" runat="server" Title="CMS Login Page" Icon="Lock" Closable="false"
    
                InitCenter="true" AutoShow="true" Height="180" Draggable="false" Width="300"
    
                BodyStyle="padding-top:25px;">
    
                <Items>
    
                    <ext:TextField ID="LoginName" runat="server" EmptyText="please input your loginName"
    
                        FieldLabel="用? 户§ 名?" LabelWidth="80" Width="250" LabelAlign="Right" Margins="margin-top:20px;"
    
                        Height="30" AllowBlank="false">
    
                    </ext:TextField>
    
                    <ext:TextField ID="LoginPwd" runat="server" EmptyText="please input your loginPwd"
    
                        FieldLabel="密ü       码?" LabelWidth="80" Width="250" LabelAlign="Right"
    
                        Margins="margin-top:10px;" InputType="Password" AllowBlank="false">
    
                    </ext:TextField>
    
                </Items>
    
                <Buttons>
    
                    <ext:Button ID="submit" runat="server" Text="Login" Icon="Disk">
    
                        <DirectEvents>
    
                            <Click OnEvent="LoginOnClick" Before="var info1=#{LoginName}.getValue();var info2=#{LoginPwd}.getValue();if(info1==''){Ext.Msg.alert('tips','用户名不能为空!');return false;}if(info2==''){Ext.Msg.alert('tips','密ü码不能为空!');return false;}">
    
                                <EventMask Msg="Login......" MinDelay="5" ShowMask="true" />
    
                            </Click>
    
                        </DirectEvents>
    
                    </ext:Button>
    
                </Buttons>
    
            </ext:Window>
    
        </div>
    

     

     效果图如下:

     

     

    五、总结

      很久没有动手写东西,一开始是有点晕,当然对于哥来说才刚刚开始。对Nhibernate了解太少,但我更喜欢边做边学,这样才不用过于书本,我想这更容易复活。

  • 相关阅读:
    mysql/oracle 小技巧自动插入当前时间
    Java StringUtil 用法示例
    timestamp与String的相互转换
    gzip/gunzip用法
    maven常用指令
    微基站、宏基站区别
    CRAN方案
    让gvim中支持utf8编辑
    java正则表达式的几个小例子
    Sql Server数据库汉字按字母、笔划、拼音首字母、排序
  • 原文地址:https://www.cnblogs.com/xin_ny/p/xin_ny_NHibernate_One.html
Copyright © 2020-2023  润新知