hibernate Day2 筆記

來源:互聯網
上載者:User

標籤:highlight   實體   mysql資料庫   標識   gen   位置   sql資料庫   connect   inno   

1、主鍵建置原則

<!--映射設定檔>映射設定檔名稱和位置沒法有固定要求>映射設定檔中的name屬性值寫實體類相關內容-- class 標籤name屬性值實體類全路徑-- id標籤和property標籤name屬性值 實體類的屬性名稱(注意要完全一樣)-- id標籤和property標籤中的column屬性是可以省略的,如果不寫,則產生的欄位名與屬性名稱一樣,建議寫出,這樣比較清析。-- property標籤中 還有一個屬性type屬性,用於設定欄位的類型,我們可以不用使用,這時hibernate會自動產生相應的類型    -->主鍵建置原則<generator class="increment"></generator>    先查詢最主鍵的最大值,然後加一<generator class="identity"></generator>     identity要求資料庫的主鍵為自增長類型,採用資料庫本身提供的主鍵產生標識符<generator class="uuid"></generator>         uuid要求主鍵為字串類型<generator class="native"></generator>       native從idenity、sequence、hilo當中選擇一種合適的建置原則   

  2、hibernate緩衝

電腦領域非常通用的概念。它介於應用程式和永久性資料存放區源(如硬碟上的檔案或者資料庫)之間,其作用是降低應用程式直接讀寫永久性資料存放區源的頻率,從而提高應用的運行效能。緩衝中的資料是儲存源總的資料的拷貝。緩衝的物理介質通常是記憶體。hibernate一級緩衝1、預設開啟2、使用範圍:從session建立到session關閉3、hibernate一級緩衝中,儲存的資料必須是持久態的資料,瞬時態和託管態的資料不會儲存到一級緩衝中hibernate二級緩衝1、目前已經不使用了,使用redis代替2、二級緩衝預設是不開啟的,需要通過配置開啟3、二級緩衝的範圍:是SessionFactory範圍(專案範圍)驗證一級緩衝:根據uid查詢,返回對象(查詢資料庫,會有sql輸出)再次根據uid查詢,返回對象(不會有sql語句輸出)效果如下:System.out.println("--------------------");Person p = (Person)ss.get(Person.class,11);System.out.println(p);System.out.println("--------------------");Person p2 = (Person)ss.get(Person.class,11);System.out.println(p2);--------------------Hibernate:     select        person0_.uid as uid0_0_,        person0_.uname as uname0_0_,        person0_.pword as pword0_0_,        person0_.addr as addr0_0_     from        t_person person0_     where        person0_.uid=?Person [uid=11, uname=zs, pword=123, addr=shanghai]--------------------Person [uid=11, uname=zs, pword=123, addr=shanghai]步驟:-- 首先查詢一級緩衝, 查詢一級緩衝如果沒發現有相應的資料, 就去執行資料庫查詢-- 查詢資料庫後, 會把查詢得到的結果放到一級緩衝中-- 第二次進行查詢時, 也會首先進行一級緩衝查詢, 這時探索資料已經在一級緩衝中了, 直接取出就結果, 不會再做資料庫的查詢注意: 一級緩衝中並不是儲存某個對象, 而是把對象的屬性值給存到緩衝中, 當我們進行第二次查詢時, 返回的p2,其實是用之前存放的屬性值給重新構建出來的一個新的對象噢, 這一點大家瞭解hibernate一級緩衝特性》持久態會自動更新資料庫      所以,可以不用寫ss.update(...)方法(********)》持久態會自動更新資料庫的執行過程(注意:最後提交事務時,   比較一級緩衝中的內容與快照區的內容是否相同,   相同,不更新,不相同,調用update方法進行更新)

  3、hibernate事務

什麼是事務?       是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。       交易處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。事務代碼規則寫法(重點掌握)       >結構try{   開啟事務   處理代碼   提交事務}catch){  復原事務}finally{   釋放資源}   --------------------------------------------------public void test1() {SessionFactory sf = null;Session ss = null;Transaction tx = null;try {sf = HibernateUtils.getSessionFactory();// 使用sessionFactory建立Session對象ss = sf.openSession();// 開啟事務tx = ss.beginTransaction();// 添加功能Person p = new Person();p.setUname("王五");p.setPword("111");p.setAddr("黃埔");// 調用session對象的實現方法,完成添加ss.save(p);// 類比一個異常int x = 10 / 0;// 提交事務tx.commit();} catch (Exception e) {// 輸出異常資訊//e.printStackTrace();// 有異常,則復原事務/** * 一直交易回復失敗的原因是資料庫的原因, * mysql資料庫只有InnoDB引擎支援事務; * 預設引擎是MyISAM,不支援事務, * 所以,需要設定資料庫的表結構為InnoDB; * 即alter table 表名 ENGINE=InnoDB; * 同時,將方言設定為MySQLInnoDBDialect */if (tx != null) {ss.clear();tx.rollback(); System.out.println("交易回復!");}} finally {// 關閉資源if (ss != null && ss.isOpen()) {ss.close();}if (sf != null && !sf.isClosed()) {sf.close();}}}--------------------------------------------------

  4、hibernate綁定session

》session類似於jdbc的connection,為了可以安全使用threadLocal》hibernate已經幫我們實現了與本地線程的綁定的session》擷取與本地線程綁定的session第一步:在hibernate核心設定檔中配置<!--本地線程綁定的session-->

  

hibernate Day2 筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.