国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

初識Hibernate

tomato / 2231人閱讀

摘要:使用反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。工具類初始化失敗為空,請檢查配置文件瞬時對象與持久化對象測試代碼當前在數(shù)據(jù)庫中沒有記錄進行關(guān)聯(lián),所以此時是瞬時對象。將持久化當前在數(shù)據(jù)庫有唯一一條記錄對應(yīng),所以此時是持久化對象。

一、什么是Hibernate?
Hibernate (開放源代碼的對象關(guān)系映射框架): Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數(shù)據(jù)庫表建立映射關(guān)系,是一個全自動的ORM框架,hibernate可以自動生成SQL語句,自動執(zhí)行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。

二、為什么使用Hibernate? 2.1 Hibernate相對于傳統(tǒng)JDBC的優(yōu)點

對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復性代碼。

Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大程度的簡化DAO層的編碼工作。

hibernate使用Java反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。

hibernate的性能非常好,因為它是個輕量級框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫,從一對一到多對多的各種復雜關(guān)系。

2.2 Hibernate相對于MyBatis的區(qū)別與聯(lián)系
兩者區(qū)別:

兩者聯(lián)系:

緩存方面

相同點:

Hibernate和Mybatis的二級緩存除了采用系統(tǒng)默認的緩存機制外,都可以通過實現(xiàn)你自己的緩存或為其他第三方緩 存方案,創(chuàng)建適配器來完全覆蓋緩存行為。

不同點:

Hibernate的二級緩存配置在SessionFactory生成的配置文件中進行詳細配置,然后再在具體的表-對象映射中配置是那種緩存。

MyBatis的二級緩存配置都是在每個具體的表-對象映射中進行詳細配置,這樣針對不同的表可以自定義不同的緩存機制。并且Mybatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現(xiàn)。

三、Hibernate的使用

準備好User實體類和數(shù)據(jù)庫記錄

User.java

public class User {
    private Integer id;
    private String userName;
    private String passWord;
    //Get、Set方法,此處省略。
}

mysql數(shù)據(jù)庫:

3.1 添加pom依賴

Hibernate基礎(chǔ)Maven依賴:


    
      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 hibernate.cfg.xml配置文件



    
        
        
        com.mysql.jdbc.Driver
        
        admin
        
        jdbc:mysql://localhost:3306/Hibernatetraning
        
        root
        
        org.hibernate.dialect.MySQLDialect
        
        true
       
        
    
3.2 User.hbm.xml映射文件




    
        
        
            
        
        
        

    
測試
        Configuration config = new Configuration().configure();
        SessionFactory sessionFactory = config.buildSessionFactory();

        //測試session是否創(chuàng)建,以及是否可以從user映射的表里獲取記錄
        Session session = sessionFactory.openSession();
        //System.out.println("session=="+session);
        User user = (User)session.get(User.class,1);
        System.out.println(user);
        //關(guān)閉會話工廠,項目自動停止。生產(chǎn)環(huán)境中千萬不要寫這句。
        //sessionFactory.close();

控制臺輸出:User{id=1, userName="Jack", passWord="123"}

四、Hibernate基本概念
Hibernate是自動化程度更高ORM(Object-Relational Mapping)框架,不是面向SQL的持久層框架,以更加OO方式來編寫數(shù)據(jù)讀寫代碼。

4.1 對象與關(guān)系型數(shù)據(jù)庫

注意:一定要清楚當前操作的東西,是屬于對象層面的還是關(guān)系型數(shù)據(jù)庫層面的,解決異常也是如此。

