hibernate是經典的ssh三大框架之一(另兩個是struts和spring),hibernate是一個orm(object relation mapping)框架,也就是對象關係框架。實際上簡單來說,hibernate就是把我們的JDBC進行了簡單的封裝,這個框架是基於Java的反射機制。我們的項目中使用hibernate這個框架的最大的好處就是一旦項目要換數據庫,只需要更改其中極少的部分就可以了,不用所有的表重建或是所有的sql語句重寫,這個龐大的工程就可以交給hibernate這個框架,它會幫你生成,這就是它的優勢之一。
我們先來實現一個小的項目。
1.創建一個新的項目
2.畫出簡單的項目框架圖
3.使用hibernate,
引入hibernate 開發包 (從網上下載 google hibernate http://www.hibernate.org)
工具方面我使用的是MyEclipse,安裝及破解詳情見我的另一篇博客,這裏就不詳細說明了。新建一個Java project就可以了,舉個小例子不用web項目,要不還得傳服務器,略麻煩。下面就是核心問題hibernate的配置問題,其實學習hibernate的核心就是學習怎麼配置hibernate.cfg.xml這個核心的配置文件
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- hibernate 設計者,給我們提供了一寫常用的配置 -->
<!-- 配置使用的driver -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">1</property>
<property name="connection.url">jdbc:mysql://localhost:3306/exercise1</property>
<!-- 配置dialect方言,明確告訴hibernate連接是哪種數據庫 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 顯示出對於sql -->
<property name="show_sql">true</property>
<!-- 自動創建表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 指定管理的對象映射文件 -->
<mapping resource="com/cyj/domain/Employee.hbm.xml"/>
</session-factory>
</hibernate-configuration>
這個是配置的MySQL數據庫
<property name="hbm2ddl.auto">update</property>
這句是轉換其他的數據庫時根據你的表和對象的對應關係自動裝換的,當然了,要想做到轉化到別的數據庫,前邊的驅動等等那一大片也要改成相應的數據庫。
總體來說,hibernate框架就是完全用對象的關係代替了數據庫內部的操作,其實在底層仍然是對數據庫的sql語句操作,但是進行了封裝之後就可以直接用對象控制了,比較好管理也簡單易行。
下面我們來實現CRUD,首先是增加一條記錄
public static void addEmployee() {
//使用hibernate來完成crud操作
//1.先創建一個configuration
Configuration configuration = new Configuration().configure();
//2.創建一個sessionfactory這是一個會話工廠
SessionFactory sessionFactory = configuration.buildSessionFactory();
//3.創建一個會話,表示與數據庫的對話
Session session = sessionFactory.openSession();
//4.在hibernate中增刪改查都是事務提交的方法
Transaction transaction = session.beginTransaction();
//添加一個僱員
Employee employee = new Employee();
employee.setName("aaaa");
employee.setEmail("[email protected]");
employee.setHiredate(new Date());
session.save(employee);//會被hibernate封裝,變爲對應數據庫的語言
transaction.commit();
session.close();
}
這個是對數據庫進行操作的標準動作,分爲四步,在hibernate中CRUD都是通過事務的提交在實現的也就是transaction
然後是修改update
public static void updateEmployee() {
Session session = MySessionFactory.getSessionFactory().openSession();
//獲取了一個session(從自己的會話工廠裏獲取一個session)
Transaction ts = session.beginTransaction();
//獲取要修改的用戶,然後在修改
//load是通過主鍵屬性獲取該對象實例,與表的記錄對應
Employee emp = (Employee)session.load(Employee.class,1);
emp.setName("ada");
emp.setEmail("[email protected]");
ts.commit();
session.close();
}
這裏的MySessionFactory是我自己寫的一個類:
final public class MySessionFactory {
private static SessionFactory sessionFactory = null;
private MySessionFactory(){
}
static{
sessionFactory = new Configuration().configure().buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
}
然後是刪除
public static void deleteEmployee() {
Session session = MySessionFactory.getSessionFactory().openSession();
Transaction ts = session.beginTransaction();
Employee emp = (Employee)session.load(Employee.class, 1);
session.delete(emp);
ts.commit();
session.close();
}
這裏使用了load,load是通過主鍵屬性獲取該對象實例,就如代碼寫的這麼用即可。
總結:主要是要不hibernate的核心配置文件hibernate.cfg.xml配好,剩下的熟悉開發流程,沒有很大的技術困難。剛開始的時候會報各種錯,hibernate是一把雙刃劍,優勢是很大的,不過如果用的不好甚至效率會下降。