Prinsip Strategi Lazy: Hanya ketika data yang dikembalikan oleh kueri SQL digunakan sebenarnya dikeluarkan untuk database, jika tidak, itu tidak akan dikeluarkan (terutama digunakan dalam kueri bersama dari beberapa tabel)
1. Pemuatan malas satu-ke-satu:
Misalkan ada tabel orang dan tabel kartu dalam database: tabel orang memiliki bidang pid, pname, halaman, psex, cid, dan tabel kartu memiliki bidang cid, cnum;
Misalkan Anda ingin menanyakan nama dan Nomor ID seseorang:
Prinsip: Saat menanyakan nama, versi aktual tidak menanyakan nomor ID. Hanya ketika stasiun saat ini menggunakan nomor ID akan mengeluarkan kueri ke kartu. Ini adalah strategi untuk menanyakan nomor ID;
Contoh Implementasi:
Langkah Implementasi:
1-Impor Paket Jar Ketergantungan Mybatis
File Log4J 2-Add (dapat melihat program pelaksanaan yang sebenarnya dalam memori)
1-prinsip: Hanya ketika stasiun saat ini menggunakan nomor ID digunakan, kueri ke kartu akan dikeluarkan, jika tidak hanya kueri untuk informasi orang yang dikeluarkan.
2-Open Lazy: di conf.xml
<Pengaturan> <pengaturan nama = "LazyLoadingEnabled" value = "true"/> <pengaturan name = "agresifivelazyLoading" value = "false"/> </settings>
3. Implementasi:
(1) Dalam file pemetaan mapper.xml:
<Pilih id = "findCid" parameTerType = "int" resultType = "card"> pilih * dari kartu di mana cid =#{value} < /select> <resultmap type = "person" id = "p_c1"> <id kolom = "pid" property = "pid" /> <hasil kolom = "pname" properti = "pname" /"page" page " /> <page" page = "page" page "page" page " /page" page " /page" page " /page" page "page" page "page" page "page" page "page" page "page" properti = "psex"/> <asosiasi properti = "kartu" javatype = "card" select = "findCid" kolom = "cid"> </association> </resultMap> <pilih id = "selectPersonAndCardLazyBypId" parameTerType = "int" hasil = "p_c1"> ParameterType = "int" int "p_c1"> ParameterType = "int" int "p_c1"> dari orang di mana pid =#{{{nilai {/p_c1 "> dari orang di mana pid =#{{{nilai {/p_c1"> dari orang di mana pid =#{{{nilai {/p_c1 "> dari orang di mana pid =#{{#{nilai {/p_c1"> dari orang di mana pid =#{{#{{{/P_C1 1-Select: Tentukan pernyataan kueri terkait
2-kolom: Tentukan nilai bidang mana dalam pernyataan utama disahkan sebagai parameter ke pernyataan SQL Slave
(2) Tentukan metode dalam antarmuka mapper:
orang publik SelectPersonandCardLazyBypID (Int PID);
(3) Hasil tes menggunakan junit:
1. Ini adalah pertanyaan yang hanya mengirim informasi orang;
@Test public void testselectPersonandcardLazyBypId () {// malas kebijakan satu-ke-satu orang p = pm.selectPersonandcardLazyBypid (1); //System.out.println(p); System.out.println (p.getPname ()+","); //System.out.println(p.getPname ()+","+p.getCard (). GetCnum ()); }Pernyataan permintaan eksekusi hasil:
2. Kueri ke kartu hanya dikeluarkan ketika stasiun saat ini menggunakan nomor ID
@Test public void testselectPersonandcardLazyBypId () {// malas kebijakan satu-ke-satu orang p = pm.selectPersonandcardLazyBypid (1); //System.out.println(p); System.out.println (p.getPname ()+","); System.out.println (p.getpname ()+","+p.getCard (). GetCnum ()); // kueri untuk kartu dikeluarkan ketika stasiun saat ini menggunakan nomor ID}Pernyataan permintaan eksekusi hasil:
2. Pemuatan malas satu-ke-banyak:
Contoh Implementasi:
Asumsikan bahwa ada tabel orang dan tabel informasi identitas kartu dalam database, tabel alamat adder: di mana ada bidang pid di tabel orang, pname, page, psex, cid, tabel kartu, dan bidang cnum di tabel adder; Tabel Adder memiliki bantuan ladang, ashi, pid
Misalkan Anda ingin menanyakan nama dan alamat seseorang, dan nomor ID Anda:
(1) file pemetaan mapper.xml:
<!-Strategi malas satu-ke-banyak-> <pilih id = "fingcard_adder" parameTerType = "int" resultType = "adder"> pilih * dari adder di mana pid =#{value} </selection> <pilih id = "findCid1" parameterType = "int" resultType = "card"> dari card = "findCid1" parameterType = "int" hasil "card =" card "> dari card =" findCid1 "ParameTerpe =" int "hasil" card = "Card"> id="p_c1_a1"> <id column="pid" property="pid" /> <result column="pname" property="pname" /> <result column="page" property="page" /> <result column="psex" property="psex" /> <association property="card" javaType="card" select="findCid1" column="cid"> </association> <collection properti = "adder" oftype = "adder" select = "fingcard_adder" kolom = "pid"> </colly> </richmap> <pilih id = "selectPersonAndCardAndDadderLazyBypId" ParameTerType = "int" resultMap = "p_c1_a1"> ParameterType Where PID =#{Nilai {Nilai {P_C1_A1 "(2) Metode Definisi Antarmuka Mapper:
1. Ini adalah pertanyaan yang hanya mengirim informasi orang;
@Test public void testSelectPersonAndCardandadderLazyBypId () {// malas kebijakan satu-ke-banyak orang p = pm.selectPersonandCardandadderLazyBypid (1); System.out.println (p.getpname ()+","); //// Ini adalah kueri yang hanya mengirimkan informasi orang}Pernyataan permintaan eksekusi hasil:
2. Berikut ini adalah permintaan untuk mengeluarkan informasi orang dan informasi identitas;
@Test public void testSelectPersonAndCardandadderLazyBypId () {// malas kebijakan satu-ke-banyak orang p = pm.selectPersonandCardandadderLazyBypid (1); System.out.println (p.getPname ()+","); // Berikut ini adalah pertanyaan yang hanya memancarkan informasi orang; System.out.println (p.getPname ()+","+p.getCard (). GetCnum ()); // Berikut ini adalah kueri yang memancarkan informasi orang dan informasi identitas; }Pernyataan permintaan eksekusi hasil:
3. Kueri informasi orang, informasi identitas, dan informasi alamat dikeluarkan di sini;
@Test public void testSelectPersonAndCardandadderLazyBypId () {// malas kebijakan satu-ke-banyak orang p = pm.selectPersonandCardandadderLazyBypid (1); System.out.println (p.getPname ()+","); // Ini adalah kueri yang hanya memancarkan informasi orang; System.out.println (p.getPname ()+","+p.getCard (). GetCnum ()); // Ini adalah kueri yang memancarkan informasi orang dan informasi identitas; //System.out.println(p.getPname ()+","+p.getCard (). GetCnum ()); untuk (adder adder: p.getAdder ()) {///// kueri informasi orang, informasi identitas, dan informasi alamat dikeluarkan di sini; System.out.println (adder.getashi ()); }} Pernyataan permintaan eksekusi hasil:
Meringkaskan
Di atas adalah metode penundaan memuat strategi malas di mybatis yang diperkenalkan kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan. Editor akan membalas Anda tepat waktu!