日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC+Spring.net+Nhibernate+EasyUI+Jquery开发案例(1)

發(fā)布時間:2023/12/18 asp.net 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC+Spring.net+Nhibernate+EasyUI+Jquery开发案例(1) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:由于這段時間公司的事情比較的繁忙,每天都要學(xué)習(xí)新的東西,所以好久沒有寫博客了,今天抽空寫寫博客來記錄我這段時間研究的東西,給自己加深一下印象,我用easyUI的組件開發(fā)了一個簡單操作數(shù)據(jù)庫的小樣例,一些常用的數(shù)據(jù)庫操作都實現(xiàn)了,希望能和博客園里面的博主們交流交流意見。

首先我用的開發(fā)環(huán)境是Visual Studio 2010,ASP.NET MVC2.0,SQL SERVER2005,我用的NHibernate的版本是1.2.1,Spring.net的版本是1.1.0。

首先在這里將我的疑惑先說出來,希望有人能夠給我解答解答,在這里謝過了,我在用版本的時候我發(fā)現(xiàn)NHibernate1.2.1和spring.net1.1.0(低版本)結(jié)合最好,Nhibernate3.0和spring.net 1.3.1(高版本)結(jié)合做好,不知道我的認為正確嗎?但是低版本的話不能使用Nhibernate.Linq,只有Nhibernate3.0以上的版本支持Nhibernate,但是高版本的話我們項目里面有一個功能我們沒有做出來,就是我們故意把數(shù)據(jù)庫的連接字符串寫錯誤,然后我執(zhí)行不經(jīng)過數(shù)據(jù)操作的頁面的話,比如這個頁面我就輸出一句話,但是也會報錯,說無法連接數(shù)據(jù)庫,用戶登錄失敗,但是我想要的是在沒有操作數(shù)據(jù)庫的頁面可以正常顯示,在操作數(shù)據(jù)庫的頁面在提示錯誤即可?不知道哪位博友有什么好方法呢?這種效果在低版本下面我可以實現(xiàn)了。

  • 第一步:建立數(shù)據(jù)庫
  • (1)??? 打開數(shù)據(jù)庫SQL Server 2005,新建一個數(shù)據(jù)庫bjk241,然后再此數(shù)據(jù)庫中新建一張表,起名為:User_DepInfo,用來存放我們錄入的數(shù)據(jù),表的建立樣式如下圖所示:

    ?

  • 第二步:建立項目,類庫等
  • (1) 打開Visual Studio 2010集成開發(fā)環(huán)境,在Visual Studio 2010中建立一個ASP.MVC 2.0的項目,給項目其名稱是NewKJ241,將會生成微軟封裝好的自帶的MVC的整個架構(gòu)結(jié)構(gòu),然后在項目里面建立幾個類庫,用來存放我在后面建立的一些項目,當(dāng)我們建立完成之后如圖所示:

    ?

    (2) 當(dāng)我們看到這張圖的時候,我們是不是在疑惑這都是干什么的呢?不要著急,下面我就介紹一下各個項目和類庫的作用。

    ? 1) 首先我們看到了NewKJ241里面的內(nèi)容和我們剛建立的不一樣吧,那是因為我重新建立了幾個文件夾,將沒有的文件夾介紹一下,Configs文件夾里面放的是spring.net的XML節(jié)點,實現(xiàn)的作用是鏈接數(shù)據(jù)庫和映射整個框架,下面我會詳細介紹的,dlls文件夾里面放的是我們所要引用的dll,如圖所示:

    ?

    ,easyUI文件夾里面是存放的是我們需要引用的easyUI的類庫,其他的都是建立的時候自動生成的,后面會討論的。

    ? 2) NewKJ241.Model類庫的作用是存放映射的數(shù)據(jù)庫的文件。

    ? 3) NewKJ241.IDao類庫的作用是實現(xiàn)了我們所需要的在項目中實現(xiàn)數(shù)據(jù)庫方法的接口。

    ? 4) NewKJ241. NhibernateDao類庫的作用是實現(xiàn)了IDao的接口,完成了接口所要實現(xiàn)的方法的代碼。

    ? 5)NewKJ241.IBLL類庫的作用是實現(xiàn)了我們在項目中要使用Spring.NET所要使用的接口,和NewKJ241.IDao接口的寫法一模一樣。

    ? 6)NewKJ241.BLL類庫的方法是實現(xiàn)了Nhibernate的實現(xiàn)方法,繼承自IBLL項目,是為了使用Spring.NET所寫的方法。

    下面我就講我寫的東西詳細的講述一下,有什么不足或者缺點我們可以討論。

  • 第三步:NHibernate映射文件
  • (1) 首先我們要映射出數(shù)據(jù)庫中表的信息的文件,這里我們怎么映射呢,那么多的代碼??別著急,我們可以用一個自動生成映射文件的組件CodeSmith軟件,這個軟件可以快速的幫助我們生成映射文件,關(guān)于這個軟件怎么使用可以看我以前寫的篇博客,那里詳細的敘述了如何使用這個軟件:http://www.cnblogs.com/hanyinglong/archive/2012/04/21/2462302.html。

    (2) 接下來我們在NewKJ241.Model里面建立一個文件夾Mappings,在這個文件夾里面我們存放了映射的文件,生成之后附加到項目中如圖所示:

    ?

    1)? UserDepInfo的作用是定義數(shù)據(jù)庫中的字段,再用CodeSmith生成的時候模式字段屬性是不加Virtual的,我們?nèi)藶榈慕o字段屬性加上,代碼如下:

    ??????? protected int _id;

    ???? ???protected int _depID;

    ??????? protected string _depName;

    ??????? public UserDepInfo() { }

    ??????? public UserDepInfo(int depID, string depName)

    ??????? {

    ??????????? this._depID = depID;

    ??????????? this._depName = depName;

    ??????? }

    ??????? public virtual int Id

    ??????? {

    ??????????? get { return _id; }

    ??????????? set { _id = value; }

    ??????? }

    ??????? public virtual int DepID

    ??????? {

    ??????????? get { return _depID; }

    ??????????? set { _depID = value; }

    ??????? }

    ??????? public virtual string DepName

    ??????? {

    ??????????? get { return _depName; }

    ??????????? set

    ??????????? {

    ??????????????? if (value != null && value.Length > 50)

    ??????????????????? throw new ArgumentOutOfRangeException("Invalid value for DepName", value, value.ToString());

    ??????? ????????_depName = value;

    ??????????? }

    ??????? }

    2) 然后映射文件的代碼如下:注意,在這里我們需要把這個XML文件改成嵌入的資源,不然后面我們事先不了功能,怎么改呢?很簡單,右鍵——屬性——生成操作改成嵌入的資源,這樣就OK了,前期準(zhǔn)備工作完成了下面我們就開始寫方法了。在這里又看不懂是什么意思的,可以看我的博客:http://www.cnblogs.com/hanyinglong/archive/2012/04/20/2459314.html。

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

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

    ?????????????????? assembly="NewKJ241.Model.UserDepInfo"

    ?????????????????? namespace="NewKJ241.Model.UserDepInfo">

    ? <class name="NewKJ241.Model.UserDepInfo,NewKJ241.Model" table="User_DepInfo" lazy="false">

    ??? <!--下面是使用緩存所使用的一句話,但是本項目里面的二級緩存注釋掉了,所以這里也注釋-->

    ??? <!--<cache usage="read-write"/>-->

    ??? <!--部門表主鍵ID-->

    ??? <id name="Id" type="Int32" unsaved-value="null">

    ????? <column name="ID" length="4" sql-type="int" not-null="true" unique="true"/>

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

    ??? </id>

    ??? <!--部門表ID-->

    ??? <property name="DepID" type="Int32">

    ????? <column name="DepID" length="4" sql-type="int" not-null="false"/>

    ??? </property>

    ??? <!--部門表名稱-->

    ??? <property name="DepName" type="String">

    ????? <column name="DepName" length="50" sql-type="varchar" not-null="false"/>

    ??? </property>

    ? </class>

    </hibernate-mapping>

  • 第四步:建立Dao接口,實現(xiàn)操作數(shù)據(jù)庫的方法
  • (1) 在NewKJ241.IDao類庫下面新建一個類,起名為:IUserDepInfoDao,然后在此類中寫要實現(xiàn)方法的接口,代碼如下:

    ? //where表明了對類型變量T的約束關(guān)系,where T : class表示類型變量T是繼承自class或者class本身

    ??? public interface IUserDepInfoDao<T> where T : class

    ??? {

    ??????? /// <summary>

    ??????? /// 獲取實體

    ??????? /// </summary>

    ??????? /// <param name="id">主鍵</param>

    ?? ?????/// <returns>實體</returns>

    ??????? T Get(object id);

    ?

    ??????? /// <summary>

    ??????? /// 獲取實體

    ??????? /// </summary>

    ??????? /// <param name="id">主鍵</param>

    ??????? /// <returns>實體</returns>

    ??????? T Load(object id);

    ?

    ??????? /// <summary>

    ??????? /// 插入實體

    ??????? /// </summary>

    ??????? /// <param name="entity">實體</param>

    ??????? /// <returns>插入的數(shù)據(jù)</returns>

    ??????? object Save(T entity);

    ?

    ??????? /// <summary>

    ??????? /// 修改實體

    ??????? /// </summary>

    ??????? /// <param name="entity">實體數(shù)據(jù)</param>

    ?????? ?void Update(T entity);

    ?

    ??????? /// <summary>

    ??????? /// 保存或者修改實體

    ??????? /// </summary>

    ??????? /// <param name="entity">實體數(shù)據(jù)</param>

    ??????? void SaveOrUpdate(T entity);

    ?

    ??????? /// <summary>

    ??????? /// 刪除實體

    ??????? /// </summary>

    ??????? /// <param name="id">主鍵ID</param>

    ??????? void Delete(object id);

    ?

    ??????? /// <summary>

    ??????? /// 刪除實體

    ??????? /// </summary>

    ??????? /// <param name="odList">主鍵ID的集合,刪除多個項</param>

    ??????? void Delete(string idList);

    ?

    ??????? /// <summary>

    ??????? ///讀取如果用戶不輸入任何信息進行查詢的方法

    ??????? /// </summary>

    ??????? /// <param name="sort">按照某個字段進行排序</param>

    ??????? /// <param name="order">按照某個字段進行排序</param>

    ??????? /// <returns></returns>

    ??????? IList<UserDepInfo> loadByAll(string sort, string order);

    ?

    ??????? /// <summary>

    ??? ????/// 讀取用戶輸入條件進行查詢的方法

    ??????? /// </summary>

    ??????? /// <param name="sort">按照某個字段進行排序</param>

    ??????? /// <param name="order">按照某個字段進行排序</param>

    ??????? /// <param name="name">只用戶輸入的信息</param>

    ??????? /// <returns></returns>

    ??????? IList<UserDepInfo> loadAllCheck(string sort, string order, string name);

    ?

    ??????? /// <summary>

    ??????? ///

    ??????? /// </summary>

    ??????? /// <param name="total">總的數(shù)量</param>

    ??????? /// <param name="page">當(dāng)前的頁數(shù)</param>

    ??????? /// <param name="rows">每頁所顯示的數(shù)量</param>

    ????? ??/// <param name="order">按照某個字段進行排序</param>

    ??????? /// <param name="sort">按照某個字段進行排序</param>

    ??????? /// <param name="DepName">只用戶輸入的信息</param>

    ??????? /// <returns></returns>

    ??????? IList<UserDepInfo> LoadAllByPage(out long total, int page, int rows, string order, string sort, string DepName);

    }

    這里就沒什么說的了,寫法都很固定!!

  • 第五步:建立NhibernateDao項目,實現(xiàn)IDao接口的方法
  • (1) 在NewKJ241.Nhibernate類庫下面建立類,起名為:UserDepInfoDao,在該方法中繼承自IDao接口,實現(xiàn)了IDAO接口里面的所有方法,在書寫本代碼的時候,我們必須引入dll,引入的dll如圖所示:

    ?

    代碼如下:

    ?public class UserDepInfoDao<T> : HibernateDaoSupport, IUserDepInfoDao<T> where T : class

    ??? {

    ??????? public T Get(object id)

    ??????? {

    ??????????? return this.HibernateTemplate.Get<T>(id);

    ??????? }

    ?

    ??????? public T Load(object id)

    ??????? {

    ??????????? return this.HibernateTemplate.Load<T>(id);

    ??????? }

    ?

    ??????? public virtual object Save(T entity)

    ??????? {

    ??????????? return this.HibernateTemplate.Save(entity);

    ??????? }

    ?

    ??????? public void Update(T entity)

    ??????? {

    ??????????? this.HibernateTemplate.Update(entity);

    ??????? }

    ?

    ??? ????public void SaveOrUpdate(T entity)

    ??????? {

    ??????????? this.HibernateTemplate.SaveOrUpdate(entity);

    ??????? }

    ?

    ??????? public void Delete(object id)

    ??????? {

    ??????????? var entity = this.HibernateTemplate.Get<T>(id);

    ??????????? if (entity == null)

    ??????????? {

    ??????????????? return;

    ??????????? }

    ??????????? else

    ??????????? {

    ??????????????? this.HibernateTemplate.Delete(entity);

    ??????????? }

    ??????? }

    ?

    ??????? public void Delete(string idList)

    ??????? {

    ??????????? string[] idl = idList.Split(',');

    ??????????? int len = idl.Length;

    ??????????? for (int i = 0; i < len; i++)

    ??????????? {

    ??????????????? var entity = this.HibernateTemplate.Get<T>(int.Parse(idl[i].ToString()));

    ??????????????? if (entity == null)

    ??????????????? {

    ??????????????? ????return;

    ??????????????? }

    ??????????????? else

    ??????????????? {

    ??????????????????? this.HibernateTemplate.Delete(entity);

    ??????????????? }

    ??????????? }

    ??????? }

    ?

    ??????? public IList<UserDepInfo> loadByAll(string sort, string order)

    ??????? {

    ??? ????????string hql = "from UserDepInfo order by " + sort + " " + order;

    ??????????? return this.HibernateTemplate.Find<UserDepInfo>(hql).ToList();

    ?

    ??????? }

    ?

    ??????? public IList<UserDepInfo> loadAllCheck(string sort, string order, string name)

    ??????? {

    ??????????? string hql = "from UserDepInfo where DepName like ? order by " + sort + " " + order;

    ??????????? return this.HibernateTemplate.Find<UserDepInfo>(hql, new object[] { "%" + name + "%" }).ToList();

    ??????? }

    ?

    ?

    ??????? public IList<UserDepInfo> LoadAllByPage(out long total, int page, int rows, string order, string sort, string DepName)

    ??????? {

    ??????????? IList<UserDepInfo> list = null;

    ??????????? if (DepName == null)

    ??????????? {

    ??????????????? list = this.loadByAll(sort, order);

    ??????????? }

    ??????????? else

    ??????????? {

    ??????????????? list = this.loadAllCheck(sort, order, DepName);

    ??????????? }

    ??????????? total = list.LongCount();

    ??????????? list = list.Skip((page - 1) * rows).Take(rows).ToList();

    ??????????? return list;

    ??????? }

    }

    哎,工作一天了,累了,回學(xué)校了,明天繼續(xù),今天寫的這些都是基礎(chǔ),后面還會在寫這個項目的,一直到這個項目寫完!!,也是最有知識點了,所謂學(xué)習(xí)嗎,一步一個腳印,慢慢來吧!!!

    ?

    下載地址:http://www.chuxinm.com/Shop/Detail/Detail?id=b88e9907dbaa4b3db297443081ab238d

    轉(zhuǎn)載于:https://www.cnblogs.com/hanyinglong/archive/2012/05/24/2517000.html

    總結(jié)

    以上是生活随笔為你收集整理的ASP.NET MVC+Spring.net+Nhibernate+EasyUI+Jquery开发案例(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。