由于java视频里以前好多都是SSH。但是在实际工作中没见过用hibernate的,基本都用mybatis。
我有一些疑问:
hibernate碰到什么样的业务会变成致命的弱点,都说hibernate效率低,能否举个例子(例如同一个查询用mybatis查询耗时1秒,用hibernate查询耗时10秒)
可能是有部分人遇到了hibernate的瓶颈,但是这部分人的业务量我觉得,不是大部分使用hibernate的人都能遇到的。一般的小项目,不超过100个用户,这样的项目综合考虑的话更适合用mybatis还是hibernate?主要从开发效率上来说的话。为什么?
Terdapat soalan serupa tentang Zhihu.
Jawapan yang saya lihat undian tinggi ialah
hibernate
lebih sukar untuk dikuasai daripadamybatis
, dan kawalan SQL adalah lebih lemah.Menulis mb sql ke dalam xml juga memerlukan penghuraian, dan kecekapannya tidak jauh lebih tinggi
Bandingkan hubungan antara keduanya dan berikan pertimbangan dari tiga aspek: kecekapan pembangunan, kebolehselenggaraan dan prestasi. Dari segi kepentingannya, dalam proses pembangunan kejuruteraan projek, kecekapan pembangunan > kebolehselenggaraan > prestasi. Mungkin bagi sesetengah perniagaan, prestasi adalah lebih kritikal, tetapi melihat kepada keadaan keseluruhan, saya secara peribadi merasakan kecekapan pembangunan > kebolehselenggaraan > prestasi.
Pertama sekali, kecekapan pembangunan. Secara peribadi, saya merasakan bahawa jika anda melakukan beberapa projek mudah seperti CMS dengan hanya penambahan, pemadaman, pengubahsuaian dan pertanyaan yang mudah, maka menggunakan Hibernate adalah lebih berfaedah Anda tidak perlu menguasai terlalu banyak pengetahuan Hibernate, anda hanya perlu tahu beberapa pertanyaan asas dan beberapa konfigurasi (Hibernate adalah benar-benar Untuk belajar, saya secara peribadi merasakan bahawa jumlah pengetahuan adalah lebih besar daripada mybatis). hiberbate menggunakan objek java untuk menulis sql, manakala mybatis menulis sql asli secara langsung. Hibernate menyediakan mekanisme pemetaan yang baik, dan mybatis juga perlu menulis resultmap paramMap sendiri. Hibernate dan MyBatis kedua-duanya mempunyai alat penjanaan kod yang sepadan. Kaedah lapisan DAO yang mudah dan asas boleh dihasilkan. Untuk pertanyaan lanjutan, Mybatis memerlukan penulisan manual pernyataan SQL dan ResultMap. Hibernate mempunyai mekanisme pemetaan yang baik Pembangun tidak perlu mengambil berat tentang penjanaan SQL dan pemetaan hasil, dan boleh menumpukan lebih pada proses perniagaan. Kesimpulannya, dari perspektif kecekapan pembangunan, Hibernate>
Kebolehselenggaraan: hiberbate menggunakan objek java untuk menulis sql, manakala mybatis menulis sql asli secara langsung. Menulis SQL secara langsung adalah lebih mudah untuk dikekalkan, tetapi yang pertama memerlukan melihat SQL melalui objek java Anda perlu mencetak SQL menggunakan System.out.println(sql); Pertanyaan Hibernate akan menanyakan semua medan dalam jadual, yang akan menggunakan prestasi. Hibernate juga boleh menulis SQL sendiri untuk menentukan medan yang perlu ditanya, tetapi ini memusnahkan kesederhanaan pembangunan Hibernate. SQL Mybatis ditulis secara manual, jadi medan pertanyaan boleh ditentukan mengikut keperluan. Menala kenyataan HQL Hibernate memerlukan mencetak SQL, dan SQL Hibernate tidak disukai oleh ramai orang kerana ia terlalu hodoh. SQL MyBatis ditulis secara manual oleh saya sendiri, jadi ia mudah untuk disesuaikan. Tetapi Hibernate mempunyai statistik log sendiri. Mybatis sendiri tidak mempunyai statistik log dan menggunakan Log4j untuk pembalakan.
Prestasi: Kedua-duanya menyediakan mekanisme caching dan sesi. Projek kecil hampir sama. Projek besar mybatis>hibernate.
Melihat perbincangan semua orang, saya rasa mybaits lebih baik, tetapi saya selalu fikir hibernate lebih sesuai untuk pembangunan berskala besar, jadi saya terus ke hibernate. Pada masa itu, projek itu agak mendesak dan saya menggunakannya seperti mybatis Kemudian, selepas bermain untuk masa yang lama, saya dapati banyak perkara menarik Pengalaman yang disediakan oleh hibernate memudahkan banyak beban kerja dan keserasian, tetapi ini pasti memerlukan pengalaman untuk memahami, dan kemudiannya Ia berguna untuk menggunakan carian hibernate dan carian teks penuh, jadi tiada cara untuk mengubahnya, anda boleh menulis sql atau hql asli Terdapat juga alat konfigurasi xml, dan anotasi tambahan juga fleksibel. Ia juga boleh menjana satu2banyak dan banyak2 struktur data yang berbeza daripada sql asli , ringkasnya, dia seorang yang sangat komprehensif Jika anda belum menyesal, teruskan belajar. Secara amnya, alat hibernate digunakan untuk membuat pemetaan Java dan XML secara automatik bagi semua jadual untuk melakukan carian umum, pemadaman dan pengubahsuaian, kemudian menyalin kod Java dan menamakannya semula, menggunakan anotasi untuk mencipta persatuan secara manual dan memadamkan medan yang tidak diperlukan.
1. Soalan 1: Dalam keadaan apakah Hibernate akan menjadi 10 kali lebih perlahan daripada MyBatis?
Apabila Hibernate digunakan secara tidak betul, sesuatu akan berlaku: P
Contohnya, jika pemuatan objek terbenam B dalam objek Hibernate A ditukar daripada pemuatan lalai lalai kepada pramuat (dengan andaian anda tidak memahami kesannya, Baru sahaja menukar konfigurasi), jika anda ingin menanyakan senarai objek A, akan ada pertanyaan N+1, tetapi kebanyakan logik perniagaan anda tidak perlu membaca objek B terbenam, dan prestasinya akan menjadi sangat lemah.
Dan secara amnya Dalam kes MyBatis, pertanyaan seperti ini perlu ditulis dengan tangan. Kebarangkalian ini berlaku adalah kecil.
JPA (Hibernate) merangkumi rangkaian kandungan yang sangat luas dan mempunyai banyak teknik pengoptimuman Ia memerlukan banyak wang untuk membiasakan diri dengannya (Buku Hibernate In Action yang saya miliki sangat tebal dan menakutkan Saya mengambil masa yang lama untuk membacanya. Selepas membacanya), saya tidak tahu berapa ramai pengaturcara yang suka membaca dan mempunyai kesabaran.
Namun, MyBatis adalah lebih mudah untuk bermula Walaupun prestasi MyBatis akan berkali-kali lebih teruk daripada Hibernate jika digunakan secara salah, tetapi MyBatis tidaklah begitu rumit, jadi peluang untuk melakukan kesilapan adalah jauh lebih kecil.
2. Soalan 2: Perlukah saya menggunakan MyBatis atau Hibernate untuk projek kecil
Jika anda sangat berminat dengan Hibernate dan ingin membiasakannya, saya cadangkan anda mencubanya Lagipun, kebanyakan projek perlu menghasilkan hasil dengan cepat
Hibernate adalah lebih mudah daripada MyBatis dalam hal ini banyak lagi (sudah tentu MyBatis mempunyai cara untuk menjana kod secara automatik, tetapi ia masih lebih menyusahkan).
Jika projek seterusnya berkembang dengan baik dan memerlukan berbilang orang untuk bekerjasama dalam pembangunan, pastikan anda menjauhkan orang baru daripada logik kod lapisan kegigihan.
Ringkasnya, Hibernate adalah berorientasikan objek dan MyBatis adalah berorientasikan SQL. Mana satu yang anda pilih bergantung pada yang mana satu yang biasa digunakan oleh kakitangan anda, sama ada perniagaan anda akan mempunyai banyak pertanyaan yang rumit dan sama ada perniagaan anda mempunyai keperluan prestasi tinggi. Di samping itu, banyak kali orang tidak biasa dengan Hibernate, jadi mereka merasakan bahawa Hibernate tidak boleh melakukan ini, atau sangat rumit untuk melakukannya. Hibernate berkata bahawa saya tidak akan memikul tanggungjawab ini. . .
Secara peribadi, saya juga fikir hibernate adalah mudah untuk digunakan secara automatik. Masalah prestasi ialah pertanyaan berkaitan.
Kini kami menggunakan kunci asing yang logik semasa pembangunan tanpa perkaitan jadual, jadi kecekapan pembangunan adalah hampir sama dan jelas, SQL lebih serba boleh dan kerjasama lebih mudah.
Teknologi tidak baik atau buruk, hanya sama ada ia sesuai atau tidak, dan boleh menyelesaikan masalah tertentu dalam keadaan tertentu. Orang yang berbeza menggunakan hibernate akan menghasilkan hasil yang berbeza Jika anda mahir dalam hibernate, prestasi tidak menjadi masalah. Saya melihat begitu banyak perbandingan antara kedua-dua yang disebutkan di atas, tetapi mereka benar-benar tidak masuk akal.
Secara umumnya, hibernate tidak cukup fleksibel dan enkapsulasi terlalu dalam. Mybatis boleh mengkonfigurasi operasi yang diingini mengikut kehendak anda