Rumah 类库下载 java类库 Hibernate总结

Hibernate总结

Oct 31, 2016 pm 02:24 PM
hibernate

Hibernate为了提高性能,提供了缓存与快照机制。

它的缓存分为一级缓存与二级缓存。

Hibernate一级缓存:当一个事务中执行一次Sql语句时,就将返回的结果存储在Session中的Map集合中(当然,还有快照)。

测试:(以下所有代码处于try/catch块中)

Configuration config=new Configuration().configure();//configure()方法是加载src/hibernate.cfg.xml配置文件
        SessionFactory sf=config.buildSessionFactory();
        Session s=sf.openSession();//Session是高一级的对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();
        }
Salin selepas log masuk

查询:包括get(),load(),原生Sql,HQL,Criteria(比HQL更面向对象的一种查询方式)

//1.get(),load()方法测试
            User u=(User) s.get(User.class, 1);//第一次查询生成SQL语句,并将结果放入缓存
            User u1=(User) s.get(User.class, 1);//第二次查询并无生成SQL语句,但结果取自缓存
            p(u==u1);//true

            //2.HQL查询
            Query q=s.createQuery("from domain.User where id=1");
            User u2=(User) q.uniqueResult();//第三次查询生成了SQL语句,但结果取自缓存
            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语句,但结果取自缓存
            p(u3==u);//true

            //4.Criteria查询
            Criteria c=s.createCriteria(User.class);
            c.add(Restrictions.eq("id", 1));
            User u4=(User) q1.uniqueResult();//第五次查询生成了SQL语句,但结果取自缓存
            p(u4==u);//true
Salin selepas log masuk

总结查询:

1.png

增加:save(),persist()

            User user = new User();//对象的瞬态
                user.setName("xiaobai");
                user.setAge(121);
                s.save(user);//对象的持久态
          s.persist(user);
Salin selepas log masuk

这里两个方法的区别是:执行方法之前设置主键问题与执行方法之后返回主键问题。

1,persist(),把一个瞬态的实例持久化,但是并"不保证"标识符(identifier主键对应的属性)被立刻填入到持久化实例中,标识符的填入可能被推迟到flush的时候。

2,save(), 把一个瞬态的实例持久化标识符,及时的产生,它要返回标识符,所以它会立即执行Sql insert。

User u = new User();
                u.setName("xiaobai");
                u.setAge(121);
                s.save(u);//插入数据库,并将对象瞬态转为持久态,将返回对象存入缓存
                User u1=(User) s.get(User.class, u.getId());//这次查询没有生成SQL语句,结果取自Session的缓存
                p(u1==u);//true
Salin selepas log masuk

删除:delete()

User u=(User) s.get(User.class, 10);//执行查询操作
s.delete(u);//将对象持久态转为游离态

当然,如果感觉为了删除一个数据,还的执行查询操作降低性能,可以这样:

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

更新:update()

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

但有时候,我们不需要执行s.update(对象)方法,这这涉及到对象的持久态一个特性(也有【快照】作用其中):

当对象为持久态时,当它更新数据时,框架会拿它与之前的快照作比较,若相同,则无动作;若不同,则自动更新至数据库。

//当然,也可以这么做
User u=new User();//对象的瞬态,不具备自动更新功能,需要我们手动update()
u.setAge(1);
u.setId(1);
u.setName("1");
s.update(u);
Salin selepas log masuk

总结:

有一点非常重要:在事务中虽然形成了Sql语句,但只有事务.commit()之后才会真正操作数据库。

Hibernate关于数据库的操作,需要弄清楚【缓存,快照,对象三态】等等些许东西。

对象三态:

* 瞬时态:和hibernate没关联,在数据库表中没有对应的id
* 持久态:和hibernate有关联,在数据库表中有对应的id---OID
* 游离态:和hibernate没关联,在数据库表中有对应的id


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengintegrasikan Hibernate dalam projek SpringBoot Bagaimana untuk mengintegrasikan Hibernate dalam projek SpringBoot May 18, 2023 am 09:49 AM

