1. Pengantar cache mybatis
Sama seperti kebanyakan kerangka kerja lapisan kegigihan, Mybatis juga memberikan dukungan untuk cache L1 dan L2.
1. Cache Level 1:
Cache lokal hashmap berdasarkan PerpetualCache memiliki ruang lingkup penyimpanan sesi. Setelah sesi menyiram atau menutup, semua cache dalam sesi akan dihapus.
2. Cache Level 2:
Cache tingkat kedua sama dengan cache tingkat pertama, dan standarnya adalah perpetualcache dan penyimpanan hashmap. Perbedaannya adalah bahwa ruang lingkup penyimpanannya adalah mapper (namespace), dan dapat menyesuaikan sumber penyimpanan, seperti ehcache.
3. Untuk mekanisme pembaruan data cache , ketika ruang lingkup tertentu (sesi cache tingkat pertama/namespaces cache tingkat kedua) dilakukan, semua cache di Selects di bawah cakupan ini akan dihapus secara default.
1.1. Tes cache level 1 mybatis
Paket Me.Gacl.test; impor me.gacl.domain.user; impor me.gacl.util.mybatisutil; impor org.apache.atis.session.sqlsession; impor org.junit.test;/*** @Author gacl*uji Cache level pertama level level level*/public class public test public; default)*/@testpublic void testCache () {sqlSession session = mybatisutil.getSqlSession (); Pernyataan String = "Me.Gacl.Mapping.usermapper.getUser"; User User = Sesion.Selectone (Pernyataan); System.out.println (user);/** Sesi, Sesi, SELECTONE (Pernyataan); System.out.println (user);/level User = Sesi, Cache (); Systems.out.println (user);/level User = Sesi first, Cache,); Systeme.out.println (user);/level User = Sesi First, Cache,); Systeme.out.println (User);/Level User, Sesi First, Cache,); ); System.out.println (user); session.close ();/*. Itu pasti sesi yang sama. Jika objek sesi telah ditutup (), tidak mungkin untuk menggunakannya */session = mybatisutil.getsqlSession (); user = session.selectone (pernyataan,); System.out.println (user);/ *. Kondisi kueri adalah sama */user = session.selecTone (pernyataan,); System.out.println (pengguna);/ *. No session.clearcache () telah dieksekusi untuk membersihkan cache*/// session.clearcache (); user = session.selectone (pernyataan,); system.out.println (user);/*. Tidak ada operasi tambahan/hapus yang telah dijalankan (operasi ini akan membersihkan cache)*/session.update ("me.gacl.mapping.usermapper.updateUser", pengguna baru (, "pengguna",)); user = session.selectone (pernyataan,); System.out.println (pengguna);}}} 1.2. Mybatis Level 2 Cache Test
1. Nyalakan cache sekunder dan tambahkan konfigurasi berikut ke file usermapper.xml
<mapper namespace = "me.gacl.mapping.usermapper"> <!-Nyalakan cache level 2-> <cache/>
2. Uji cache sekunder
Paket Me.Gacl.Test; impor Me.gacl.domain.user; impor me.gacl.util.mybatisutil; impor org.apache.ibatis.Session.sqlsession; impor org.apache.apache.session.sqlSessionFactory; impor org.apache. TestTwolevelCache {/** Test Level 2 Cache* Gunakan dua objek SQLSession yang berbeda untuk menjalankan kueri dengan kondisi kueri yang sama. Pernyataan SQL tidak akan dikirim selama kueri kedua, tetapi data secara langsung diambil dari cache*/@testpublic void testcache () {string pernyataan = "me.gacl.mapping.usermapper.getUser"; sqlSessionFactory factory = mybatisutil.getSessionFactory ();//ucapan sqlsessions = mybatisutil.getSessionFactory ();//MyBATISUTIONSIONSIONSIONSIONSESSESTORY (); factory.opensession (); SQLSession session = factory.opensession (); // Saat menggunakan cache sekunder, kelas pengguna harus mengimplementasikan antarmuka serializable ===> Pengguna mengimplementasikan SerializableUser User = Sesi. System.out.println ("user ="+user); // Karena dua objek SQLSession yang berbeda digunakan, bahkan jika kondisi kueri sama, cache tingkat pertama tidak akan diaktifkan. user = session.selectone (pernyataan,); // session.commit (); system.out.println ("user ="+user);}} 1.3. Instruksi tambahan untuk cache sekunder
1. Semua pernyataan pilih dalam file pernyataan pemetaan akan di -cache.
2. Peta Semua Sisipkan, Perbarui, dan Hapus Pernyataan dalam File Pernyataan akan menyegarkan cache.
3. Cache akan diceritakan kembali menggunakan algoritma yang paling tidak baru digunakan (LRU, yang paling tidak baru digunakan).
4. Cache akan disegarkan sesuai dengan interval waktu yang ditentukan.
5. Cache akan menyimpan 1024 objek
Properti Umum Tag Cache:
<cache eviction="FIFO" <!--Recycling strategy is first-in, first-out -->flushInterval="60000" <!--Automatic refresh time 60s-->size="512" <!--Cache up to 512 reference objects -->readOnly="true"/> <!--Read-only-->
Saya akan memberi Anda beberapa pengetahuan:
Seperti Hibernate, mybatis juga memiliki mekanisme cache
Cache Level 1 didasarkan pada cache lokal hashmap dari PerpetualCache (Mybatis datang) dan ruang lingkupnya adalah sesi, jadi ketika sesi berkomitmen atau tutup, cache akan dihapus.
Cache level kedua juga didasarkan pada kelanggaan abadi secara default, tetapi dapat digunakan untuk membuat sumber penyimpanan, seperti ehcache.
Cache level pertama menempati pernyataan SQL, sedangkan cache tingkat kedua menyimpan objek hasil. Lihat contoh berikut (level log mybatis diatur ke debug)