Hibernate:HIbernate配置詳解-HelloWorld


hibernate介紹:

     Hibernate是一個開源的對象關系映射框架,它對JDBC進行了輕量級的對象封裝,使Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫

它不僅提供了從java類到數據庫表之間的映射,也提供了數據查詢和恢復機制。相對於使用JDBC和SQL來手工操作數據庫,Hibernate可以大大減少

操作數據庫的工作量。另外Hibernate可以利用代理模式簡化載入類的過程,這將大大減少利用Hql從數據庫提取數據的代碼編寫量,從而節約開發時間

和開發成本Hibernate可以和多種web服務器或者應用服務器良好集成,如今已經支持幾乎所有的流行數據庫服務器。

 

2. Hibernate原理:

     Hibernate技術本質上是一個提供數據庫服務的中間件。Hibernate的工作原理,他是利用數據庫以及其他一些配置文件如:hibernate.cfg.xml,

xxx.hbm.xml等來為應用程序提供數據持久化服務的。

  1.   Configuration來讀取hibernate.cfg.xml文件
  2.   使用Configuration對象創建SessionFactory
  3.   用SessionFactory來打開一個Session
  4.   創建事務Transaction
  5.   begin事務
  6.   使用Session進行數據庫操作
  7.   關閉或回滾事務
  8.   關閉Session

 

3. 配置Hibernate 聲明:我使用的是JDK1.7,Hibernate3.6.0

  3.1 導入相關Jar包:Hibernate模式不只是自己內部實現,同樣也導入了許多外部的jar包,下面是Hibernate3.6.0框架的基本jar包

    我使用的是mysql數據庫,可以根據自己使用的數據庫添加相關驅動Jar包

 

  3.2 先創建一個User實體

 1 package com.a_helloworld;  2  3 public class User {  4  5 private int id;  6 private String name;  7 public int getId() {  8 return id;  9  } 10 public void setId(int id) { 11 this.id = id; 12  } 13 public String getName() { 14 return name; 15  } 16 public void setName(String name) { 17 this.name = name; 18  } 19 20  @Override 21 public String toString() { 22 return "User [id=" + id + ", name=" + name + "]"; 23  } 24 25 26 }

 

 

  3.3 配置User實體在數據庫表的映射user.hbm.xml

    

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.a_helloworld"> <!-- 屬性table 表示在數據庫中的表名 --> <class name="User" table="user_1" > <id name="id" column="id" type="int"> <!-- 值native表示會根據數據庫來創建不同的主鍵生成策略 --> <generator class="native"></generator> </id> <property name="name" column="name" type="string"></property> </class> </hibernate-mapping>

 

 

  3.4 簡單配置hibernate.cfg.xml配置文件,這個文件名可以隨便修改(xxx.cfg.xml),但是沒多大意義,一般不建議修改。配置的信息如下:

    

 1 <!DOCTYPE hibernate-configuration PUBLIC  2  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  3  "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 4 
 5 <hibernate-configuration>
 6     <session-factory name="foo">
 7     
 8         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
 9         <property name="connection.username">root</property>
10         <property name="connection.password">123456</property>
11         <property name="connection.url">jdbc:mysql:///user</property>
12         
13         <!-- 要根據自己使用的數據庫來配置相對應的屬性,也成方言,針對不同數據庫 14  關於怎么配置可以查看HibernateAPI 15          -->
16         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
17         
18         <!-- Hibernate 創建的SQL語句會顯示在控制台 -->
19         <property name="hibernate.show_sql">true</property>
20         
21         <!-- 選擇方案,常用值:validate | update | create | create-drop -->
22         <property name="hbm2ddl.auto">update</property>
23         
24         <mapping resource="com/a_helloworld/user.hbm.xml"/> -- 導入實體映射配置,程序每次啟動都會自動檢索
25         
26     </session-factory>
27 </hibernate-configuration>

 

以上Hibernate簡單配置已經基本完成,可以添加一個測試類來測試是否成功

    

package com.a_helloworld; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.Session; import org.junit.Test; public class Demo { private static SessionFactory sf = new Configuration()//             .configure("hibernate.cfg.xml")//  .buildSessionFactory(); @Test public void addUser(){ Session session = null; Transaction tran = null; try{ session = sf.openSession(); // 創建一個Session
            tran = session.beginTransaction(); //開啟事務
 User user = new User(); user.setName("張三"); session.save(user); tran.commit();//事務提交
        }catch(Exception e){ tran.rollback(); //事務回滾
            throw(e); }finally{ session.close(); //關閉session
 } } @Test public void getUser(){ Session session = null; Transaction tran = null; try{ session = sf.openSession(); // 創建一個Session
            tran = session.beginTransaction(); //開啟事務
            
            /*這里指明你要獲得哪個類型,Hibernate會根據類名查詢映射配置文件到數據庫查詢哪張表,根據指定 * id查詢實體,通過反射機制創建實體對象 */ User user = (User) session.get(User.class, 1); //執行查詢,get
 tran.commit();//事務提交
        }catch(Exception e){ tran.rollback(); //事務回滾
            throw(e); }finally{ session.close(); //關閉session
 } } @Test public void updateUser(){ Session session = null; Transaction tran = null; try{ session = sf.openSession(); // 創建一個Session
            tran = session.beginTransaction(); //開啟事務
 User user = new User(); user.setId(1);//這里指定了要更新的數據id為1
            user.setName("李四");// 把名字 “張三” 修改為 “李四” 
            session.update(user);//執行更新 
 tran.commit();//事務提交
        }catch(Exception e){ tran.rollback(); //事務回滾
            throw(e); }finally{ session.close(); //關閉session
 } } @Test public void deleteUser(){ Session session = null; Transaction tran = null; try{ session = sf.openSession(); // 創建一個Session
            tran = session.beginTransaction(); //開啟事務
 User user = new User(); user.setId(1);//這里指定了要更新的數據id為1
            session.delete(user); //執行刪除
 tran.commit();//事務提交
        }catch(Exception e){ tran.rollback(); //事務回滾
            throw(e); }finally{ session.close(); //關閉session
 } } }

 

 

 

 

  如需轉載請說明出處:http://www.cnblogs.com/gudu1/p/6879990.html 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM