1. Penundaan pemuatan
RACKMAP dapat mengimplementasikan pemetaan lanjutan (menggunakan asosiasi dan pengumpulan untuk mengimplementasikan pemetaan satu-ke-satu dan satu-ke-banyak). Asosiasi dan koleksi memiliki fungsi pemuatan malas.
Penundaan pemuatan: Kueri pertama dari satu tabel, dan kemudian mengaitkan kueri dari tabel terkait saat diperlukan, sangat meningkatkan kinerja basis data, karena menanyakan satu tabel lebih cepat daripada menanyakan beberapa tabel.
Konfigurasi dalam file konfigurasi inti myBatis:
LazyLoadingEnabled, agressivelazyloading
Pengaturan | menggambarkan | Nilai yang diizinkan | nilai default |
LazyloadingEnabled | Pengaturan Global Pemuatan Malas. Jika diatur ke 'false', semua yang terkait akan diinisialisasi dan dimuat. | Benar | PALSU | PALSU |
agresivelyzyloading | Saat diatur ke 'benar', objek pemuatan malas dapat dimuat oleh semua properti malas. Kalau tidak, setiap properti dimuat sesuai kebutuhan. | Benar | PALSU | BENAR |
<Pengaturan> <pengaturan nama = "LazyLoadingEnabled" value = "true"/> <pengaturan name = "agresifivelazyLoading" value = "false"/> </settings>
kesempatan:
Ketika hanya beberapa catatan yang perlu dikaitkan dengan kueri informasi lain, mereka dapat ditunda memuat sesuai kebutuhan. Ketika kueri terkait diperlukan, SQL akan dikeluarkan ke database untuk meningkatkan kinerja database.
Ketika semua informasi kueri terkait diperlukan, tidak perlu menunda pemuatan saat ini, cukup kembalikan semua informasi kueri yang terkait. Anda dapat menggunakan HRESSTYPE atau RACKMAP untuk menyelesaikan pemetaan.
Dua: Kasus: (satu-ke-banyak di departemen dan karyawan)
Pendahuluan Kode Sumber:
1.Dept.java
paket cn.zhang.entity; import java.util.hashset; import java.util.set; kelas publik dept {private integer deptno; Private String Deptname; set pribadi <emp> emp = hashset baru <emp> (); @Override Public String ToString () {return "DEPTNO =" + DEPTNO + ", DEPTNAME =" + DEPTNAME + ", emp =" + emp + "]"; } public integer getDeptno () {return deptno; } public void setDeptno (integer deptno) {this.deptno = deptno; } public String getDeptName () {return deptName; } public void setDeptName (String deptName) {this.deptname = deptName; } set publik <emp> getemp () {return emp; } public void setemp (set <emp> emp) {this.emp = emp; }}2.emp.java
paket cn.zhang.entity; kelas publik emp {private integer empno; private string empname; @Override public string toString () {return "emp [empno =" + empno + ", empname =" + empname + "]"; } public integer getempno () {return empno; } public void setempno (integer empno) {this.empno = empno; } public String getempName () {return empname; } public void setempName (string empName) {this.empname = empname; }}3.Mybatisutil.java
Paket cn.zhang.util; impor java.io.ioException; impor java.io.reader; impor org.apache.ibatis.io.Resources; impor org.apache.ibatis.Session org.apache.ibatis.Session.SQLSessionFactory; impor org.apache.ibatis.session.sqlSessionFactoryBuilder;/*** Kelas alat**/kelas publik mybatisutil {private static string = "mybatis-config.xml"; pembaca pembaca statis; static {try {reader = resources.getResourCeasReader (config); } catch (ioException e) {e.printstacktrace (); }} private static SQLSessionFactory factory = new SqlSessionFactoryBuilder () .build (pembaca); // Berikan metode yang bisa mendapatkan sesi public static SQLSession getSession () melempar ioException {SQLSession session = factory.opensession (); sesi kembali; }}4.Deptdao.java
Paket cn.zhang.dao; import java.io.ioException; import cn.zhang.entity.dept; antarmuka publik deptdao { / ** * permintaan catatan yang ditentukan * @return * @throws IoException * / Public Dept FindById (Integer ID) melempar ioException;5.Deptdao.xml
<? XML Versi = "1.0" encoding = "utf-8"?> <! Doctype mappperpublic "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd namespace = "cn.zhang.dao.deptdao"> <!-3. Informasi KUTIPAN PEKERJAAN berdasarkan ID Karyawan-> <pilih id = "selectempbyDeptno" resultType = "emp"> pilih empno, empname dari emp di mana deptno =#{deptno} </select> <! id = "deptmapper"> <id properti = "deptno" kolom = "deptno" /> <properti hasil = "deptname" kolom = "deptname" /> <!-karyawan satu-ke-banyak yang terkait dengan departemen-> <!-Pilih: Kueri Karyawan Terkait-> <!-Kolom: Ketentuan yang diperlukan untuk Associate Pegawai (Sumber dari 1)-"Kolom =" "Kolom:" KOLOM PEKERJAAN = "" Sumber dari 1)-"Kolom:" Kolom: "KOLOM PEKERJAAN =" KOLOM PEKERJAAN = "" Sumber dari 1)-"Kolom:" Kolom: "KOLOM PEKERJAAN =" KOLOM PEKERJAAN = "" Sumber dari 1)-"Kolom:" Sumber "KOLOM PEKERJAAN =" " SELECT = "selectempbyDeptno" kolom = "deptno" /> < /resultMap> <!-1. Informasi Departemen Permintaan Berdasarkan ID Departemen -> <pilih id = "findById" resultMap = "deptmapper"> pilih deptno, deptname from dept where deptno =#{deptno} </ pilih> </mapper>6.mybatis-config.xml (konfigurasi untuk pemuatan malas ada di sini)
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype ConfigurationPublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <konfigural/loading <! PALSU. Jika salah: maka semua yang terkait akan diinisialisasi dan dimuat. AgresresivelazyLoading: Default benar. Ketika diatur ke true, objek yang dimuat malas dapat dimuat oleh atribut malas apa pun; Jika tidak, setiap atribut akan dimuat sesuai kebutuhan. -> <settings> <!-Nyalakan sakelar pemuatan yang tertunda-> <pengaturan nama = "LazyLoadingEnabled" value = "true" /> <!-Ubah pemuatan aktif ke pemuatan pesan yang memuat sesuai kebutuhan-> <pengaturan nama = "agresivelazy loading" value = "false" /< /settings> <!-configuration alias-> <palkeases 1:> < /setting> <!-configuration alias-> <palkeAs> < /settings> < /settings> <!-configuration alias-> <palkeases 1ases:> < /setting> <!-configuration alias-> <palkeAs> < /settings> <! 2: Gunakan nama kelas sederhana di bawah paket yang saat ini ditentukan sebagai alias-> <package name = "cn.zhang.entity" /> </yypealiases> <lingkungan default = "oracle"> <lingkungan id = "oracle"> <!-transaksi menggunakan jdbc-> <TransactionManager type = "jdbc" /<! Database Oracle yang saya gunakan -> <name properti = "driver" value = "oracle.jdbc.driver.oracledriver" /> <name properti = "url" value = "jdbc: oracle: tipis: @localhost: 1521: orcl" /> <nama properti = "nama pengguna" value = "study" < /> < /orcl " </Environments> <Mappers> <mapper Resource = "cn/zhang/dao/deptdao.xml"/> </mappers> </konfigurasi>
7.mytest.java (kelas tes)
Paket cn.zhang.test; // satu-ke-banyak impor java.io.ioException; impor org.apache.ibatis.Session.sqlsession; impor org.junit.before; impor org.junit.test; impor cnhang.dao.deptda; cn.zhang.util.mybatisutil; kelas publik mytest {deptdao dao; @Before public void initData () melempar ioException {SQLSession sesi = mybatisutil.getSession (); dao = session.getMapper (deptdao.class); } / *** Permintaan catatan yang ditentukan* @throws IoException* / @test public void findAll () melempar ioException {dept dept = dao.findbyid (1); System.out.println (dept); }}Hasil tes:
Break point di bawah ini
Situasi 1: Tidak ada konfigurasi di mybatis-config.xml
Situasi 2: Konfigurasikan di mybatis-config.xml
<Pengaturan> <!-Nyalakan sakelar pemuatan yang tertunda-> <pengaturan nama = "LazyLoadingEnabled" value = "true" /> <!-Ubah pemuatan aktif ke pemuatan pesan yang memuat sesuai kebutuhan-> <pengaturan nama = "agresivelazyLoading" value = "false" /> < /settings>
Langkah selanjutnya:
F6 Langkah Berikutnya:
F6 Langkah Berikutnya: Ketikkan nama karyawan
Situasi 3:
F6 Langkah Berikutnya:
F6 Berikutnya: Cetak Nama Karyawan
Di atas adalah penundaan pemuatan di mybatis yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!