hibernate4--02詳解

1. Configuration管理讀取配置文件

//讀取src下hibernate.properties,不推薦使用
Configuration cfg = new Configuration();
//如果hibernate的核心配置文件 不叫 hibernate.cfg.xml 
Configuration cfg1 = new Configuration().configure("hb.cfg.xml");
//可編程式  可以不使用配置文件
//cfg.addProperties();
//cfg.addResource()

Configuration在一個(gè)應(yīng)用中车海,最好寫一個(gè)嚷狞。通過(guò)configuration來(lái)創(chuàng)建SessionFactory對(duì)象夺溢。

2. SessionFactory對(duì)象:是一個(gè)session工廠甥捺。是一個(gè)重量級(jí)對(duì)象邮绿。在一個(gè)應(yīng)用中最好也是單列的渠旁。是一個(gè)線程安全的。屬于進(jìn)程級(jí)別的對(duì)象船逮。

//2.通過(guò)Configuration創(chuàng)建SessionFactory對(duì)象
//在hibernate3.x中是這種寫法
//SessionFactory sf = cfg.buildSessionFactory();
//hibernate4.3之前~hibernate4.0
//      ServiceRegistry sr = new ServiceRegistryBuilder()
//                          .applySettings(cfg.getProperties())
//                          .buildServiceRegistry();
        //hibernate4.3
        ServiceRegistry registry = new StandardServiceRegistryBuilder()
                            .applySettings(cfg.getProperties())
                            .build();
        SessionFactory sf = cfg.buildSessionFactory(registry);

                //或者
                //SessionFactory  sf = cfg.buildSessionFactory();

3. Session對(duì)象:使用hibernate進(jìn)行數(shù)據(jù)庫(kù)操作顾腊,主要使用session。Session可以理解為對(duì)Connection對(duì)象的一個(gè)包裝傻唾。Session對(duì)象中提供了對(duì)數(shù)據(jù)庫(kù)的crud操作投慈。

Session是一個(gè)線程不安全的對(duì)象承耿。生命周期非常短暫冠骄,一般和事務(wù)一一對(duì)應(yīng)。Session又稱為hibernate中的一級(jí)緩存加袋。Session又是transaction對(duì)象的工廠凛辣。

//3.通過(guò)SessionFactory得到Session
Session session = sf.openSession();

4. Transaction對(duì)象:事務(wù)管理對(duì)象。通過(guò)session來(lái)獲取到該對(duì)象职烧。包括了事務(wù)的開(kāi)啟扁誓,事務(wù)的提交,事務(wù)的回滾蚀之。

//第一種寫法
Transaction tx = session.beginTransaction();
//第二種寫法
Transaction tran = session.getTransaction();
tran.begin();

事務(wù)和異常處理:

public static void main(String[] args) {
        Configuration cfg = null;
        SessionFactory sf = null;
        Session session = null;
        Transaction tx = null;
        try{
            cfg = new Configuration().configure();
            ServiceRegistry registry = new StandardServiceRegistryBuilder()
                                .applySettings(cfg.getProperties())
                                .build();
            sf = cfg.buildSessionFactory(registry);
            session = sf.openSession();
            tx = session.beginTransaction();
            User u  = (User)session.get(User.class, 2);
            System.out.println("name="+u.getName());
            //6.提交事務(wù)
            tx.commit();
        }catch (Exception e) {
            e.printStackTrace();
            //回滾事務(wù)
            tx.rollback();
        }finally{
            //7.關(guān)閉session
            if(session!=null&&session.isOpen())
            session.close();
        }
    }

5. hibernate.cfg.xml講解

<session-factory>
    <!-- 配置數(shù)據(jù)庫(kù)連接信息 -->
    <!-- 數(shù)據(jù)庫(kù)驅(qū)動(dòng) -->
    <property name="connection.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <!-- url 相當(dāng)于:jdbc:mysql://localhost:3306/hibernate4-->
    <property name="connection.url">
        jdbc:mysql:///hibernate4
    </property>
    <property name="connection.username">root</property>
    <property name="connection.password">root</property>
    <!-- hibernate可選項(xiàng)信息 -->
    <!-- 數(shù)據(jù)庫(kù)方言 -->
    <property name="dialect">
        org.hibernate.dialect.MySQL5Dialect
    </property>
    <!-- 是否打印sql語(yǔ)句 -->
    <property name="show_sql">true</property>
    <!-- 格式化sql語(yǔ)句 -->
    <property name="format_sql">true</property>
    <!-- 數(shù)據(jù)庫(kù)更新方式:
        create:每次執(zhí)行 都先把原有數(shù)據(jù)表刪除蝗敢,然后創(chuàng)建該表
        create-drop:使用 create-drop時(shí),在顯式關(guān)閉SessionFactory時(shí),
        將drop掉數(shù)據(jù)庫(kù)schema(表). 
        validate:檢測(cè)
        update:如果表不存在 則創(chuàng)建足删,有就不用創(chuàng)建
     -->
    <property name="hbm2ddl.auto">update</property>
    <!-- 映射文件信息 -->
    <mapping resource="cn/siggy/pojo/User.hbm.xml" />
