国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Hibernate總結(jié)

Oct 31, 2016 pm 02:24 PM
hibernate

Hibernate為了提高效能,提供了快取與快照機(jī)制。

它的快取分為一級(jí)快取與二級(jí)快取。

Hibernate一級(jí)快?。寒?dāng)一個(gè)事務(wù)中執(zhí)行一次Sql語(yǔ)句時(shí),就將傳回的結(jié)果儲(chǔ)存在Session中的Map集合中(當(dāng)然,還有快照)。

測(cè)試:(以下所有程式碼處?kù)秚ry/catch區(qū)塊中)

Configuration config=new Configuration().configure();//configure()方法是加載src/hibernate.cfg.xml配置文件
        SessionFactory sf=config.buildSessionFactory();
        Session s=sf.openSession();//Session是高一級(jí)的對(duì)Connection的封裝
        Transaction tran=null;
        try {
            tran=s.beginTransaction();
            
            //代碼在此

            tran.commit();
        } catch (HibernateException e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        } finally{
            s.close();
            sf.close();
        }

查詢:包含get(),load(),原生Sql,HQL,Criteria(比HQL更物件導(dǎo)向的查詢方式)

//1.get(),load()方法測(cè)試
            User u=(User) s.get(User.class, 1);//第一次查詢生成SQL語(yǔ)句,并將結(jié)果放入緩存
            User u1=(User) s.get(User.class, 1);//第二次查詢并無生成SQL語(yǔ)句,但結(jié)果取自緩存
            p(u==u1);//true

            //2.HQL查詢
            Query q=s.createQuery("from domain.User where id=1");
            User u2=(User) q.uniqueResult();//第三次查詢生成了SQL語(yǔ)句,但結(jié)果取自緩存
            p(u2==u);//true

            //3.原生Sql
            SQLQuery q1=s.createSQLQuery("select * from User where id=1");
            q1.addEntity(User.class);
            User u3=(User) q1.uniqueResult();//第四次查詢生成了SQL語(yǔ)句,但結(jié)果取自緩存
            p(u3==u);//true

            //4.Criteria查詢
            Criteria c=s.createCriteria(User.class);
            c.add(Restrictions.eq("id", 1));
            User u4=(User) q1.uniqueResult();//第五次查詢生成了SQL語(yǔ)句,但結(jié)果取自緩存
            p(u4==u);//true

總結(jié)查詢:

Hibernate總結(jié)

增加:save(),persist()

            User user = new User();//對(duì)象的瞬態(tài)
                user.setName("xiaobai");
                user.setAge(121);
                s.save(user);//對(duì)象的持久態(tài)
          s.persist(user);

這裡兩個(gè)方法的差別是:執(zhí)行方法之前設(shè)定主鍵問題與執(zhí)行方法之後傳回主鍵問題。

1,persist(),把一個(gè)瞬態(tài)的實(shí)例持久化,但是並"不保證"標(biāo)識(shí)符(identifier主鍵對(duì)應(yīng)的屬性)被立刻填入到持久化實(shí)例中,標(biāo)識(shí)符的填入可能被推遲到flush的時(shí)候。

2,save(), 把一個(gè)瞬態(tài)的實(shí)例持久化標(biāo)識(shí)符,及時(shí)的產(chǎn)生,它要返回標(biāo)識(shí)符,所以它會(huì)立即執(zhí)行Sql insert。

User u = new User();
                u.setName("xiaobai");
                u.setAge(121);
                s.save(u);//插入數(shù)據(jù)庫(kù),并將對(duì)象瞬態(tài)轉(zhuǎn)為持久態(tài),將返回對(duì)象存入緩存
                User u1=(User) s.get(User.class, u.getId());//這次查詢沒有生成SQL語(yǔ)句,結(jié)果取自Session的緩存
                p(u1==u);//true

刪除:delete()

User u=(User) s.get(User.class, 10);//執(zhí)行查詢操作
s.delete(u);//將物件持久性轉(zhuǎn)為遊離態(tài)

當(dāng)然,如果感覺為了刪除一個(gè)數(shù)據(jù),還的執(zhí)行查詢操作降低性能,可以這樣:

User u=new User();
u.setId(5);
s.delete(u);

更新:update()

User u=(User) s.get(User.class, 1);
u.setName("set");

