欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
博客園 - Terrylee的技術(shù)專(zhuān)欄 - 基于NHibernate的三層結構應用程序開(kāi)發(fā)初步

本文并不是去詳細的介紹如何使用NHibernate,而是通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)演示基于NHibernate的三層結構應用程序開(kāi)發(fā)過(guò)程。關(guān)于NHibernate的有關(guān)文檔,DDL已經(jīng)做了漢化,但是由于英文文檔自身就不完善,所以漢化后也是不全。菩提樹(shù)在一篇《NHibernate學(xué)習之路》隨筆中談到了學(xué)習NHibernate遇到的困難,也希望大家把自己在使用NHibernate中的經(jīng)驗和心得能夠共享出來(lái),與大家分享。另外我也是剛開(kāi)始接觸NHiernate,有錯誤之處還請大家指點(diǎn)。

第一步:準備數據表

在這里用一個(gè)最簡(jiǎn)單的例子,有一張關(guān)于的用戶(hù)的表,有編號,姓名,密碼,Email地址和最后一次的登錄時(shí)間幾個(gè)字段。

Create Table Users(

    LogonID 
varchar(20Primary key,

    Name 
varchar(40),

    Password 
varchar(20),

    EmailAddress 
varchar(40) ,

    LastLogon 
datetime

)

第二步:創(chuàng )建需要被持久化的類(lèi)

.NET中創(chuàng )建一個(gè)NHibernateWebDemo.Model的工程,添加User實(shí)體類(lèi)。

//User.cs

using System;

namespace NHibernateWebDemo.Model

{

    
public class User

    
{

        
public User()

        
{   

        }


        
private string id;

        
private string userName;

        
private string password;

        
private string emailAddress;

        
private DateTime lastLogon;

        
public string Id 

        
{

            
get 
return id; }

            
set 
{ id = value; }

        }


        
public string UserName 

        
{

            
get 
return userName; }

            
set 
{ userName = value; }

        }


        
public string Password 

        
{

            
get 
return password; }

            
set 
{ password = value; }

        }


        
public string EmailAddress 

        
{

            
get 
return emailAddress; }

            
set 
{ emailAddress = value; }

        }


        
public DateTime LastLogon 

        
{

            
get 
return lastLogon; }

            
set 
{ lastLogon = value; }

        }


    }


}

第三步:創(chuàng )建持久化映射文件

該文件的命名為User.hbm.xml,并且與User.cs放在同一個(gè)目錄里。設置該文件的生成操作屬性為“嵌入的資源”,這一點(diǎn)要切記。另外,使用編號當作主鍵,由用戶(hù)輸入,所以在映射文件中用assigned。

<?xml version="1.0" encoding="utf-8" ?>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">

        
<class name="NHibernateWebDemo.Model.User, NHibernateWebDemo.Model" table="users">

               
<id name="Id" column="LogonId" type="String" length="20"> 

                       
<generator class="assigned" /> 

               
</id>

               
<property name="UserName" column= "Name" type="String" length="40"/> 

               
<property name="Password" type="String" length="20"/> 

               
<property name="EmailAddress" type="String" length="40"/>

               
<property name="LastLogon" type="DateTime"/>

        
</class>

</hibernate-mapping>

第四步:進(jìn)行配置文件的設置

在配置文件中,我們要告訴NHibernate所使用的數據庫是什么,以及如何連接該數據庫。

<configSections>

    
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  
</configSections>

<nhibernate>

               
<add key="hibernate.connection.provider"          

                       value
="NHibernate.Connection.DriverConnectionProvider"/>

               
<add key="hibernate.dialect"                      

                       value
="NHibernate.Dialect.MsSql2000Dialect"/>

               
<add key="hibernate.connection.driver_class"          

                       value
="NHibernate.Driver.SqlClientDriver"/>

               
<add key="hibernate.connection.connection_string" 

                       value
="server=.;uid=sa;pwd=sa;database=test"/>

        
</nhibernate>

第五步:編寫(xiě)數據訪(fǎng)問(wèn)層的公用類(lèi)

在這里,編寫(xiě)了兩個(gè)公用的類(lèi),分別進(jìn)行Session的創(chuàng )建和實(shí)體的操作。在這兩個(gè)類(lèi)中用單件模式,來(lái)限制Session的創(chuàng )建。為了做到與具體的應用程序無(wú)關(guān),在這里把程序集的名稱(chēng)作為參數,傳遞給OpenSession()方法??梢园堰@兩個(gè)類(lèi)單獨放在一個(gè)名為Common的工程下,這里先把它們放在DAL層中。這兩個(gè)類(lèi)只是個(gè)人的一種寫(xiě)法,大家可以自行去編寫(xiě)。

//SessionFactory.cs

using System;

using System.Reflection;

using System.Data;

using NHibernate;

using NHibernate.Cfg;

using NHibernate.Tool.hbm2ddl;

namespace NHibernateWebDemo.DAL