</session-factory>

6. *.hbm.xml講解

<!-- package聲明pojo類所在的包寿谴,如果不寫 那么在class中需要指明pojo類所在的包
         schema指數(shù)據(jù)庫(kù)模式 一個(gè)模式下可以有多張表
     -->
<hibernate-mapping package="cn.siggy.pojo" >
    <!-- class指映射一個(gè)pojo類
        提供了公共的無(wú)參構(gòu)造方法-通過(guò)反射產(chǎn)生對(duì)象
        屬性用private修飾,并且生成對(duì)應(yīng)的get/set方法
        類不能用final來(lái)修飾-hibernate會(huì)產(chǎn)生代理類(cglib)
        類需要指明標(biāo)識(shí)
        name表示pojo類名
        table表示pojo類對(duì)應(yīng)數(shù)據(jù)庫(kù)中的表名失受;如果不寫默認(rèn)是類名
     -->
    <class name="User" table="user">
        <!-- 
            id表示實(shí)體類的標(biāo)識(shí)(OID)
            對(duì)應(yīng)數(shù)據(jù)庫(kù)表中的主鍵
            name指實(shí)體類的標(biāo)識(shí)屬性名
            column表示對(duì)應(yīng)數(shù)據(jù)庫(kù)表的列名:如果不寫 則數(shù)據(jù)庫(kù)表中列名和屬性名一致
            length表示數(shù)據(jù)庫(kù)表中 對(duì)應(yīng)數(shù)據(jù)類型的長(zhǎng)度 讶泰,如果不寫有默認(rèn)長(zhǎng)度
            type表示類型如果不寫hibernate可以找到對(duì)應(yīng)pojo類的屬性的類型
         -->
        <id name="id" column="id">
            <!-- 主鍵生成策略
                increment 用于為long, short或者int類型生成 唯一標(biāo)識(shí)咏瑟。
                只有在沒(méi)有其他進(jìn)程往同一張表中插入數(shù)據(jù)時(shí)才能使用。 在集群下不要使用
                (mysql,ms sql)
                identity 對(duì)DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL
                的內(nèi)置標(biāo)識(shí)字段提供支持痪署。 返回的標(biāo)識(shí)符是long, short 或者int類型的码泞。 
                sequence 在支持序列的數(shù)據(jù)庫(kù)中使用 oracle
                <generator class="sequence">
                    <param name="sequence">user_seq</param>
                </generator>
                uuid UUID被編碼為一個(gè)32位16進(jìn)制數(shù)字的字符串。 
                native 根據(jù)底層數(shù)據(jù)庫(kù)的能力選擇identity, sequence 或者h(yuǎn)ilo中的一個(gè)狼犯。
                assigned 自己指定主鍵
             -->
            <generator class="native"/>
        </id>
        <!-- 實(shí)體類的屬性 
            name:指明 pojo類屬性名稱(區(qū)分大小寫)
        -->
        <property name="name">
            <column name="name"></column>
        </property> 
        <property name="pwd"/>  
    </class>
</hibernate-mapping>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末余寥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子悯森,更是在濱河造成了極大的恐慌劈狐,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呐馆,死亡現(xiàn)場(chǎng)離奇詭異肥缔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)汹来,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門续膳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人收班,你說(shuō)我怎么就攤上這事坟岔。” “怎么了摔桦?”我有些...
    開(kāi)封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵社付,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我邻耕,道長(zhǎng)鸥咖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任兄世,我火速辦了婚禮啼辣,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘御滩。我一直安慰自己鸥拧,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布削解。 她就那樣靜靜地躺著富弦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氛驮。 梳的紋絲不亂的頭發(fā)上腕柜,一...
    開(kāi)封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼媳握。 笑死碱屁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蛾找。 我是一名探鬼主播娩脾,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼打毛!你這毒婦竟也來(lái)了柿赊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤幻枉,失蹤者是張志新(化名)和其女友劉穎碰声,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體熬甫,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胰挑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了椿肩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞻颂。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖郑象,靈堂內(nèi)的尸體忽然破棺而出贡这,到底是詐尸還是另有隱情,我是刑警寧澤厂榛,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布盖矫,位于F島的核電站,受9級(jí)特大地震影響击奶,放射性物質(zhì)發(fā)生泄漏辈双。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一正歼、第九天 我趴在偏房一處隱蔽的房頂上張望辐马。 院中可真熱鬧拷橘,春花似錦局义、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至术幔,卻和暖如春另萤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工四敞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泛源,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓忿危,卻偏偏與公主長(zhǎng)得像达箍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子铺厨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容