Hibernate初体验

                      Hibernate初体验

Hibernate概述:

   1 Hibernate出现的原因:在对数据库操作的时候,难免会遇到数据库表字段比较多的时候,编写数据访问层的时候是相当的繁琐的。所以为了操作数据库方 便,Hibernate可以JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命 意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

  2 出现的前提:在理解Hibernate框架思想的前提是对ORM(对象关系映射)的理解。简单的理解就是,在Object(对象)与Relational(关系型数据)之间建立映射关系,在实现业务的过程中只需要对对象进行操作即可,避免对关系型数据的操作。

  3 Hibernate体系结构:

 

  3.1持久化对象(Persistent Object):即封装了数据库表记录的JavaBean对象
  3.2Hibernate映射文件(XML Mapping):持久化对象(PO)与数据库表记录之间的映射关系
  3.3Hibernate配置文件(hibernate.properties)配置相关的数据库访问信息,如数据库驱动类、连接串、访问数据库用户名和密码等
注意:实际开发,通常使用名字为hibernate.cfg.xml的XML文件进行配置

第一个Hibernate开发步骤:

  1 建立数据库:这里我使用的microsoft sql server 2000,截图如下:

  student数据表:

 

  2 新建普通Java Project,导入Hibernate JAR包,同时还需导入JDBC驱动JAR包,Hibernate框架最终会调用底层JDBC代码
    2.1项目点右键—Build Path—Configure Build Path

    2.2弹出对话框中,点击“Add External JARs..”

    2.3选择要导入的jar包即可

  3 在hibernate.cfg.xml中配置数据库连接信息
  要求:3.1文件名称固定即为hibernate.cfg.xml
     3.2位置要求:在MyEclipse开发目录的src根目录下,编译后存储在class根目录下

  4 开发持久化对象(Persistant Object)——PO:封装student数据库表记录的JavaBean对象

  5 开发Hibernate映射文件:通过映射文件让Hibernate框架知晓PO类对象与数据库表记录之间的映射关系

映射文件命名要求:类名.hbm.xml;在本例中,需要开发Student类与student表之间进行映射的Student.hbm.xml文件

位置要求:与类同一目录下
  6 回到step3中开发的hibernate.cfg.xml文件,在其中加入下面的内容:<mapping resource = "po/Student.hbm.xml" />
  7 Step7:编写测试类方法,运用Hibernate框架完成学生信息添加



在本例中po类:Student

package po;

public class Student {
    private int id;
    private String number;
    private String name;
    private int age;
    private String intro;
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    public String getIntro() {
        return intro;
    }
    public void setIntro(String intro) {
        this.intro = intro;
    }    
}


数据库连接配置文件:hibernate.cfg.xml


<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
        <property name="connection.url">jdbc:sqlserver://localhost:1433;databasename=student</property>
        <property name="connection.username">sa</property>
        <property name="connection.password">catv</property>


        <!-- SQL dialect -->
        <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <mapping resource="po/Student.hbm.xml"/>

    </session-factory>

</hibernate-configuration>

Hibernate映射文件:Student.hbm.xml

<hibernate-mapping>
    <class name="po.Student" table="student">
        <id name="id" column="id">
            <generator class="native"></generator>
        </id>
        
        <property name="number" column="xh"></property>
        <property name="name" column="xm"></property>
        <property name="age" column="nl"></property>
        <property name="intro" column="grjs"></property>
    </class>

</hibernate-mapping>

测试类:

public class StudentTest {


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        ////实例化一个Student对象,设置属性,id属性不需要设置,该属性对应数据表中的自增字段
        Student stu = new Student();
        stu.setNumber("1001");
        stu.setName("tom");
        stu.setAge(20);
        stu.setIntro("my name is tom");
        
        //实例化一个Configuration对象
        Configuration cf = new Configuration();
        //通过Configuration对象的configure方法读取存放在默认路径下的hibernate.cfg.xml配置文件
        cf.configure();
        /*再进一步通过Configuration的buildSessionFactory方法,获取到一个SessionFactory对象
        *SessionFactory对象就包含了Hibernate.cfg.xml的配置信息,以及其它信息
        */
        SessionFactory sf = cf.buildSessionFactory();
        
        /*
         * 通过SessionFactory的openSession方法获取一个Session对象
         * Hibernate中的Session对象,简单理解:作用相当于以前JDBC编程用的Connection对象
         * 对数据库的各种操作通过Session对象实现(实质:通过操作JavaBean对象,再进而实现对数据表的对应操作)
         */
        Session session = sf.openSession();    
        //Hibernate编程中,所有的数据库操作放在事务当中,以下方法开始一个事务
        session.beginTransaction();
        
        /*调用session对象的save方法,将stu对象中的数据存储到student表中
         * 根据配置文件中Student对象与数据库student表的对应关系
         */
        session.save(stu);
        //提交事务
        session.getTransaction().commit();
        //关闭session对象
        session.close();

    }

}

 

 

 

posted @ 2012-12-06 14:13  java任我行  阅读(126)  评论(0)    收藏  举报