1、NHibernteASPNETMVCJQuery实现增删改查精NHibernte+ASP.NET MVC+JQuery实现增删改查时间:2012-04-20 15:45来源:未知 作者:admin 点击: 934次我要投稿 高质量的ASP.NET空间,完美支持1.0/2.0/3.5/4.0/MVC等前言:本人自学NHibernate+ mvc+JQuery实现了一个简单的用户的增删改查的功能,现在做一 个小的整理,希望和我一样正在自学这几个技术的人能够共同参考,共同进步,下面我将分为好几步做为项目的讲解。也是为了我能够更加的熟悉项目的编写。1. 第一步:建立数据库(1 打开数据库SQL Ser
2、ver 2005,新建一个数据库NHibernate,然后再此数据库中新建一张表,起名为:Users,用来存放我们录入的数据,表的建立样式如下图所示:2. 第二步:建立项目,映射数据库(1 打开Visual Studio 2010集成开发环境,在Visual Studio 2010中建立一个ASP.MVC 2.0的项目,将会生成微软封装好的自带的MVC的整个架构文件,然后再整个项目下面新建一个类库COM.Entities,然后在这个类库下面新建一个User类,一个User.hbm.xml的XML文件用于映射表对应的类的表文件。然后再类和XML文件中使用NHibernate实现数据库的映射。1
3、Users类的作用是定义数据库中的字段属性,代码如下:/定义数据库中的字段属性public class Userspublic virtual string LogonId get; set; public virtual string Name get; set; public virtual string Password get; set; public virtual string EmailAddress get; set; public virtual DateTime LastLogon get; set; 2 User.hbm.xml文件的作用是映射刚才定义的字段的属性,代码如
4、下:xmlversion=1.0encoding=utf-8 ?idclasshibernate-mapping注:解说这段代码的内容1 这段代码就是使用NHibernate必须有的代码,定义了NHibernate的版本信息。2 ,name定义了所要映射的类,table定义了要映射的数据库中的表,lazy定义了是否要延迟加载,如果是默认值的话lazy=”true”,是延迟加载,这样的话需要在定义的类字段中加入Virtual,而lazy=”true”则不用延迟加载,立即执行。并且类字段中可写可不写。3 id这段代码的作用是被映射的类必须定义对应数据库的表主键字段,name标识属性的名字,Type
5、标识Hibernate类型的名字,column标识主键的名字,这三个属性都是可选的,可选的generator子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识,如果这个生成器实例需要某些配置值或者初始化参数,用param元素来传递。class=”assigned”的意思就是让应用程序在save(之前为对象分配一个表示符,这是generator元素没有指定时的默认生成策略。4 3. 第三步 MVC中建立项目,引入命名空间(1 在MVC项目下面添加文件夹DLL,将我们需要的一些NHibernate的dll(文件类库添加到这里,供我们引用。如图所示:4. 第四步 实现Model层的逻
6、辑(1 然后操作MVC层的Model层实现的功能如下:先在Model层地下建立2个文件夹和一个类,在各个文件夹下面在建立自己的类,建立完成之后如图所示:然后编程实现各个类中的功能,我们每个类的代码都说一遍。1 操作接口类IUsers,在这里就需要引入命名空间using COM.Entities;,代码如下:publicinterface IUsers /定义接口类IUsers/获取所有的用户List GetAll(;/更新用户bool UpdateUser(Users u;/添加用户bool AddUser(Users u;/删除用户bool DelUser(Users u;/使用唯一的标识查
7、询实体集/标识Users SelOne(string id;2 接下去来在MockModel文件夹下面的UserServices类中实现IUsers接口类的方法,需要用到NHibernate,所以引入操作NHibernate的命名空间及代码:using NHibernate实现简单的增删改查.Models.Interfaces;using COM.Entities;using NHibernate.Cfg;using NHibernate;using System.Collections;/ NHibernate操作数据库的地方public class UsersService:IUsers/
8、获得所有的用户信息public List GetAll(var cfg = new Configuration(;cfg.AddAssembly(COM.Entities;ISessionFactory factory = cfg.BuildSessionFactory(;ISession session = factory.OpenSession(;IList userList = session.CreateCriteria(typeof(Users.List(;List list = new List(;foreach (Users item in userListlist.Add(it
9、em;return list;/更新用户public bool UpdateUser(Users uvar cfg = new Configuration(;cfg.AddAssembly(COM.Entities;ISessionFactory factory = cfg.BuildSessionFactory(;ISession session = factory.OpenSession(;Users eUsers = (Userssession.Load(typeof(Users, u.LogonId;/使用事务来操作数据库ITransaction transaction = sessi
10、on.BeginTransaction(;eUsers.Name = u.Name;eUsers.Password = u.Password;eUsers.EmailAddress = u.EmailAddress;eUsers.LastLogon = DateTime.Now;transaction.Commit(;session.Flush(; /清理缓存,执行SQLreturn false;/删除用户public bool DelUser(Users uvar cfg=new Configuration(;cfg.AddAssembly(COM.Entities; /程序集的添加ISes
11、sionFactory factory=cfg.BuildSessionFactory(;ISession session=factory.OpenSession(;ITransaction transaction=session.BeginTransaction(;session.Delete(u;transaction.Commit(;session.Flush(;return true;/添加用户public bool AddUser(Users utryvar cfg = new Configuration(;cfg.AddAssembly(COM.Entities;ISessionF
12、actory factory = cfg.BuildSessionFactory(;ISession session = factory.OpenSession(;ITransaction transaction = session.BeginTransaction(;session.Save(u;transaction.Commit(;session.Close(;return true;catchreturn false;/使用唯一标识查询实体/标识ID/ 返回Users实体public Users SelOne(string idvar cfg = new Configuration(;
13、cfg.AddAssembly(COM.Entities;ISessionFactory factory = cfg.BuildSessionFactory(;ISession session = factory.OpenSession(;var u = (Userssession.Load(typeof(Users, id; / session.Load(根据指定的实体类或者ID从数据库中读取数据并返回与之对应的实体对象return u;3 最后实现ServiceBuilder.cs类的方法使其能够返回UserService类的方法,引入命名空间和代码的编写如下:usingNHibernat
14、e实现简单的增删改查.Models.Interfaces;usingNHibernate实现简单的增删改查.Models.MockModels;publicsealed class ServiceBuilder /sealed 修饰符可以应用于类、实例方法和属性。密封类不能被继承。密封方法会重写基类中的方法,但其本身不能在任何派生类中进一步重写。public static IUsers BuildUsersService(return new UsersService(;5. 第五步 实现MVC层的HomeController类(1 接下来实现MVC三层架构中的Controler层的业务逻辑,
15、在HomeControler类中引入命名空间和代码是:using NHibernate实现简单的增删改查.Models.Interfaces;using NHibernate实现简单的增删改查.Models;using COM. Entities;HandleErrorpublic class HomeController : Controllerpublic ActionResult Index(IUsers iuser = ServiceBuilder.BuildUsersService(;ViewDataUsersInfor = iuser.GetAll(;return View(Ind
16、ex;public ActionResult OperationUser(String textId = Request.FormText_ID;String textUserName = Request.FormText_UserName;String textPassword=Request.FormText_Password;String emailAddress = Request.FormText_EmailAddress;DateTime lastLogon = DateTime.Now;string operationT = Request.FormoperationT;var
17、u = new UsersLogonId = textId,Name = textUserName,Password = textPassword,EmailAddress = emailAddress,LastLogon = lastLogon;IUsers iuser = ServiceBuilder.BuildUsersService(;2010年全国高校市场营销大赛实施方案为确保参加2010年全国高职高专市场营销案例大赛ViewData全国高校市场营销大赛是由中国市场学会、教育部考试中心、教育部高等学校高职高专工商管理类专业教学指导委员会面向全国高职院校工商管理类大学生联合主办的营销实
18、践技能竞赛活动。 二、参赛目的elseViewDataAddSuccess = No;if (operationT.Equals(长:郭荣森成 员:陈舒平(指导老师)、;string strU = LogonId: + rU.LogonId + ,Name: + rU.Name + ,Password: + rU.Password + ,EmailAddress:四、参赛具体工作安排(一)学校预选赛日程安排return Content(strU;4月3if (operationT.Equals(DelOne12日,向2008级市场开发与营销专业学生公布“20103、4月13日,各班组建参赛小组,并按要求提交分组名单 iusersAll = ServiceBuilder.BuildUsersService(;ViewDataUsersInfor = iusersAll.GetAll(;return View(Index;对参赛队参赛作品提出初审意见和修改意见 About(5、4月206. 第6步(1 最后修改配置文件Web.Config的代码如下:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1