Hibernate中的對象有3中狀態(tài),瞬時對象(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在數(shù)據(jù)庫中沒有記錄進行關(guān)聯(lián),所以此時user1是瞬時對象。

        // 將user1持久化
        session.save(user1);
        tx.commit();

        User user2 = (User)session.get(User.class, 2);
        System.out.println(user2);
        // 當前user2在數(shù)據(jù)庫有唯一一條記錄對應(yīng),所以此時user2是持久化對象。
4.4 hibernate.hbm2ddl.auto

hibernate.cfg.xml配置文件中hibernate.hbm2ddl.auto屬性值(從類自動生成數(shù)據(jù)庫DDL操作)

update設(shè)置為update可以不用手動建表了。

create:如果設(shè)置為該值,則每次加載hibernate時(準確說應(yīng)是創(chuàng)建SessionFactory時)都會刪除以前創(chuàng)建的表而根據(jù)model重新生成表,即使前后的表沒有任何變化,通常會造成數(shù)據(jù)庫數(shù)據(jù)丟失,需謹慎使用這個取值。

create-drop:與create差不多,所不同的是每次sessionFactory關(guān)閉時,就會刪除所有表。

update(最常用):這個取值比較常用,需要先建立數(shù)據(jù)庫,在第一次加載hibernate時會自動創(chuàng)建表,以后創(chuàng)建hibernate會自動根據(jù)model更新表結(jié)構(gòu),即使表結(jié)構(gòu)改變了,以前的行不會被刪除。

validate:每次加載hibernate時,驗證創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu),只會和數(shù)據(jù)庫中的表進行比較,不會創(chuàng)建新表,但是會插入新值。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/73465.html

相關(guān)文章

  • Spring Boot - 表單校驗(JSR303&Hibernate Validator)

    摘要:初步使用主要使用注解的方式對進行校驗,第一個例子在需要校驗的字段上指定約束條件然后在中可以這樣調(diào)用,加上注解即可。如果校驗失敗,默認會返回框架的出錯信息。指定到的分組名會全部進行校驗,不指定的不校驗。 Spring Boot - 表單校驗(JSR303&Hibernate Validator) 回顧 Spring Boot - 初識 Hello World Spring Boot -...

    tinyq 評論0 收藏0
  • Hibernate之CRUD與實例狀態(tài)

    摘要:本文將繼續(xù)介紹簡單的增刪改查方法和對對象實例狀態(tài)的理解查詢方法暫不提及。二實例狀態(tài)中的對象有中狀態(tài)瞬時對象持久化對象和離線對象也叫做脫管對象。持久化狀態(tài)已經(jīng)被持久化,并且加入到緩存中。處于游離狀態(tài)的對象稱為游離對象。 在上一篇《初識Hibernate》中簡單介紹了在Hibernate如何加載對象和持久化對象,以及Hibernate中對象實例狀態(tài)。本文將繼續(xù)介紹Hibernate簡單的增...

    Youngdze 評論0 收藏0
  • Spring Boot - 自定義啟動banner

    摘要:背景這段時間較忙,有些想念小紅,為了表達我對小紅的思念之情,決定將啟動的研究一下,看看是否能夠自定義,讓我天天能夠看到她。 背景 這段時間較忙,有些想念小紅,為了表達我對小紅的思念之情,決定將spring boot啟動的banner研究一下,看看是否能夠自定義,讓我天天能夠看到她。 展示 經(jīng)過調(diào)研,發(fā)現(xiàn)自定義banner是一個輕松愉快的過程,忍不住讓我多啟動幾次,先看看效果:(省略了一...

    CollinPeng 評論0 收藏0
  • Spring Boot - 單元測試(Junit4&Mockito)

    摘要:當面講給你聽講堂地址,或許是最實用的教程,新課促銷中,只要你敢來,保你收貨滿滿。優(yōu)惠報名全程擼碼快速入門教程全原價,優(yōu)惠價全程擼碼進階全原價,優(yōu)惠價 回顧 Spring Boot - 初識 Hello World Spring Boot - Servlet、過濾器、監(jiān)聽器、攔截器 Spring Boot - 靜態(tài)資源處理、啟動加載、日志處理 Spring Boot - 部署Deplo...

    raoyi 評論0 收藏0
  • Hibernate配置及自定義注冊映射文件

    摘要:一配置屬性詳解可以在各式各樣不同環(huán)境下工作而設(shè)計的因此存在著大量的配置參數(shù)。以簡便操作,多數(shù)配置參數(shù)都有默認的配置值也是我們?nèi)粘J褂玫谋仨毱贰? Hibernate (開放源代碼的對象關(guān)系映射框架) Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝, 它將POJO與數(shù)據(jù)庫表建立映射關(guān)系,是一個全自動的orm框架,hibernat...

    coordinate35 評論0 收藏0

發(fā)表評論

0條評論

tomato

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<