Saya belum pernah menggunakan mybatis sebelumnya, saya hanya tahu bahwa ini adalah kerangka kerja database ORM seperti Hibernate. Sebagai kemahiran menggunakan peningkatan, saya menemukan bahwa itu sangat berbeda dari hibernate. Teman yang tertarik dapat mempelajarinya melalui artikel ini.
Mengambil keuntungan dari akhir pekan ini, saya meluangkan waktu untuk memilah beberapa teknologi yang umum digunakan, dan editor akan memperbarui konten dari waktu ke waktu.
Pertama, mari kita perkenalkan secara singkat konsep keduanya:
Hibernate: Hibernate adalah kerangka ORM paling populer saat ini dan memberikan enkapsulasi yang relatif lengkap dari struktur basis data.
Mybatis: Mybatis juga merupakan kerangka kerja ORM yang sangat populer, dengan fokus utama pada hubungan pemetaan antara PoJO dan SQL.
Kedua, mari kita bicara tentang perbedaan antara keduanya dalam beberapa aspek:
1. Perbedaan terbesar antara keduanya:
Untuk logika sederhana, hibernate dan mybatis memiliki alat pembuatan kode yang sesuai yang dapat menghasilkan metode lapisan DAO sederhana dan dasar.
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.
2. Perbandingan Kesulitan Pembangunan
Perkembangan hibernasi lebih sulit daripada mybatis. Terutama karena Hibernate kompleks dan besar, dan memiliki siklus belajar yang panjang.
Mybatis relatif sederhana, dan Mybatis terutama bergantung pada penulisan SQL, membuat pengembang merasa lebih akrab.
3. Perbandingan Penulisan SQL
SQL Mybatis ditulis secara manual, sehingga Anda dapat menentukan bidang untuk kueri sesuai kebutuhan. Namun, tidak ada statistik log sendiri, jadi Anda perlu menggunakan log4j untuk merekam log.
Hibernate juga dapat menulis SQL sendiri untuk menentukan bidang yang perlu dipertanyakan, tetapi ini menghancurkan kesederhanaan pembangunan hibernasi. Namun, Hibernate memiliki statistik log sendiri.
4. Perbandingan skalabilitas basis data
Karena semua SQL ditulis pada database, Mybatis memiliki skalabilitas dan migrasi yang buruk.
Hubungan spesifik antara hibernate dan database ada di XML, jadi HQL tidak terlalu peduli dengan basis data mana yang digunakannya.
5. Perbandingan mekanisme caching
Kesamaan: Selain menggunakan mekanisme caching default sistem, cache tingkat kedua 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 yang cache yang dikonfigurasi.
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.
6. Ringkasan:
Mybatis: Kecil, nyaman, efisien, sederhana, langsung, semi-otomatis
Hibernate: kuat, nyaman, efisien, kompleks, otomatis penuh
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.
Keuntungan mybatis adalah bahwa mybatis dapat melakukan optimasi SQL yang lebih rinci, mengurangi bidang kueri, dan mudah dikuasai.
Keuntungan hibernate adalah bahwa pengembangan lapisan DAO lebih sederhana daripada mybatis, yang membutuhkan pemeliharaan SQL dan pemetaan hasil. Portabilitas basis data sangat bagus, portabilitas database mybatis tidak baik, dan database yang berbeda perlu menulis SQL yang berbeda. Ada mekanisme caching level 2 yang lebih baik, dan caching pihak ketiga dapat digunakan. Mybatis sendiri memberikan mekanisme caching yang buruk.
mybatis:
1. Sangat mudah untuk memulai, belajar dan menggunakan, dan menyediakan fungsi pengikatan objek otomatis untuk kueri basis data, dan melanjutkan pengalaman yang baik dalam penggunaan SQL. Cukup sempurna untuk proyek yang tidak memiliki persyaratan model objek yang tinggi.
2. Optimalisasi SQL yang lebih rinci dapat dilakukan, yang dapat mengurangi bidang kueri.
3. Kerugiannya 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 sendiri, beban kerja relatif besar, dan tidak mudah untuk beradaptasi dengan modifikasi database yang cepat.
4. Mekanisme caching sekunder buruk.
Hibernate:
1. Fungsi yang kuat, ketidakjelasan database yang baik, dan kemampuan pemetaan O/R yang kuat. Jika Anda cukup mahir dalam hibernasi hibernate dan dengan benar, maka seluruh kode lapisan kegigihan proyek Anda akan sangat sederhana, ada sedikit kode untuk ditulis, kecepatan pengembangannya sangat cepat, dan sangat keren.
2. Ada mekanisme caching sekunder yang lebih baik, dan caching pihak ketiga dapat digunakan.
3. Kerugiannya adalah bahwa ambang pembelajaran tidak rendah, dan Anda harus mahir di dalamnya. Cara merancang pemetaan O/R, cara menyeimbangkan model kinerja dan objek, dan cara menggunakan hibernate dengan baik membutuhkan pengalaman dan kemampuan Anda untuk menjadi kuat.
Izinkan saya memberi Anda metafora yang jelas:
Mybatis: Alat mekanis mudah digunakan dan dapat digunakan sesegera mungkin, tetapi pekerjaan itu masih perlu dilakukan sendiri, tetapi alatnya hidup, jadi bagaimana membuatnya tergantung pada saya.
Hibernate: robot cerdas, tetapi sangat mahal untuk mengembangkannya (belajar, kemahiran) dan pekerjaan dapat menyingkirkannya, tetapi hanya apa yang dapat dilakukan.