Hibernate中的常用API


1.Configuration

  1.1 加載核心配置文件,

  加載hibernate.properties時:Configuration configuration = new Configuration();

  加載hibernate.cfg.xml時:Configuration configuration = new Configuration().configure();

  1.2  加載映射文件(不過,一般映射文件都配置在核心配置文件中,該方法用少)

  configuration.addResource("com/itheima/hibernate/domain/Customer.hbm.xml");

  configuration.addClass(Customer.class);//實體類必須和映射文件在同一個包中才行

2.SessionFactory

  SessionFactory負責管理Session,管理連接池,管理Hibernate二級緩存。是一個重量級的, 線程安全的對象.

3.session

  Session是Hibernate程序與數據庫之間的橋梁。完成CRUD的操作。Session是一個單線程的對象,內部維護了Hibernate的一級緩存。

hibernate的一級緩存--->session級別的緩存

  一級緩存是session級別的緩存, 同session的聲明周期一直. 一級緩存實際上是由session中的一組集合構成的.

  一級緩存的主要作用: 減少對數據庫的訪問次數

  執行原理: 在session中執行查詢操作時,首先會從緩存中獲取結果, 如果緩存中沒有, 則去數據庫中查詢, 並將查詢結果往緩存中存放一份; 如果緩存中有, 則直接從緩存中獲取.

  一級緩存快照區: 在存放在緩存中的數據會在session一級緩存的快照區存放一份, 當數據發生變更時, 緩存中的數據會被修改, 而快照區的數據還是原來的數據, 在事務提交時, 會對比一級緩存和快照區, 如果數據不一致, 則會發送sql語句更改數據庫中數據; 如果數據一致,  則不對數據庫進行更新操作. 因此, 對於持久態的對象,  即使沒有顯示的添加update語句, 如果數據發生變化, 在提交事務時, 會自動更新數據庫.

 

  session保存一個對象: session.save(entity);

  session修改對象:session.update(entity);

  session刪除對象session.delete(entity);

  session查詢對象:session.get()和session.load();

get()方法和load()方法的區別

  1.   加載機制不同. get方法采用的是立即加載,執行到代碼的時候,立即發送SQL語句進行查詢;  而load方法采用的延遲加載(Lazy)機制, 執行該代碼的  時候不會馬上發送SQL語句,只有真正使用該對象的時候才會發送SQL語句查詢.

  2.    查詢結果不同. get方法查詢得到的是對象本生,  而load方法查詢返回的一個代理對象;

  3.      查詢沒有找到時的處理應答不同, get方法返回的是null;  而load方法則會拋出異常ObjectNotFoundException;

4. Query:支持HQL查詢

獲得Query接口可以通過session.createQuery(String hql);獲得。

HQL:Hibernate Query Language。Hibernate查詢語言。語法與SQL是類似的。HQL中查詢的是對象。

public void demo2(){

  //HibernateUtils為編寫的獲取創建sessionFactory和獲取session的工具類

        Session session = HibernateUtils.getCurrentSession();

        Transaction tx = session.beginTransaction();

        // HQL的基本查詢

        Query query = session.createQuery("from Customer");

        List<Customer> list = query.list();

       

        for (Customer customer : list) {

           System.out.println(customer);

        }

       

        tx.commit();

    }

5.Criteria:支持QBC查詢

獲得Criteria接口可以通過session.createCriteria();獲得。

QBC:Query By Criteria。條件查詢。一種更加面向對象的方式.

  統計查詢

      Criteria criteria = session.createCriteria(Customer.class);

      criteria.setProjection(Projections.rowCount());

                 Long count = (Long) criteria.uniqueResult();

5.1 離線條件查詢 DetachedCriteria.

   DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);

        detachedCriteria.add(Restrictions.like("cust_name", "%強%"));

       

        Session session = HibernateUtils.getCurrentSession();

        Transaction tx = session.beginTransaction();

       

        Criteria criteria = detachedCriteria.getExecutableCriteria(session);

        List<Customer> list = criteria.list();

        for (Customer customer : list) {

           System.out.println(customer);

        }

        tx.commit();

    }

 

6.SQLQuery:支持SQL查詢

獲得SQLQuery接口可以通過session.createSQLQuery();獲得。

SQLQuery:通過SQL語句進行查詢。


免責聲明!

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



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