hibernate--query接口初步

Query session.createQuery(String hql)方法; 數據庫

* hibernate的session.createQuery()方法是使用HQL(hibernate的查詢語句)語句查詢對象的。 緩存

* hql:是查詢對象的,例如:"from User",其中from不區分大小寫,而User是區分大小寫,由於它是對象。是User類 安全

* 返回Query對象。 session

* 執行這條語句後,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) spa

從ORM詞來看,O---Object(對象模型);R--- Relational(關聯模型),能夠作對象和關聯的一種映射,固然這只是部分功能,一個完善ORM框架應該具備更多的功能:如HQL相關的查詢語句、提供緩存機制(一級緩存、二級緩存)。 hibernate

Java開發數據庫時,使用JDBC,可是須要編寫大量相同的代碼,這樣不便提升生產效率,而hibernate可讓你不能編寫大量的相同的代碼。從而提升生產效率。另外一方面,hibernate可讓咱們更面對象化開發,還有一個移植性hibernate只須要更改配置文件(數據庫適配器)的選項,就能夠很是方便的移植到不一樣的數據庫,而不須要從新編寫不一樣數據庫廠家所對應的JDBC、SQL語句了。還有hibernate能夠解決阻抗不匹配(Java類中有繼承關係,而關係型數據庫中沒有這個功能(目前數據庫還不是面向對象,都是關係型數據庫)),使用hibernate框架,侵入性比較好(所以hibernate稱爲輕量級框架) 線程

O/R映射框架和使用環境:在程序中添加→修改→保存;查詢能夠批量,可是修改不可爲批量性;程序中有大量的數據只讀,這樣就能夠一次性讀取到緩存中;對象間存在天然的關係;不須要數據庫SQL特定的語句優化。 code

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),而後根據映射文件生成數據庫表。數據庫對我來講是透明的,咱們只操做對象不用關心數據庫。

相關文章
相關標籤/搜索