什麼是Hibernate?
Hibernate是基於ORM(O:對象,R:關系,M:映射)映射的持久層框架,是一個封裝JDBC的輕量級框架,主要實現了對數據庫的CUPD操作。
注:CRUD是指在做計算處理時的增加(Create)、查詢(Retrieve)(重新得到數據)、更新(Update)和刪除(Delete)幾個單詞的首字母簡寫。主要被用在描述軟件系統中數據庫或者持久層的基本操作功能。
Hibernate中的核心接口和類
Hibernate的核心類和接口一共有6個,分別為:Session、SessionFactory、Transaction、Query、Criteria和Configuration。這6個核心類和接口在任何開發中都會用到。通過這些接口,不僅可以對持久化對象進行存取,還能夠進行事務控制。
Session接口:負責對象的持久化操作,但需要注意的是它非線程安全的。
SessionFactory接口:負責Hibernate的初始化操作,數據存儲的代理對象,並且負責創建Session對象,
Transaction接口:負責數據的事務操作。
Query接口:負責數據庫及持久化對象的查詢操作,它可以有兩種表達方式:HQL語言或本地數據庫的SQL語句。Query經常被用來綁定查詢參數、限制查詢記錄數量,並最終執行查詢操作。
Criteria接口:Criteria接口與Query接口非常類似,允許創建並執行面向對象的標准化查詢。值得注意的是Criteria接口也是輕量級的,它不能在Session之外使用。
Configuration類:Configuration 類的作用是對Hibernate 進行配置,以及對它進行啟動。在Hibernate 的啟動過程中,Configuration 類的實例首先定位映射文檔的位置,讀取這些配置,然後創建一個SessionFactory對象。雖然Configuration 類在整個Hibernate 項目中只扮演著一個很小的角色,但它是啟動hibernate 時所遇到的第一個對象。
Hibernate的工作流程:
工作流程圖:
Hibernate持久化操作的七個步驟:
1.創建Configuration對象,並加載cfg.xml配置文件;(配置文件可以通過Eclipse自動生成)
2.通過Configuration對象構建SessionFactory工廠;
3.通過SessionFactory工廠打開一個Session會話;
4.開啟事務;(查詢方法可省略)
5.用Session會話進行數據庫及持久化對象的CRUD操作;
6.提交事務;(查詢方法可省略)
7.關閉會話;
代碼如下:
import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Restrictions; public class HibernateTest { public void Test(){ //創建Configurtion對象並加載cfg.xml配置文件 Configuration conf = new Configuration().configure("hibernate.cfg.xml"); //構建SessionFactory工廠 SessionFactory sessionFactory = conf.buildSessionFactory(); //打開Session會話 Session session = sessionFactory.openSession(); //開啟事務(增刪改)需要開啟事務 查詢可以不用開啟事務 Transaction transaction = session.beginTransaction(); //創建Users類對象 Users users = new Users(); /** * Session中封裝的幾個常用的方法 */ //調用Session中添加的方法 session.save(users); //調用Session中刪除的方法 session.delete(users); //調用Session中修改的方法 session.update(users); //調用Session中根據主鍵查詢某個類的方法 session.get(Users.class,users.getId()); //根據HQL語句查詢 String hql = "from Users"; Query query = session.createQuery(hql); List<Users> userList = query.list(); //根據SQL語句查詢 String sql = "select * from Users"; SQLQuery sqlQuery = session.createSQLQuery(sql); List<Users> sqlUsersList = sqlQuery.list(); //根據你給的Bean.class類來指定查詢哪個類 Criteria criteria = session.createCriteria(Users.class); //用Criteria對象來添加條件(括號中用Restrictions對象來選擇你要添加哪一種條件) criteria.add(Restrictions.ilike("name", "華盛頓%")); /** * 提交事務後將對數據庫進行增刪改查操作 * 可以通過條件判斷來確定是否提交事務 * 例如: * 如果程序運行正常提交事務 * 否則讓事務回滾 * 回滾後將不對數據庫進行操作 * 事務的回滾: transaction.rollback(); */ //提交事務 transaction.commit(); //關閉Session會話釋放資源 session.close(); } }