標籤:style blog java color 使用 檔案
Query session.createQuery(String hql)方法;
* hibernate的session.createQuery()方法是使用HQL(hibernate的查詢語句)語句查詢對象的。
* hql:是查詢對象的,例如:"from User",其中from不區分大小寫,而User是區分大小寫,因為它是對象。是User類
* 返回Query對象。
* 執行這條語句後,Hibernate會根據設定檔中所配置的資料庫適配器自動產生相應資料庫的SQL語句。如:
ibernate: select user0_.id as id0_, user0_.name as name0_, user0_.password as password0_,
user0_.createTime as createTime0_, user0_.expireTime as expireTime0_ from User user0_
Query的分頁查詢:
@Test public void testQuery1() { Session session = null; try { session = HibernateUtil.getSession(); session.beginTransaction(); Query query = session.createQuery("from User"); // 分頁查詢 query.setFirstResult(0);// 從哪一條記錄開始查詢,是從0開始計算 query.setMaxResults(2);// 分頁每頁顯示多少條記錄。 /* * Query對象中有一個list()方式,將所有查詢來的對象自動產生list對象返回。 */ List userList = query.list(); // 然後我們就可以顯示資料了。 for (Iterator iter = userList.iterator(); iter.hasNext();) { User user = (User) iter.next(); System.out.print(user.getId() + " "); System.out.println(user.getName()); } session.getTransaction().commit(); } catch (HibernateException e) { e.printStackTrace(); session.getTransaction().rollback(); } finally { HibernateUtil.closeSession(session); } }開源O/R映射架構內容回顧
Hibernate是一個O/R映射架構(也稱為ORM)
從ORM詞來看,O---Object(物件模型);R--- Relational(關聯模型),可以做對象和關聯的一種映射,當然這隻是部分功能,一個完善ORM架構應該具有更多的功能:如HQL相關的查詢語句、提供緩衝機制(一級緩衝、二級緩衝)。
Java開發資料庫時,使用JDBC,但是需要編寫大量相同的代碼,這樣不便提高生產效率,而hibernate可以讓你不能編寫大量的相同的代碼。從而提高生產效率。另一方面,hibernate可以讓我們更面對象化開發,還有一個移植性hibernate只需要更改設定檔(資料庫適配器)的選項,就可以非常方便的移植到不同的資料庫,而不需要重新編寫不同資料庫廠家所對應的JDBC、SQL語句了。還有hibernate可以解決阻抗不匹配(Java類中有繼承關係,而關係型資料庫中沒有這個功能(目前資料庫還不是物件導向,都是關係型資料庫)),使用hibernate架構,侵入性比較好(因此hibernate稱為輕量級架構)
O/R映射架構和使用環境:在程式中添加→修改→儲存;查詢可以批量,但是修改不可為批量性;程式中有大量的資料唯讀,這樣就可以一次性讀取到緩衝中;對象間存在自然的關係;不需要資料庫SQL特定的語句最佳化。
O/R映射架構不適合環境:聚集性操作:批量性添加、修改。批量的統計查詢。
Configuration對象:讀取hibernate設定檔(hibernate.cfg.xml或hiberante.properties)的. new Configuration()預設是讀取hibernate.properties, 所以使用new Configuration().configure();來讀取hibernate.cfg.xml設定檔
SessionFactory:是一個重量級對象,它的建立是耗時的。因為它對應一個資料庫裡所有配置,包括一些緩衝機制都由SessionFactory來維護,它與二級緩衝是綁定的。通常只建立一次,但它是安全執行緒的。
Session:是非安全執行緒的,它是通過SessionFactory來建立的。不要多個線程同時訪問同一個Session,否則會出現一些未知問題。通常是一個請求對應一個Session,請求完成要關閉Session
Transaction:hibernate預設不是自動開啟事務的,所以要手動開啟事務、手動提交事務、手動復原事務、手動關閉事務。當然可以通過設定檔配置成自動。一般使用手動。
Hibernate正常的開發思路:考慮物件模型這一塊,把物件模型建立起來,把對象圖建立起來,對象之間的關係建立起來、然後再編寫對應檔(hbm),然後根據對應檔產生資料庫表。資料庫對我來說是透明的,我們只操作對象不用關心資料庫。