1. 程式人生 > >hibernate在myeclipse中的配置過程詳解

hibernate在myeclipse中的配置過程詳解

1、  資料庫設計

建立crud.student資料庫表:

1

圖1 資料庫表

你可以使用如下語句建立該庫表:

create database if not exists `crud`;  
USE `crud`;  
DROP TABLE IF EXISTS `student`;  
CREATE TABLE `student` (  
  `id` int(4) NOT NULL auto_increment,  
  `name` varchar(20) default NULL,  
  `age` int(4) default NULL,  
  `score` int(4) default NULL,  
  PRIMARY KEY  (`id`)  
) 


在這裡我使用的是MySQL,當然你也可以選擇別的資料庫,只是在選擇之前請準備好相應的jar包即可。

2、  程式編寫:

第一步:配置資料來源

  1、開啟MyEclipse,新建一個web工程,這裡命名為hibernate_demo

  2、開啟資料庫設定器:依次單擊【window】-->【Show View】-->【Other…】 如下圖所示:

2

  3、在彈出的視窗ShowView中選擇DB Browser,如下圖所示:

3 

4、在DB Browser視窗中,選擇顯示的圖示,單擊右鍵執行新建命令,如下圖示

4  

5、彈出Database Driver對話方塊,在此會要求我們配置資料庫的相關資訊,具體設定如下圖所示,設定完成,單擊Finish.

5

【第二步】引入hibernate配置檔案

1、   新增hibernate包:

  選中我們的Web工程,依次單擊滑鼠右鍵-->MyEclipse-->Add Hibernate Capabilities… 如下圖所示:

2-1 

2、   在彈出的視窗中做如下設定:

untitled

   【Next】

2-2-1

    【Next】

2-2-2

  單擊Next,把要建立的SessionFactory放置於相應的包中,如果前面沒有設定包名,這裡要先單擊New建立新的包。 

      單擊【Finish】按鈕,頁面效果如下圖所示:

2-2-3 

      接下來要給hibernate.cfg.xml檔案新增屬性:在properties處選擇Add…,如下圖所示:

2-2-4 

      單擊【Add…】,在Hibernate Properties Wizard頁面填入如下圖所示資訊,最後單擊Ok。

2-2-5

      show_sql:預設為false,如果為true,表示在程式執行時,會在控制檯輸出SQL語句,這有利於跟中Hibernate的執行狀態。在開發和測試階段,可以將該屬性設定為true,以便跟蹤、除錯程式,在應用釋出以後     ,應將該屬性值設定為false,以減少應用的輸出資訊,提高執行效能。

【第三步】新增hibernate對映檔案

  1、新建org.njy.bean包

  2、在前面設定的資料來源上找到我們要操作的表:

      在DB Browser中選中新建的資料來源,單擊滑鼠右鍵並選擇open connection..

2-2-6

       輸入資料庫的使用者名稱和密碼,以建立連線:

2-2-7 

       找到剛才新建的crud資料庫,然後是TABLE,如下圖所示:

2-2-8

生成POJO:

2-2-9

2-2-10        

3、 修改Student.hbm.xml檔案

<?xml version="1.0" encoding="utf-8"?>  
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<!--  
    Mapping file autogenerated by MyEclipse Persistence Tools 
-->  
<hibernate-mapping>  
    <class name="org.njy.bean.Student" table="student">  
        <!-- 必須先定義<id>元素,後定義<property>元素 -->  
        <id name="id" type="java.lang.Integer">  
            <column name="id" />  
            <!-- 主鍵的生成方式 -->  
            <generator class="increment" />  
        </id>  
        <!-- name屬性,型別為String,對應的資料庫中的列為name,長度為20 -->  
        <property name="name" type="java.lang.String">  
            <column name="name" length="20" />  
        </property>  
        <property name="age" type="java.lang.Integer">  
            <column name="age" />  
        </property>  
        <property name="score" type="java.lang.Integer">  
            <column name="score" />  
        </property>  
    </class>  
</hibernate-mapping>  


提示:建議刪除catalog=”crud”,當修改了資料庫名的時候程式會出現錯誤(找不到對應的庫)。

4、 hibernate.cfg.xml檔案

<?xml version='1.0' encoding='UTF-8'?>  
<!DOCTYPE hibernate-configuration PUBLIC  
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
<hibernate-configuration>  
    <session-factory>  
        <!-- dialect指定資料庫使用的方言 -->  
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
        <!-- connection.dirver_class指定資料庫的驅動程式 -->  
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
        <!-- connection.url指定連線資料庫的URL -->  
        <property name="connection.url">jdbc:mysql://localhost:3306/crud</property>  
        <!-- connection.username指定連線資料庫的使用者名稱 -->  
        <property name="connection.username">root</property>  
        <!-- connection.password指定連線資料庫的密碼 -->  
        <property name="connection.password">root</property>  
        <!-- show_sql指定是否列印SQL語句 -->  
        <property name="show_sql">true</property>  
          
        <!-- 指定POJO的對映檔案 -->  
        <mapping resource="org/njy/bean/Student.hbm.xml" />  
    </session-factory>  
</hibernate-configuration> 

 

5、 新建一個包org.njy.test,再新建TestHibernate.java用來測試一下我們的Hibernate。

【新增】

public static void main(String[] args) {  
    Session session = HibernateSessionFactory.getSession();  
    Transaction tx = session.beginTransaction();  
    Student stu = new Student("聶靖宇", 22, 98);  
    try {  
        session.save(stu);  
        tx.commit();  
    } catch (Exception e) {  
        tx.rollback();  
        e.printStackTrace();  
    }finally{  
        session.close();  
    }  
}  

  

在執行新增的時候控制檯打印出如下兩條sql語句:

Hibernate: select max(id) from student

Hibernate: insert into student (name, age, score, id) values (?, ?, ?, ?)

【修改】

public static void main(String[] args) {  
    Session session = HibernateSessionFactory.getSession();  
    Transaction tx = session.beginTransaction();  
    Student stu = new Student("test", 22, 98);  
    stu.setId(1);  
    try {  
        session.update(stu);  
        tx.commit();  
    } catch (Exception e) {  
        tx.rollback();  
        e.printStackTrace();  
    }finally{  
        session.close();  
    }  
}


在修改資訊的時候要保證主鍵Id存在,這樣程式才知道修改的是那條記錄的資訊。

在修改資訊的時候要保證主鍵Id存在,這樣程式才知道修改的是那條記錄的資訊。

    【刪除】

public static void main(String[] args) {  
    Session session = HibernateSessionFactory.getSession();  
    Transaction tx = session.beginTransaction();  
    Student stu = new Student();  
    stu.setId(1);  
    try {  
        session.delete(stu);  
        tx.commit();  
    } catch (Exception e) {  
        tx.rollback();  
        e.printStackTrace();  
    }finally{  
        session.close();  
    }  
}