{

    
public class SessionFactory

    
{

        
public SessionFactory()

        
{

            

        }


        
private static ISessionFactory sessions;

        
private static Configuration cfg;

        
static readonly object padlock = new object();

        
public static ISession OpenSession(string AssemblyName)

        
{

            
if(sessions == null)

            
{

                
lock(padlock)

                
{

                    
if(sessions == null)

                    
{

                        BuildSessionFactory(AssemblyName);

                    }


                }


            }


            
return sessions.OpenSession();

        }


        
private static void BuildSessionFactory(string AssemblyName)

        
{

            cfg 
= new Configuration();

            cfg.AddAssembly(AssemblyName);

            sessions 
= cfg.BuildSessionFactory();

        }


    }


}

 

//EntityControl.cs

using System;

using System.Collections;

using NHibernate;

 

namespace NHibernateWebDemo.DAL

{

    
public class EntityControl

    
{

        
private static EntityControl entity;

        
private string _AssemblyName;

        
static readonly object padlock = new object();

        
public static EntityControl CreateEntityControl(string AssemblyName)

        
{

            
if(entity == null)

            
{

                
lock(padlock)

                
{

                    
if(entity == null)

                    
{

                        entity 
= new EntityControl();

                        entity._AssemblyName 
= AssemblyName;

                    }


                }


            }


            
return entity;

        }


        
public void AddEntity(Object entity)

        
{

            ISession session 
= SessionFactory.OpenSession(_AssemblyName);

            ITransaction transaction 
= session.BeginTransaction();

            
try

            
{

                session.Save(entity);

                transaction.Commit();

            }


            
catch(Exception ex)

            
{

                transaction.Rollback();

                
throw ex;

            }


            
finally

            
{

                session.Close();

            }


        }


        
public void UpdateEntity(Object entity,Object key)

        
{

            ISession session 
= SessionFactory.OpenSession(_AssemblyName);

            ITransaction transaction 
= session.BeginTransaction();

            
try

            
{

                session.Update(entity,key);

                transaction.Commit();

            }


            
catch(Exception ex)

            
{

                transaction.Rollback();

                
throw ex;

            }


            
finally

            
{

                session.Close();

            }


        }


        
public void DeleteEntity(object entity)

        
{

            ISession session 
= SessionFactory.OpenSession(_AssemblyName);

            ITransaction transaction 
= session.BeginTransaction();

            
try

            
{

                session.Delete(entity);

                transaction.Commit();

            }


            
catch(Exception ex)

            
{

                transaction.Rollback();

                
throw ex;

            }


            
finally

            
{

                session.Close();

            }


        }


        
public IList GetEntities(string strHQL)

        
{

            IList lst;

            ISession session 
= SessionFactory.OpenSession(_AssemblyName);

            ITransaction transaction 
= session.BeginTransaction();

 

            lst
=session.Find(strHQL);

            transaction.Commit();

            session.Close();

            
return lst;

        }

360docimg_501_
360docimg_502_    }

360docimg_503_
360docimg_504_}

第六步:編寫(xiě)數據訪(fǎng)問(wèn)層

創(chuàng )建一個(gè)名為NHibernateWebDemo.DAL的工程,數據訪(fǎng)問(wèn)層的代碼編寫(xiě)非常簡(jiǎn)單,在創(chuàng )建EntityControl的實(shí)例時(shí),需要把Model的程序集名稱(chēng)作為參數傳入,可以通過(guò)配置文件來(lái)避免程序集名稱(chēng)的硬編碼。

360docimg_505_//UserDAL.cs
360docimg_506_

360docimg_507_
using System;
360docimg_508_
360docimg_509_
using System.Collections;
360docimg_510_
360docimg_511_
using NHibernateWebDemo.Model;
360docimg_512_
360docimg_513_
namespace NHibernateWebDemo.DAL
360docimg_514_
360docimg_515_360docimg_516_
360docimg_517_{
360docimg_518_
360docimg_519_    
public class UserDAL
360docimg_520_
360docimg_521_360docimg_522_    
360docimg_523_{
360docimg_524_
360docimg_525_        
private EntityControl control;
360docimg_526_
360docimg_527_        
public UserDAL()
360docimg_528_
360docimg_529_360docimg_530_        
360docimg_531_{
360docimg_532_
360docimg_533_            control 
= EntityControl.CreateEntityControl("NHibernateWebDemo.Model");
360docimg_534_
360docimg_535_        }

360docimg_536_
360docimg_537_        
public void AddUser(User user)
360docimg_538_
360docimg_539_360docimg_540_        
360docimg_541_{
360docimg_542_
360docimg_543_            control.AddEntity(user);
360docimg_544_
360docimg_545_        }

360docimg_546_
360docimg_547_        
public void UpdateUser(User user,string Id)
360docimg_548_
360docimg_549_360docimg_550_        
360docimg_551_{
360docimg_552_
360docimg_553_            control.UpdateEntity(user,user.Id);
360docimg_554_
360docimg_555_        }

360docimg_556_
360docimg_557_        
public void DeleteUser(User user)
360docimg_558_
360docimg_559_360docimg_560_        
360docimg_561_{
360docimg_562_
360docimg_563_            control.DeleteEntity(user);
360docimg_564_
360docimg_565_        }
 
360docimg_566_
360docimg_567_        
public IList GetAllUsers(string strHQL)
360docimg_568_
360docimg_569_360docimg_570_        
360docimg_571_{
360docimg_572_
360docimg_573_            
return control.GetEntities(strHQL);
360docimg_574_
360docimg_575_        }

360docimg_576_
360docimg_577_    }

360docimg_578_
360docimg_579_}