Mengintegrasikan Hibernate dalam SpringBoot Project Preface Hibernate ialah rangka kerja ORM (Object Relational Mapping) yang popular yang boleh memetakan objek Java ke jadual pangkalan data untuk memudahkan operasi kegigihan. Dalam projek SpringBoot, menyepadukan Hibernate boleh membantu kami melaksanakan operasi pangkalan data dengan lebih mudah Artikel ini akan memperkenalkan cara untuk menyepadukan Hibernate dalam projek SpringBoot dan memberikan contoh yang sepadan. 1.Perkenalkan dependenciesPerkenalkan dependencies berikut dalam fail pom.xml: org.springframework.bootspring-boot-starter-data-jpam

Ralat Java: Ralat Hibernate, Cara Mengendalikan dan Mengelak Ralat Java: Ralat Hibernate, Cara Mengendalikan dan Mengelak Jun 25, 2023 am 09:09 AM

Java ialah bahasa pengaturcaraan berorientasikan objek yang digunakan secara meluas dalam bidang pembangunan perisian. Hibernate ialah rangka kerja kegigihan Java yang popular yang menyediakan cara yang mudah dan cekap untuk mengurus kegigihan objek Java. Walau bagaimanapun, ralat Hibernate sering ditemui semasa proses pembangunan, dan ralat ini boleh menyebabkan atur cara ditamatkan secara tidak normal atau menjadi tidak stabil. Cara mengendalikan dan mengelakkan ralat Hibernate telah menjadi kemahiran yang mesti dikuasai oleh pembangun Java. Artikel ini akan memperkenalkan beberapa Hib biasa

Apakah perbezaan antara hibernate dan mybatis Apakah perbezaan antara hibernate dan mybatis Jan 03, 2024 pm 03:35 PM

Perbezaan antara hibernate dan mybatis: 1. Kaedah pelaksanaan 2. Prestasi 3. Perbandingan pengurusan objek; Pengenalan terperinci: 1. Kaedah pelaksanaan, Hibernate ialah penyelesaian pemetaan objek/hubungan yang lengkap yang memetakan objek ke jadual pangkalan data, manakala MyBatis memerlukan pembangun menulis pernyataan SQL dan ResultMap secara manual 2. Prestasi, Hibernate adalah mungkin dari segi kelajuan pembangunan Lebih cepat daripada MyBatis kerana Hibernate memudahkan lapisan DAO dan sebagainya.

Bagaimana untuk melaksanakan operasi kemas kini sisipan pukal dalam Hibernate? Bagaimana untuk melaksanakan operasi kemas kini sisipan pukal dalam Hibernate? Aug 27, 2023 pm 11:17 PM

Dalam artikel ini, kita akan melihat cara melakukan sisipan/kemas kini pukal dalam Hibernate. Setiap kali kami melaksanakan pernyataan sql, kami melakukannya dengan membuat panggilan rangkaian ke pangkalan data. Sekarang, jika kita perlu memasukkan 10 entri ke dalam jadual pangkalan data, maka kita perlu membuat 10 panggilan rangkaian. Sebaliknya, kami boleh mengoptimumkan panggilan rangkaian dengan menggunakan pemprosesan kelompok. Pemprosesan kelompok membolehkan kami melaksanakan satu set pernyataan SQL dalam satu panggilan rangkaian. Untuk memahami dan melaksanakan perkara ini, mari kita tentukan entiti kita − @EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)

Apakah kaedah pemetaan hubungan satu-ke-banyak dan banyak-ke-banyak dalam Java Hibernate Apakah kaedah pemetaan hubungan satu-ke-banyak dan banyak-ke-banyak dalam Java Hibernate May 27, 2023 pm 05:06 PM

