Bab 1 Hibernate dan Mybatis
Hibernate adalah kerangka pemetaan O/R yang paling populer saat ini. Itu lahir di SF.Net dan sekarang telah menjadi bagian dari JBoss. Mybatis adalah kerangka pemetaan O/R yang luar biasa. Saat ini termasuk dalam subprokjen Apache.
MyBatis Referensi Situs Resmi: http://www.mybatis.org/core/zh/index.html
Bahan Referensi Hibernate: http://docs.jboss.org/hibernate/core/3.6/reference/zh-cn/html_single/
1.1 Pengantar Hibernate
Hibernate menyediakan enkapsulasi yang relatif lengkap dari struktur basis data. Pemetaan O/R Hibernate mengimplementasikan pemetaan antara tabel POJO dan database, serta generasi otomatis dan pelaksanaan SQL. Pemrogram seringkali hanya perlu mendefinisikan hubungan pemetaan antara tabel POJO dan database, dan dapat menyelesaikan operasi lapisan persistensi melalui metode yang disediakan oleh Hibernate. Pemrogram bahkan tidak perlu mahir dalam SQL. Hibernate/OJB akan secara otomatis menghasilkan SQL yang sesuai dan memanggil antarmuka JDBC untuk dieksekusi sesuai dengan logika penyimpanan yang ditetapkan.
1.2 Pengantar Mybatis
Fokus Ibatis adalah pada hubungan pemetaan antara PoJO dan SQL. Kemudian, dengan memetakan file konfigurasi, parameter yang diperlukan oleh SQL dan bidang hasil yang dikembalikan dipetakan ke POJO yang ditentukan. Dibandingkan dengan Hibernate "O/R", ibatis adalah implementasi ORM dari "pemetaan SQL".
Bab 2 Perbandingan Pengembangan
Kecepatan pengembangan
Penguasaan Hibernate yang sebenarnya lebih sulit daripada Mybatis. Kerangka Mybatis relatif sederhana dan mudah digunakan, tetapi juga relatif sederhana. Secara pribadi, saya pikir untuk menggunakan mybatis dengan baik, Anda harus terlebih dahulu memahami hibernate.
Komunitas Pengembangan
Hibernate dan Mybatis keduanya adalah kerangka pengembangan lapisan kegigihan yang populer, tetapi komunitas pengembangan hibernasi relatif hidup, mendukung banyak alat, dan pembaruan lebih cepat. Versi tertinggi saat ini adalah 4.1.8. Mybatis relatif tenang dan memiliki lebih sedikit alat, dan versi tertinggi saat ini adalah 3.2.
Beban kerja pengembangan
Hibernate dan mybatis memiliki alat pembuatan kode yang sesuai. Metode lapisan DAO sederhana dan dasar dapat dihasilkan.
Untuk pertanyaan lanjutan, mybatis membutuhkan penulisan manual pernyataan SQL dan HasilMap. Hibernate memiliki mekanisme pemetaan yang baik, sehingga pengembang tidak perlu peduli dengan generasi SQL dan pemetaan hasil, dan dapat lebih fokus pada proses bisnis.
Bab 3 Perbandingan Tuning Sistem
Rencana tuning Hibernate mengembangkan strategi caching yang masuk akal;
Cobalah untuk menggunakan fitur pemuatan malas;
Mengadopsi mekanisme manajemen sesi yang masuk akal;
Gunakan batch meraih dan atur parameter batch yang masuk akal (batch_size);
Lakukan desain pemetaan O/R yang masuk akal
Solusi tuning mybatis
Mybatis konsisten dengan siklus hidup sesi Hibernate dalam hal sesi, dan mekanisme manajemen sesi yang masuk akal juga diperlukan. Mybatis juga memiliki mekanisme cache Level 2. Mybatis dapat melakukan desain optimisasi SQL terperinci.
Aspek Optimalisasi SQL
Kueri Hibernate akan meminta semua bidang dalam tabel, yang akan menyebabkan konsumsi kinerja. Hibernate juga dapat menulis SQL sendiri untuk menentukan bidang yang perlu dipertanyakan, tetapi ini menghancurkan kesederhanaan pembangunan hibernasi. SQL Mybatis ditulis secara manual, sehingga Anda dapat menentukan bidang untuk kueri sesuai kebutuhan.
Penyetelan pernyataan HQL hibernasi membutuhkan pencetakan SQL, dan banyak orang tidak menyukai SQL Hibernate karena terlalu jelek. SQL Mybatis ditulis secara manual sendiri, jadi mudah untuk menyesuaikan. Tapi Hibernate memiliki statistik log sendiri. Mybatis sendiri tidak mengandung statistik log dan menggunakan log4j untuk penebangan.
Skalabilitas
Hubungan antara basis data hibernate dan spesifik hanya perlu dikonfigurasi dalam file XML. Semua pernyataan HQL tidak ada hubungannya dengan database spesifik yang digunakan, dan sangat portabel. Semua pernyataan SQL dalam proyek MyBatis tergantung pada database yang digunakan, sehingga dukungan untuk jenis database yang berbeda tidak baik.
Bab 4 Manajemen Objek dan Strategi Perayapan
Manajemen Objek
Hibernate adalah solusi pemetaan objek/relasional lengkap yang menyediakan fungsionalitas manajemen negara objek, sehingga pengembang tidak perlu lagi memperhatikan rincian sistem basis data yang mendasarinya. Yaitu, dibandingkan dengan skenario lapisan persistensi JDBC/SQL yang umum yang memerlukan manajemen pernyataan SQL, Hibernate mengadopsi perspektif yang lebih berorientasi pada objek untuk bertahan dalam aplikasi dalam aplikasi Java.
Dengan kata lain, pengembang yang menggunakan hibernate harus selalu memperhatikan keadaan objek dan tidak harus mempertimbangkan pelaksanaan pernyataan SQL. Bagian dari detail ini telah dikelola oleh Hibernate dan hanya pengembang yang perlu dipahami saat menyetel kinerja sistem.
Mybatis tidak memiliki dokumentasi di bidang ini, sehingga pengguna perlu mengelola objek sendiri secara rinci.
Strategi merangkak
Hibernate memiliki mekanisme yang baik untuk merangkak objek terkait entitas. Untuk setiap hubungan asosiasi, dapat ditetapkan secara rinci apakah akan menunda pemuatan, dan empat mode disediakan: asosiasi merangkak, merangkak kueri, merangkak subquery, dan merangkak batch. Ini dikonfigurasi dan diproses secara rinci.
Pemuatan malas Mybatis dikonfigurasi secara global.
Bab 5 Perbandingan Mekanisme Cache
Cache hibernate
Hibernate Level 1 Cache adalah cache sesi. Jika Anda memanfaatkan cache Level 1 dengan baik, Anda perlu mengelola siklus hidup sesi dengan baik. Disarankan untuk menggunakan sesi dalam operasi tindakan. Cache Level 1 membutuhkan manajemen sesi yang ketat.
Hibernate Level 2 Cache adalah cache tingkat sesiFactory. Cache of Sesiesfactory dibagi menjadi cache bawaan dan cache eksternal. Cache built-in menyimpan data yang terkandung dalam beberapa atribut pengumpulan objek sesiFactory (pemetaan data elemen dan pernyataan SQL yang telah ditentukan, dll.), Yang hanya baca untuk aplikasi. Cache eksternal menyimpan salinan data database, yang mirip dengan cache primer. Selain menggunakan memori sebagai media penyimpanan, cache sekunder juga dapat menggunakan perangkat penyimpanan eksternal seperti hard disk. Cache sekunder disebut cache tingkat proses atau cache tingkat sesi. Ini dapat dibagikan oleh semua sesi, dan siklus hidupnya ada dan menghilang dengan siklus hidup sesiFactory.
Cache mybatis
Mybatis berisi fitur cache kueri yang sangat kuat yang dapat dikonfigurasi dan disesuaikan dengan sangat mudah. Banyak peningkatan implementasi cache di MyBatis 3 telah diimplementasikan, membuatnya lebih kuat dan mudah dikonfigurasi.
Secara default, caching tidak diaktifkan. Selain cache sesi lokal, ini dapat meningkatkan monetisasi dan menangani ketergantungan melingkar juga diperlukan. Untuk mengaktifkan cache Level 2, Anda perlu menambahkan baris ke file pemetaan SQL Anda: <cache/>
Itu secara harfiah. Efek dari pernyataan sederhana ini adalah sebagai berikut:
Semua pernyataan pilih dalam file pernyataan pemetaan akan di -cache.
Semua menyisipkan, memperbarui dan menghapus pernyataan dalam file pernyataan pemetaan menyegarkan cache.
Cache akan diambil menggunakan algoritma yang paling jarang digunakan (LRU, yang paling tidak baru digunakan).
Bergantung pada jadwal (seperti tidak ada interval flush, tidak ada interval penyegaran), cache tidak akan disegarkan dalam urutan kronologis apa pun.
Cache menyimpan 1024 referensi ke koleksi atau objek daftar (terlepas dari apa yang dikembalikan metode kueri).
Cache dianggap sebagai cache baca/tulis (dapat dibaca/ditulis), yang berarti bahwa pengambilan objek tidak dibagikan dan dapat dimodifikasi dengan aman oleh penelepon tanpa mengganggu modifikasi potensial yang dibuat oleh penelepon atau utas lain.
Semua properti ini dapat dimodifikasi oleh properti elemen cache.
Misalnya: <cache eViction = "fifo" flushInterval = "60000" size = "512" readonly = "true"/>
Konfigurasi yang lebih canggih ini menciptakan cache FIFO dan menyegarkan setiap 60 detik, menyimpan 512 referensi ke objek atau daftar hasil, dan objek yang dikembalikan dianggap hanya baca, sehingga memodifikasi mereka di antara penelepon di utas yang berbeda akan menyebabkan konflik. Strategi pemulihan yang tersedia adalah, standarnya adalah LRU:
LRU Paling baru yang digunakan: Hapus objek yang belum digunakan untuk waktu yang lama.
FIFO First-In-Out First: Hapus objek dalam urutan di mana mereka memasukkan cache.
Referensi lunak lunak: Menghapus objek berdasarkan keadaan pengumpul sampah dan aturan referensi lunak.
Referensi lemah yang lemah: lebih agresif menghapus objek berdasarkan keadaan pengumpul sampah dan aturan referensi yang lemah.
FlushInterval dapat diatur ke bilangan bulat positif apa pun, dan mereka mewakili bentuk periode waktu yang masuk akal. Standarnya tidak diatur, yaitu, tidak ada interval penyegaran, dan cache hanya disegarkan ketika pernyataan itu dipanggil.
Ukuran (jumlah referensi) dapat diatur ke bilangan bulat positif apa pun, ingat jumlah objek yang Anda cache dan jumlah sumber daya memori yang tersedia di lingkungan lari Anda. Nilai defaultnya adalah 1024.
Properti ReadAnly dapat diatur ke True atau False. Cache hanya-baca mengembalikan instance yang sama dari objek cache kepada semua penelepon. Oleh karena itu, benda -benda ini tidak dapat dimodifikasi. Ini memberikan keunggulan kinerja yang penting. Cache yang dapat dibaca dan ditulis mengembalikan salinan objek cache (berdasarkan serialisasi). Ini akan lebih lambat, tetapi aman, jadi salah secara default.
Kesamaan
Selain menggunakan mekanisme caching default sistem, cache sekunder Hibernate dan Mybatis dapat sepenuhnya menimpa perilaku cache dengan menerapkan cache Anda sendiri atau membuat adaptor untuk solusi cache pihak ketiga lainnya.
Perbedaan
Konfigurasi cache sekunder Hibernate dikonfigurasi secara rinci dalam file konfigurasi yang dihasilkan oleh sessionFactory, dan kemudian dikonfigurasi dalam peta objek-tabel tertentu.
Konfigurasi cache sekunder MyBatis dikonfigurasi secara rinci di setiap peta objek tabel tertentu, sehingga mekanisme cache yang berbeda dapat disesuaikan untuk tabel yang berbeda. Dan mybatis dapat berbagi konfigurasi dan instance cache yang sama di namespace, yang diimplementasikan melalui cache-ref.
Perbandingan keduanya
Karena Hibernate memiliki mekanisme manajemen yang baik untuk objek kueri, pengguna tidak perlu peduli dengan SQL. Oleh karena itu, jika data kotor muncul saat menggunakan cache sekunder, sistem akan melaporkan kesalahan dan prompt.
Dalam hal ini, mybatis membutuhkan perawatan khusus saat menggunakan cache L2. Jika ruang lingkup operasi pembaruan data tidak dapat ditentukan sepenuhnya, hindari penggunaan cache buta. Kalau tidak, penampilan data kotor akan membawa bahaya tersembunyi yang besar pada operasi normal sistem.
Bab 6 Perbandingan dan Ringkasan Hibernate dan Mybatis
Kesamaan antara keduanya
Hibernate dan MyBatis keduanya dapat menghasilkan sessionFactory dari file konfigurasi XML melalui sessionFactoryBuider, dan kemudian menghasilkan sesi dari sessionFactory, dan akhirnya menjalankan transaksi dan pernyataan SQL. Di antara mereka, siklus hidup sessionfactorybuider, sessionfactory, dan sesi hampir sama.
Baik Hibernate dan Mybatis mendukung transaksi JDBC dan JTA.
Keuntungan Mybatis
Mybatis dapat melakukan optimisasi SQL yang lebih rinci dan mengurangi bidang kueri.
Mybatis mudah dikuasai, sementara Hibernate memiliki ambang batas yang lebih tinggi.
Keuntungan Hibernate
Pengembangan lapisan DAO Hibernate lebih sederhana dari mybatis, yang membutuhkan pemeliharaan SQL dan pemetaan hasil.
Hibernate memelihara dan menyimpan objek lebih baik daripada mybatis, dan lebih nyaman untuk memelihara objek yang ditambahkan, dihapus, dimodifikasi dan diperiksa.
Hibernate Database memiliki portabilitas yang baik, database MyBatis memiliki portabilitas yang buruk, dan database yang berbeda perlu menulis SQL yang berbeda.
Hibernate memiliki mekanisme cache L2 yang lebih baik, yang dapat menggunakan cache pihak ketiga. Mybatis sendiri memberikan mekanisme caching yang buruk.
Ringkasan lainnya
Hibernate memiliki fungsi yang kuat, tidak relevan dengan database yang baik, dan kemampuan pemetaan O/R yang kuat. Jika Anda cukup mahir dalam hibernasi dan merangkum hibernasi dengan benar, maka seluruh kode lapisan kegigihan proyek Anda akan sangat sederhana, ada sedikit kode untuk ditulis, dan kecepatan pengembangannya sangat cepat dan sangat keren.
Kerugian hibernate adalah bahwa ambang pembelajaran tidak rendah, dan Anda harus mahir di dalamnya. Anda perlu memiliki pengalaman dan kemampuan yang kuat untuk merancang pemetaan O/R, cara menyeimbangkan model kinerja dan objek, dan cara menggunakan hibernate dengan baik.
Ibatis mudah untuk memulai, belajar dan menggunakan, menyediakan fungsi pengikatan objek otomatis untuk kueri basis data, dan melanjutkan dengan pengalaman penggunaan SQL yang baik. Cukup sempurna untuk proyek yang tidak memiliki persyaratan model objek yang tinggi.
Kerugian dari ibatis adalah bahwa kerangka kerja masih relatif sederhana dan fungsinya masih hilang. Meskipun kode pengikatan data disederhanakan, seluruh kueri basis data yang mendasarinya sebenarnya harus ditulis dengan sendirinya, beban kerja relatif besar, dan tidak mudah untuk beradaptasi dengan modifikasi database yang cepat.