但有時(shí)候,我們不需要執(zhí)行s.update(對(duì)象)方法,這涉及到對(duì)象的持久態(tài)一個(gè)特性(也有【快照】作用其中):

當(dāng)對(duì)象為持久態(tài)時(shí),當(dāng)它更新數(shù)據(jù)時(shí),框架會(huì)拿它與之前的快照作比較,若相同,則無動(dòng)作;若不同,則自動(dòng)更新至資料庫(kù)。

//當(dāng)然,也可以這么做
User u=new User();//對(duì)象的瞬態(tài),不具備自動(dòng)更新功能,需要我們手動(dòng)update()
u.setAge(1);
u.setId(1);
u.setName("1");
s.update(u);

總結(jié):

有一點(diǎn)非常重要:在事務(wù)中雖然形成了Sql語(yǔ)句,但只有事務(wù).commit()之後才會(huì)真正操作資料庫(kù)。

Hibernate關(guān)於資料庫(kù)的操作,需要弄清楚【緩存,快照,物件三態(tài)】等等些許東西。

物件三態(tài):

* 瞬時(shí)態(tài):和hibernate沒關(guān)聯(lián),在資料庫(kù)表中沒有對(duì)應(yīng)的id
* 持久態(tài):和hibernate有關(guān)聯(lián),在資料庫(kù)表中有對(duì)應(yīng)的id---OID
* 遊離態(tài):和hibernate沒關(guān)聯(lián),在資料庫(kù)表中有對(duì)應(yīng)的id


本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
SpringBoot專案裡怎麼整合Hibernate SpringBoot專案裡怎麼整合Hibernate May 18, 2023 am 09:49 AM

在SpringBoot專案中整合Hibernate前言Hibernate是一個(gè)流行的ORM(物件關(guān)係映射)框架,它可以將Java物件映射到資料庫(kù)表,從而方便地進(jìn)行持久化操作。在SpringBoot專案中,整合Hibernate可以幫助我們更輕鬆地進(jìn)行資料庫(kù)操作,本文將介紹如何在SpringBoot專案中整合Hibernate,並提供相應(yīng)的範(fàn)例。 1.引入依賴在pom.xml檔案中引入以下依賴:org.springframework.bootspring-boot-starter-data-jpam

Java?Hibernate中一對(duì)多與多對(duì)多關(guān)係的對(duì)應(yīng)方式是什麼 Java?Hibernate中一對(duì)多與多對(duì)多關(guān)係的對(duì)應(yīng)方式是什麼 May 27, 2023 pm 05:06 PM

Hibernate的一對(duì)多和多對(duì)多Hibernate是一個(gè)優(yōu)秀的ORM框架,它簡(jiǎn)化了Java應(yīng)用程式與關(guān)係型資料庫(kù)之間的資料存取。在Hibernate中,我們可以使用一對(duì)多和多對(duì)多的關(guān)係來處理複雜的資料模型。 Hibernate的一對(duì)多在Hibernate中,一對(duì)多關(guān)係是指一個(gè)實(shí)體類別對(duì)應(yīng)多個(gè)另一個(gè)實(shí)體類別。例如,一個(gè)訂單(Order)可以對(duì)應(yīng)多個(gè)訂單項(xiàng)目(OrderItem),一個(gè)使用者(User)可以對(duì)應(yīng)多個(gè)訂單(Order)。要在Hibernate中實(shí)作一對(duì)多關(guān)係,需要在實(shí)體類別中定義一個(gè)集合屬性來存

Java錯(cuò)誤:Hibernate錯(cuò)誤,如何處理與避免 Java錯(cuò)誤:Hibernate錯(cuò)誤,如何處理與避免 Jun 25, 2023 am 09:09 AM

Java是一種物件導(dǎo)向程式語(yǔ)言,它被廣泛地應(yīng)用於軟體開發(fā)領(lǐng)域。 Hibernate是一種流行的Java持久化框架,它提供了一種簡(jiǎn)單且高效的方式來管理Java物件的持久化。然而,開發(fā)過程中經(jīng)常會(huì)遇到Hibernate錯(cuò)誤,這些錯(cuò)誤可能會(huì)導(dǎo)致程式的異常終止或不穩(wěn)定。如何處理和避免Hibernate錯(cuò)誤成為了Java開發(fā)者必須掌握的能力。本文將介紹一些常見的Hib

