SSH:NHibernate的基本使用

SSH:NHibernate的基本使用 -.net

  一.O/R Mapping 概论

  工厂模式+反射+每个数据库的DAL层来解决数据访问层的代码

  针对数据库表中字段的变化我们是无法预料的,所以每一次用户需求的修改都会直接导致我们程序员来修改—实体类(BE层),数据访问层(DAL),这样同样会导致以上的各层BLL,UI等等的修改,长久的下去,只会造成项目的噩梦。

  在软件高速发展的今天,已经有很多的人在为这个问题而努力了,其中最有成果的就是java 区,因为java 区的开源精神,促使了一个新的概念的诞生。

  O/R Mapping的思想。

  二.什么是O/R Mappingspan>

  O:object

  R:relationship

  Mapping:映射

  将关系型数据库与我们的面向对象联系起来,

  将表与类(实体类,javabean)联系起来

  我们的程序直接与对象打交道,而不去关心是什么类型的数据库以及是不是数据库了。

  三.为什么要O/R Mappingspan>

  考虑我们原先的JDBC或者ADO.NET,我们的代码是这个样子的:

  Using System.Data.SqlClient;

  SqlConnection conn = new SqlConnection(“server=.;uid=sa;pwd=sa;database=dbtest”);

  SqlCommand cmd = conn.CreateCommand();

  cmd,.CommandText = “select * from account”;

  Con.Open();

  SqlDataReader sr = cmd.ExecuteQuery();

  While(sr.Read())

  {

  //………这里是我们需要的代码,才是我们真正关心的代码

  }

  Conn.Close();

  但是很烦琐,因为其中很多的代码都是与我们整个需求无关的。

  我们只需要关心的是:获得的结果以及增加,修改,删除的结果。

  所以我们要把数据库与面向对象的概念整和起来。

  四.我们的需求

  我们希望在编写代码的时候是这个样子的:

  //实体类

  Class User

  {

  string name;

  int age;

  ……..

  }

  //DAL层代码

  Class UserDAL

  {

  User u = new User();

  u.Name = “Guilee”;

  u.Age = 25;

  u.Id = 1;

  Add(u);//将新用户添加到数据库中

  Update(u);//修改数据库的内容

  Delete(u);//删除数据库的内容

  }

  我们不需要关心数据库是什么,如果数据库中表的字段进行了更改,我们也不需要对代码有过多的更改,做为程序员,我们应该更加关心的是当我拥有了这些数据之后,我的业务怎么样去完成!

  您不需要写SQL语句!!!!

  O/R Mapping框架帮您做好

  五.Hibernate

  在全球的程序员的努力下,我们终于看到了这样的产品的出现:

  JDO:一个不成熟的产品

  IBatis:一个半成品

  Hibernate:目前最有影响力,最好的O/R Mapping框架,已经成为Java持久层的标准。

  在.NET 区,已经有NHibernate,NIBatis这样的产品出现了!

  Hibernate一个数据持久层的框架,足以满足中小企业进行企业级开发的选择,能让你摆脱数据库的烦恼,不再过去写那麻烦的数据访问层的代码,不关心数据的连接与释放,把精力都放置在具体的业务逻辑上面!

  六.NHibernate的基本使用

  首先我们需要NHibernate的程序集:

  NHibernate.dll

  Log4net.dll

  Iesi.Collections.dll

  Castle.DynamicProxy.dll

  至少四个,其中NHibernate.dll是核心的程序集,Log4net.dll是日志记录程序集,

  Iesi.Collections.dll是集合框架的程序集,Castle.DynameicProxy.dll控制反转的程序集

  第二步:

  需要持久化类

  所谓的持久化类就是我们常说的实体类或者javabean,它是O/R Mapping的映射对象,通过控制它来封装我们的数据

  第三步:

  使用NHibernate的配置文件

  在配置文件中指定数据库的方式,连接数据库的方式

  让NHibernate知道如何去使用连接数据库

  第四步:

  编写O/R Mapping的映射文件

  让NHibernate知道如何去映射.NET与数据库之间的关系

  最后使用强大的NHibernate来编写你的程序!

  为了让NHibernate知道如何去连接数据库,所以你必须在我们.NET中的app.config或者web.config中去配置一下:

  type=”System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089″ />

  value=”NHibernate.Connection.DriverConnectionProvider” />

  value=”NHibernate.Dialect.MsSql2000Dialect” />

  value=”NHibernate.Driver.SqlClientDriver” />

  value=”server=(local);uid=sa;pwd=sa;database=dbtest” />

  

  制作一个持久化的类:

  public class Account //注意必须将属性设置为virtual虚拟的

  {

  private int id;

  virtual public int Id

  {

  get { return id; }

  set { id = value; }

  }

  private string username;

  virtual public string Username

  {

  get { return username; }

  set { username = value; }

  }

  private string password;

  virtual public string Password

  {

  get { return password; }

  set { password = value; }

  }

  }

  编写每个持久化类的配置

  其中xmlns指定了使用NHibernate的版本,

  class元素的name属性指定了持久化类的全名称,逗 隔开的是程序集的名称

  table属性指定了对应的数据库中表名称

  id元素是指定主键列名,name属性是指持久化类的属性名,column是表中列名

  property元素是其他的每一列与持久化类的哪个属性对应

  generator元素 中的class属性指定了是自动增长列

  保存为Account.hbm.xml文件

  使用NHibernate,你可以开始使用NHibernate来体验他们的强大之处了:)

  using NHibernate;

  using NHibernate.Cfg;

  Configuration cfg = new Configuration();

  cfg.AddAssembly(“BE”);

  ISessionFactory factory = cfg.BuildSessionFactory();

  ISession session = factory.OpenSession();

  ITransaction transaction = session.BeginTransaction();

  Account a = new Account();

  a.Username = “Guilee”;

  a.Password = “1234”;

  a.Id = 1;

  session.Save(a);

  //修改数据库的内容

  //session.Update(a);

  //删除数据库的内容

  //session.Delete(a);

  transaction.Commit();

  session.Close();

  首先,创建一个Configuration对象

  Configuration对象能够解析所有.Net对象和后台数据库中的映射关系。

  Configuration cfg = new Configuration();

  cfg.AddAssembly(“BE”); Configuration对象会搜索装配件里的任何以hbm.xml 结尾的文件。还有其他方法加载映射文件,但这种方式是最简单的。

  创建一个Session对象

  ISession对象提供一个到后台数据库的连接,ITransaction对象提供一个可以被NHibernate管理的事务。

  ISessionFactory factory = cfg.BuildSessionFactory(); ISession session = factory.OpenSession();

  ITransaction transaction = session.BeginTransaction(); 接着来增/删/改/查你的对象

  现在你可以用使用传统的.Net方法来操纵对象。

  NHibernate将查询的方式变成了面向对象的方法,针对查询最简单的使用方式是:

  ICriteria c = session.CreateCriteria(typeof(BEAccount));

  c.Add(Expression.Eq(“Username”,account.Username));

  c.Add(Expression.Eq(“Password”,account.Password));

  IList list = c.List();

  使用ICriteria 表示一次查询动作

  整个代码表示:

  查询Account表,找到username为account.Username并且password为account.Password的所有记录

  使用List来得到所有查询之后的结果。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树使用JDBC操作数据库数据库操作93694 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年8月12日
下一篇 2016年8月12日

相关推荐