第七步:編寫(xiě)業(yè)務(wù)邏輯層

建立NHibernateWebDemo.BLL工程,為了簡(jiǎn)單期間,在業(yè)務(wù)邏輯層中我沒(méi)有做任何的業(yè)務(wù)檢測。

360docimg_580_//UserBLL.cs
360docimg_581_

360docimg_582_
using System;
360docimg_583_
360docimg_584_
using System.Collections;
360docimg_585_
360docimg_586_
using NHibernateWebDemo.DAL;
360docimg_587_
360docimg_588_
using NHibernateWebDemo.Model;
360docimg_589_
360docimg_590_
namespace NHibernateWebDemo.BLL
360docimg_591_
360docimg_592_360docimg_593_
360docimg_594_{
360docimg_595_
360docimg_596_    
public class UserBLL
360docimg_597_
360docimg_598_360docimg_599_    
360docimg_600_{
360docimg_601_
360docimg_602_        
public void AddUser(User user)
360docimg_603_
360docimg_604_360docimg_605_        
360docimg_606_
360docimg_607_
360docimg_608_            UserDAL dal 
= new UserDAL();        
360docimg_609_
360docimg_610_            dal.AddUser(user);
360docimg_611_
360docimg_612_        }

360docimg_613_
360docimg_614_        
public void UpdateUser(User user,string Id)
360docimg_615_
360docimg_616_360docimg_617_        
360docimg_618_{
360docimg_619_
360docimg_620_            UserDAL dal 
= new UserDAL();
360docimg_621_
360docimg_622_            dal.UpdateUser(user,Id);
360docimg_623_
360docimg_624_        }

360docimg_625_
360docimg_626_        
public void DeleletUser(User user)
360docimg_627_
360docimg_628_360docimg_629_        
360docimg_630_{
360docimg_631_
360docimg_632_            UserDAL dal 
= new UserDAL();
360docimg_633_
360docimg_634_            dal.DeleteUser(user);
360docimg_635_
360docimg_636_        }

360docimg_637_
360docimg_638_        
public IList GetAllUsers(string strHQL)
360docimg_639_
360docimg_640_360docimg_641_        
360docimg_642_{
360docimg_643_
360docimg_644_            UserDAL dal 
= new UserDAL();
360docimg_645_
360docimg_646_            
return dal.GetAllUsers(strHQL);
360docimg_647_
360docimg_648_        }

360docimg_649_
360docimg_650_    }

360docimg_651_
360docimg_652_}

第八步:實(shí)現用戶(hù)界面

用戶(hù)界面很簡(jiǎn)單,這里就不給出代碼了,完成后的用戶(hù)界面:

360docimg_653_

完整代碼下載:/Files/Terrylee/NHibernateWebDemo.rar

Feedback

# re: 基于NHibernate的三層結構應用程序開(kāi)發(fā)初步  回復   

2006-02-16 18:11 by 菩提樹(shù)
這個(gè),張老三寫(xiě)的那幾篇更好,而且他的DOMAINOBJECTCONTROL寫(xiě)的很棒
提幾個(gè)小建議:
1,業(yè)務(wù)邏輯層是不是該進(jìn)行一下業(yè)務(wù)邏輯的判斷呀
例如,ADD一個(gè)USER前,是不是該判斷是下該USER是不是存在
USER的各個(gè)屬性值,是否符合邏輯
這些都不做的話(huà),這些工作放在哪兒呢?
DAL僅負責串行化數據以及事務(wù)處理,而B(niǎo)AL剛負責業(yè)務(wù)邏輯,所謂業(yè)務(wù)邏輯,應該包含這些吧
最后,一個(gè)建議,不要把校驗的任務(wù)交給DBMS,不要依賴(lài)于它的約束等,雖然你寫(xiě)了約束等,但是,不要等在串行化時(shí),才檢查數據有效性
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
NFramework開(kāi)源AOP框架ORM的實(shí)現原理與應用 - 286資訊
ASp.net 剖析三層架構(2)
手寫(xiě)IOC
NHibernate入門(mén)級示例(增 刪 改)
簡(jiǎn)單實(shí)現Hibernate分表的select,insert,delete及所有操作
Nhibernate3.3.3sp1基礎搭建測試
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久