hibernate和mybatis有哪些差別 hibernate和mybatis有哪些差別 Jan 03, 2024 pm 03:35 PM

hibernate和mybatis的差別:1、實(shí)作方式;2、效能;3、物件管理的比較;4、快取機(jī)制。詳細(xì)介紹:1、實(shí)作方式,Hibernate是一個(gè)完整的物件/關(guān)係映射解決方案,將物件與資料庫(kù)表進(jìn)行映射,MyBatis則需要開發(fā)者手動(dòng)編寫SQL語(yǔ)句以及ResultMap;2、效能,Hibernate在開發(fā)速度上可能比MyBatis快,因?yàn)镠ibernate簡(jiǎn)化了DAO層等等。

Java語(yǔ)言中的Hibernate框架介紹 Java語(yǔ)言中的Hibernate框架介紹 Jun 10, 2023 am 11:35 AM

Hibernate是一個(gè)開放原始碼的ORM框架,它將關(guān)係型資料庫(kù)和Java程式之間的資料映射相互綁定,這樣可以讓開發(fā)人員更方便地存取資料庫(kù)中的資料。使用Hibernate框架可以大幅減少編寫SQL語(yǔ)句的工作,並提高應(yīng)用程式的開發(fā)效率和可重複使用性。以下從以下幾個(gè)方面來介紹Hibernate框架。一、Hibernate框架的優(yōu)點(diǎn)物件關(guān)係映射,隱藏資料庫(kù)存取細(xì)節(jié),使開發(fā)

Hibernate二級(jí)快取是如何運(yùn)作的? Hibernate二級(jí)快取是如何運(yùn)作的? Sep 14, 2023 pm 07:45 PM

快取有助於減少執(zhí)行查詢時(shí)的資料庫(kù)網(wǎng)路呼叫。一級(jí)緩存與會(huì)話連結(jié)。它是隱式實(shí)現(xiàn)的。一級(jí)緩存存在直到會(huì)話物件存在為止。一旦會(huì)話物件終止/關(guān)閉,將會(huì)有沒有快取物件。二級(jí)緩存適用於多個(gè)會(huì)話物件。它是連結(jié)的與會(huì)話工廠。二級(jí)緩存物件可供所有會(huì)話使用單一會(huì)話工廠。當(dāng)特定會(huì)話發(fā)生時(shí),這些快取物件將被終止工廠已關(guān)閉。實(shí)作二級(jí)快取我們需要新增以下相依性才能使用二級(jí)快取。 <!--https://mvnrepository.com/artifact/net.sf.ehcache/ehcache--><de

Java中如何設(shè)定Hibernate環(huán)境 Java中如何設(shè)定Hibernate環(huán)境 Apr 26, 2023 am 11:55 AM

1.hibernate映射配置class標(biāo)籤,用來建立類別與表之間的關(guān)係name:類別名,table:表名id標(biāo)籤,建立中的屬性與表中的主鍵的對(duì)應(yīng)關(guān)係property,建立類別中的普通屬性與表格的欄位的對(duì)應(yīng)關(guān)係(1)首先我們要學(xué)會(huì)如何編寫映射配置文件,大家要知道編寫完的映射配置文件應(yīng)與實(shí)體類在同一個(gè)包下,並且名稱應(yīng)是類名.hbm.xml,所以我們要在com.meimeixia.hibernate.demo01套件下建立一個(gè)Customer.hbm.xml文件,但是它的限制該怎麼寫呢?可以在Hiberna

如何在Hibernate中執(zhí)行批次插入更新操作? 如何在Hibernate中執(zhí)行批次插入更新操作? Aug 27, 2023 pm 11:17 PM

在本文中,我們將看到如何在Hibernate中執(zhí)行批次插入/更新。每當(dāng)我們執(zhí)行一條sql語(yǔ)句時(shí),我們都是透過對(duì)資料庫(kù)進(jìn)行網(wǎng)路呼叫來完成的?,F(xiàn)在,如果我們必須在資料庫(kù)表中插入10個(gè)條目,那麼我們必須進(jìn)行10次網(wǎng)路呼叫。相反,我們可以透過使用批次來優(yōu)化網(wǎng)路呼叫。批次允許我們?cè)趩我痪W(wǎng)路呼叫中執(zhí)行一組SQL語(yǔ)句。為了理解和實(shí)作這一點(diǎn),讓我們定義我們的實(shí)體?@EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)

See all articles