Nhibernate2.0+oracle10g+VS2008 第一个例子成功通过

来源:互联网 发布:linux 自动解压war包 编辑:程序博客网 时间:2024/06/02 02:26

        学习Nhibernate有几天了,之前很久的一段时间,也许有两年前吧,小猪就给我灌输了ORM的思想,Hibernate在Java里是如何如何的好用,可是一直都没接触过JAVA,所以没什么感觉。最近项目都完成的差不多了,也有时间坐下来学习学习,给自己充充电了。就先学学很多人都不用的Nhibernate——因为LinQ的出现,似乎比Nhibernate更好。

        基本思想搞明白了,要做个例子,先有个感性认识。下载了Nhibernate的2.0版本。下载了一些例子,可大多例子都是用SQL Server,没有用Oracle10g的,那就在原来的基础上改改看吧。

 

*********库中建立表student

 

        1、App.config——C/S版本的

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>

  <nhibernate>
    <add key="hibernate.show_sql" value="false"/>
    <add key="hibernate.dialect" value="NHibernate.Dialect.Oracle9Dialect"/>
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.OracleClientDriver"/>
    <add key="hibernate.connection.connection_string" value="Data Source=orcl12;User Id=code;Password=code"/>
    <add key="hibernate.query.substitutions" value="true=1;false=0"/>
  </nhibernate>
</configuration>

 

   只需要修改蓝色地方,就可以连接数据库了。

 

2、类文件

class Student
{              
        public virtual int Num { get ; set ; }

        public virtual string Name { get ; set ; }       

        public virtual string Age {get ; set ; }
}

 

3、映射文件

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name=" NhibernateSample1.Missile,NHibernateSample1" table="code.missiletab">
    <id name="Num" column="num" type="int"  >
      <generator class="assigned" />
    </id>
    <property name="Name" column="name" type="String" length="20" />
    <property name="Weight" column="age" type="String" length="20"/>
  </class>
</hibernate-mapping>

*********映射文件主要是将类和数据表的字段相关联,类的属性对应表的字段

 

4、程序实现数据读、增、删、改

  public static void Main()
        {
            Configuration cfg = new Configuration();
            cfg.AddAssembly("NhibernateSample1"); 
            ISessionFactory factory = cfg.BuildSessionFactory();
            ISession session = factory.OpenSession();
            ITransaction transaction;
            ICriteria criteria = session.CreateCriteria(typeof(Missile));

            do
            {
                Console.WriteLine("现在数据表中的数据如下:");
                IList MissileList = session.CreateCriteria(typeof(Missile)).List();
                foreach (Missile missile in MissileList)
                {
                    Console.WriteLine("姓名:" + missile.Name + ";编号:" + missile.Num + ";年龄:" + missile.Age);
                }
                Console.WriteLine("请选择您要进行的操作:添加数据“A”,修改数据“M”,删除数据“D”,查询数据“Q”,排序数据“O”,退出“E”");

                string input = Console.ReadLine();
                switch (input)
                {
                    case "m":
                        transaction = session.BeginTransaction();
                        Console.WriteLine("请输入您要修改的数据项的编号:");
                        Missile modMissile = (Missile)session.Get(typeof(Missile), int.Parse(Console.ReadLine()));
                        Console.WriteLine("请输入您要修改的名称:");
                        modMissile.Name = Console.ReadLine();
                        Console.WriteLine("请输入您要修改的年龄:");
                        modMissile.Weight = Console.ReadLine();                       
                        transaction.Commit();
                        Console.WriteLine("数据修改成功!");
                        break;
                    case "d":
                        transaction = session.BeginTransaction();
                        Console.WriteLine("请输入您删除的数据项的编号:");
                        Missile delMissile = (Missile)session.Get(typeof(Missile), int.Parse(Console.ReadLine()));
                        session.Delete(delMissile);
                        transaction.Commit();
                        Console.WriteLine("数据删除成功!");
                        break;
                    case "a":
                        transaction = session.BeginTransaction();
                        Missile newMissile = new Missile();
                        Console.WriteLine("请输入您要添加的编号:");
                        newMissile.Num =int.Parse(Console.ReadLine());
                        Console.WriteLine("请输入您要添加的名称:");
                        newMissile.Name = Console.ReadLine();
                        Console.WriteLine("请输入您要添加的年龄:");
                        newMissile.Weight = Console.ReadLine();                      
                        session.Save(newMissile);
                        transaction.Commit();
                        Console.WriteLine("数据添加成功!");
                        break;
                    case "q":
                        criteria.Add(Expression.Gt("Num",2));
                        IList crilist = criteria.List();
                        Console.WriteLine("通过Criteria方式,您要查询的编号大于2的数据为:");
                        foreach (Missile missile in crilist)
                        {              
                            Console.WriteLine("名称:" + missile.Name + ";编号:" + missile.Num + ";年龄:" + missile.Age );
                        }
                        IQuery query = session.CreateQuery("from Missile missile where missile.Num<2");
                        IList quelist = query.List();
                        Console.WriteLine("通过HQL方式,您要查询的编号小于2的数据为:");
                        foreach (Missile missile in quelist)
                        {
                            Console.WriteLine("名称:" + missile.Name + ";编号:" + missile.Num + ";年龄:" + missile.Age );
                        }
                        break;
                    case "o":
                        Console.WriteLine("请选择您要排序的方式:升序“A”,降序“D”");
                        if (Console.ReadLine() == "a")
                        {
                            criteria.AddOrder(Order.Asc("Mum"));
                            IList asclist = criteria.List();
                            Console.WriteLine("按照升序方式排序后的数据为:");
                            foreach (Missile missile in asclist)
                            {
                                Console.WriteLine("名称:" + missile.Name + ";编号:" + missile.Num + ";年龄:" + missile.Age );
                            }
                        }
                        else
                        {
                            criteria.AddOrder(Order.Desc("Num"));
                            IList dsclist = criteria.List();
                            Console.WriteLine("按照降序方式排序后的数据为:");
                            foreach (Missile missile in dsclist)
                            {
                                Console.WriteLine("名称:" + missile.Name + ";编号:" + missile.Num + ";年龄:" + missile.Age);
                            }
                        }
                        break;
                    case "e":
                        return;
                    default:
                        Console.WriteLine("请输入正确的选项!");
                        break;
                }
                Console.ReadLine();
            }
            while (Console.ReadLine() != "e");

            session.Close();
        }


***************Ok了,下一步就是具体的研究了,向前进,向前进………………

原创粉丝点击