摘要:使用反射機制,而不是字節碼增強程序來實現透明性。工具類初始化失敗為空,請檢查配置文件瞬時對象與持久化對象測試代碼當前在數據庫中沒有記錄進行關聯,所以此時是瞬時對象。將持久化當前在數據庫有唯一一條記錄對應,所以此時是持久化對象。
一、什么是Hibernate?
Hibernate (開放源代碼的對象關系映射框架): Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數據庫表建立映射關系,是一個全自動的ORM框架,hibernate可以自動生成SQL語句,自動執行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。二、為什么使用Hibernate? 2.1 Hibernate相對于傳統JDBC的優點
對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重復性代碼。
Hibernate是一個基于JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作。
hibernate使用Java反射機制,而不是字節碼增強程序來實現透明性。
hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關系數據庫,從一對一到多對多的各種復雜關系。
2.2 Hibernate相對于MyBatis的區別與聯系緩存方面
相同點:
Hibernate和Mybatis的二級緩存除了采用系統默認的緩存機制外,都可以通過實現你自己的緩存或為其他第三方緩 存方案,創建適配器來完全覆蓋緩存行為。
不同點:
Hibernate的二級緩存配置在SessionFactory生成的配置文件中進行詳細配置,然后再在具體的表-對象映射中配置是那種緩存。
MyBatis的二級緩存配置都是在每個具體的表-對象映射中進行詳細配置,這樣針對不同的表可以自定義不同的緩存機制。并且Mybatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現。
三、Hibernate的使用準備好User實體類和數據庫記錄
User.java
public class User { private Integer id; private String userName; private String passWord; //Get、Set方法,此處省略。 }
mysql數據庫:
3.1 添加pom依賴Hibernate基礎Maven依賴:
3.2 hibernate.cfg.xml配置文件junit junit 4.12 test dom4j dom4j 1.6.1 commons-logging commons-logging 1.1.1 org.hibernate hibernate-core 4.3.2.Final commons-collections commons-collections 3.2.1 mysql mysql-connector-java 5.1.6
3.2 User.hbm.xml映射文件com.mysql.jdbc.Driver admin jdbc:mysql://localhost:3306/Hibernatetraning root org.hibernate.dialect.MySQLDialect true
測試
Configuration config = new Configuration().configure(); SessionFactory sessionFactory = config.buildSessionFactory(); //測試session是否創建,以及是否可以從user映射的表里獲取記錄 Session session = sessionFactory.openSession(); //System.out.println("session=="+session); User user = (User)session.get(User.class,1); System.out.println(user); //關閉會話工廠,項目自動停止。生產環境中千萬不要寫這句。 //sessionFactory.close();
控制臺輸出:User{id=1, userName="Jack", passWord="123"}
四、Hibernate基本概念Hibernate是自動化程度更高ORM(Object-Relational Mapping)框架,不是面向SQL的持久層框架,以更加OO方式來編寫數據讀寫代碼。4.1 對象與關系型數據庫
注意:一定要清楚當前操作的東西,是屬于對象層面的還是關系型數據庫層面的,解決異常也是如此。
Hibernate中的對象有3中狀態,瞬時對象(Transient Objects)、持久化對象(Persistent Objects)和離線對象(Detached Objects也叫做脫管對象)。4.2 HibernateUtils.java工具類
public class HibernateUtils { private static SessionFactory sessionFactory = null; static { try { Configuration configuration = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder() .applySettings(configuration.getProperties()) .build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); }catch (HibernateException e){ System.out.println("SessionFactory初始化失敗"); e.printStackTrace(); } } public static SessionFactory getSessionFactory() throws Exception{ if (sessionFactory != null){ return sessionFactory; }else { throw new Exception("sessionFactory為空,請檢查配置文件"); } } public static Session getSession(){ Session session = null; try { if (sessionFactory != null){ session = sessionFactory.openSession(); } }catch (HibernateException e){ e.printStackTrace(); } return session; } public static void closeSession(Session session){ try { if (session != null && session.isOpen()){ session.close(); } }catch (HibernateException e){ e.printStackTrace(); } } }4.3 瞬時對象與持久化對象
測試代碼:
Session session = HibernateUtils.getSession(); Transaction tx = session.beginTransaction(); User user1 = new User(); user1.setId(2); user1.setUserName("Frank"); user1.setPassWord("111"); // 當前user1在數據庫中沒有記錄進行關聯,所以此時user1是瞬時對象。 // 將user1持久化 session.save(user1); tx.commit(); User user2 = (User)session.get(User.class, 2); System.out.println(user2); // 當前user2在數據庫有唯一一條記錄對應,所以此時user2是持久化對象。4.4 hibernate.hbm2ddl.auto
hibernate.cfg.xml配置文件中hibernate.hbm2ddl.auto屬性值(從類自動生成數據庫DDL操作)
create:如果設置為該值,則每次加載hibernate時(準確說應是創建SessionFactory時)都會刪除以前創建的表而根據model重新生成表,即使前后的表沒有任何變化,通常會造成數據庫數據丟失,需謹慎使用這個取值。
create-drop:與create差不多,所不同的是每次sessionFactory關閉時,就會刪除所有表。
update(最常用):這個取值比較常用,需要先建立數據庫,在第一次加載hibernate時會自動創建表,以后創建hibernate會自動根據model更新表結構,即使表結構改變了,以前的行不會被刪除。
validate:每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,不會創建新表,但是會插入新值。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73465.html
摘要:初步使用主要使用注解的方式對進行校驗,第一個例子在需要校驗的字段上指定約束條件然后在中可以這樣調用,加上注解即可。如果校驗失敗,默認會返回框架的出錯信息。指定到的分組名會全部進行校驗,不指定的不校驗。 Spring Boot - 表單校驗(JSR303&Hibernate Validator) 回顧 Spring Boot - 初識 Hello World Spring Boot -...
摘要:本文將繼續介紹簡單的增刪改查方法和對對象實例狀態的理解查詢方法暫不提及。二實例狀態中的對象有中狀態瞬時對象持久化對象和離線對象也叫做脫管對象。持久化狀態已經被持久化,并且加入到緩存中。處于游離狀態的對象稱為游離對象。 在上一篇《初識Hibernate》中簡單介紹了在Hibernate如何加載對象和持久化對象,以及Hibernate中對象實例狀態。本文將繼續介紹Hibernate簡單的增...
摘要:背景這段時間較忙,有些想念小紅,為了表達我對小紅的思念之情,決定將啟動的研究一下,看看是否能夠自定義,讓我天天能夠看到她。 背景 這段時間較忙,有些想念小紅,為了表達我對小紅的思念之情,決定將spring boot啟動的banner研究一下,看看是否能夠自定義,讓我天天能夠看到她。 展示 經過調研,發現自定義banner是一個輕松愉快的過程,忍不住讓我多啟動幾次,先看看效果:(省略了一...
摘要:當面講給你聽講堂地址,或許是最實用的教程,新課促銷中,只要你敢來,保你收貨滿滿。優惠報名全程擼碼快速入門教程全原價,優惠價全程擼碼進階全原價,優惠價 回顧 Spring Boot - 初識 Hello World Spring Boot - Servlet、過濾器、監聽器、攔截器 Spring Boot - 靜態資源處理、啟動加載、日志處理 Spring Boot - 部署Deplo...
摘要:一配置屬性詳解可以在各式各樣不同環境下工作而設計的因此存在著大量的配置參數。以簡便操作,多數配置參數都有默認的配置值也是我們日常使用的必須品。 Hibernate (開放源代碼的對象關系映射框架) Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝, 它將POJO與數據庫表建立映射關系,是一個全自動的orm框架,hibernat...
閱讀 1706·2021-11-12 10:36
閱讀 1621·2021-11-12 10:36
閱讀 3446·2021-11-02 14:46
閱讀 3809·2019-08-30 15:56
閱讀 3557·2019-08-30 15:55
閱讀 1465·2019-08-30 15:44
閱讀 1048·2019-08-30 14:00
閱讀 2740·2019-08-29 18:41