Hibernate satu-ke-banyak dan banyak-ke-banyak Hibernate ialah rangka kerja ORM yang sangat baik yang memudahkan akses data antara aplikasi Java dan pangkalan data hubungan. Dalam Hibernate, kita boleh menggunakan perhubungan satu-ke-banyak dan banyak-ke-banyak untuk mengendalikan model data yang kompleks. Satu-ke-banyak Hibernate Dalam Hibernate, hubungan satu-dengan-banyak bermakna satu kelas entiti sepadan dengan berbilang kelas entiti lain. Sebagai contoh, pesanan boleh sepadan dengan berbilang item pesanan (OrderItem), dan pengguna (Pengguna) boleh sepadan dengan berbilang pesanan (Pesanan). Untuk melaksanakan perhubungan satu-ke-banyak dalam Hibernate, anda perlu menentukan atribut koleksi dalam kelas entiti untuk disimpan

Pemahaman mendalam tentang susunan teknologi rangka kerja Java: terokai rangka kerja Java biasa seperti Spring MVC, Hibernate, MyBatis, dsb. Pemahaman mendalam tentang susunan teknologi rangka kerja Java: terokai rangka kerja Java biasa seperti Spring MVC, Hibernate, MyBatis, dsb. Dec 26, 2023 pm 12:50 PM

Timbunan teknologi rangka kerja Java: Memperkenalkan rangka kerja Java yang biasa digunakan, seperti SpringMVC, Hibernate, MyBatis, dll. Dengan pembangunan Java yang berterusan, semakin banyak rangka kerja telah dibangunkan untuk memudahkan proses pembangunan. Antaranya, SpringMVC, Hibernate, MyBatis, dsb. ialah salah satu rangka kerja yang paling biasa digunakan dalam pembangunan Java. Artikel ini akan memperkenalkan konsep asas dan penggunaan rangka kerja ini untuk membantu pembaca memahami dan menggunakan rangka kerja ini dengan lebih baik. Mula-mula, mari perkenalkan Sp

Pengenalan kepada rangka kerja Hibernate dalam bahasa Java Pengenalan kepada rangka kerja Hibernate dalam bahasa Java Jun 10, 2023 am 11:35 AM

Hibernate ialah rangka kerja ORM sumber terbuka yang mengikat pemetaan data antara pangkalan data hubungan dan program Java antara satu sama lain, menjadikannya lebih mudah untuk pembangun mengakses data dalam pangkalan data. Menggunakan rangka kerja Hibernate boleh mengurangkan kerja menulis pernyataan SQL dan meningkatkan kecekapan pembangunan dan kebolehgunaan semula aplikasi. Mari perkenalkan rangka kerja Hibernate dari aspek berikut. 1. Kelebihan rangka kerja Hibernate: pemetaan hubungan objek, menyembunyikan butiran akses pangkalan data, membuat pembangunan

Bagaimanakah cache tahap kedua Hibernate berfungsi? Bagaimanakah cache tahap kedua Hibernate berfungsi? Sep 14, 2023 pm 07:45 PM

Caching membantu mengurangkan panggilan rangkaian pangkalan data apabila melaksanakan pertanyaan. Cache tahap 1 dan pemautan sesi. Ia dilaksanakan secara tersirat. Cache tahap pertama wujud sehingga objek sesi wujud. Setelah objek sesi ditamatkan/ditutup, tidak akan ada objek cache. Cache tahap kedua berfungsi untuk berbilang objek sesi. Ia dikaitkan dengan kilang sesi. Objek cache tahap kedua tersedia untuk semua sesi menggunakan kilang sesi tunggal. Objek cache ini akan ditamatkan apabila kilang sesi tertentu ditutup. Untuk melaksanakan cache tahap kedua kita perlu menambah kebergantungan berikut untuk menggunakan cache tahap kedua. <!--https://mvnrepository.com/artifact/net.sf.ehcache/ehcache--><de

See all articles