学习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了解太少,但我更喜欢边做边学,这样才不用过于书本,我想这更容易复活。

posted @ 2013-01-20 16:17  静悦  阅读(518)  评论(0编辑  收藏  举报