成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

初識(shí)Hibernate

tomato / 2285人閱讀

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

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

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

對(duì)JDBC訪問(wèn)數(shù)據(jù)庫(kù)的代碼做了封裝,大大簡(jiǎn)化了數(shù)據(jù)訪問(wèn)層繁瑣的重復(fù)性代碼。

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

hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來(lái)實(shí)現(xiàn)透明性。

hibernate的性能非常好,因?yàn)樗莻€(gè)輕量級(jí)框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫(kù),從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。

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

兩者聯(lián)系:

緩存方面

相同點(diǎn):

Hibernate和Mybatis的二級(jí)緩存除了采用系統(tǒng)默認(rèn)的緩存機(jī)制外,都可以通過(guò)實(shí)現(xiàn)你自己的緩存或?yàn)槠渌谌骄? 存方案,創(chuàng)建適配器來(lái)完全覆蓋緩存行為。

不同點(diǎn):

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

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

三、Hibernate的使用

準(zhǔn)備好User實(shí)體類和數(shù)據(jù)庫(kù)記錄

User.java

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

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

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映射文件




    
        
        
            
        
        
        

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

        //測(cè)試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)閉會(huì)話工廠,項(xiàng)目自動(dòng)停止。生產(chǎn)環(huán)境中千萬(wàn)不要寫(xiě)這句。
        //sessionFactory.close();

控制臺(tái)輸出:User{id=1, userName="Jack", passWord="123"}

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

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

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

Hibernate中的對(duì)象有3中狀態(tài),瞬時(shí)對(duì)象(Transient Objects)、持久化對(duì)象(Persistent Objects)和離線對(duì)象(Detached Objects也叫做脫管對(duì)象)。
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為空,請(qǐng)檢查配置文件");
        }
    }

    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 瞬時(shí)對(duì)象與持久化對(duì)象

測(cè)試代碼:

        Session session = HibernateUtils.getSession();
        Transaction tx = session.beginTransaction();

        User user1 = new User();
        user1.setId(2);
        user1.setUserName("Frank");
        user1.setPassWord("111");
        // 當(dāng)前user1在數(shù)據(jù)庫(kù)中沒(méi)有記錄進(jìn)行關(guān)聯(lián),所以此時(shí)user1是瞬時(shí)對(duì)象。

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

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

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

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

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

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

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

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

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

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

相關(guān)文章

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

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

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

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

    Youngdze 評(píng)論0 收藏0
  • Spring Boot - 自定義啟動(dòng)banner

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

    CollinPeng 評(píng)論0 收藏0
  • Spring Boot - 單元測(cè)試(Junit4&Mockito)

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

    raoyi 評(píng)論0 收藏0
  • Hibernate配置及自定義注冊(cè)映射文件

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

    coordinate35 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<