Dalam artikel ini, saya akan memperkenalkan prinsip -prinsip kerangka kerja Mybatis dan program pengantar Mybatis untuk mewujudkan penambahan, penghapusan, modifikasi, dan inspeksi pengguna. Apa kelebihan dan kerugiannya dan hubungan apa yang ada antara mybatis dan hibernate. Saya berharap ini akan membantu teman -teman saya. Jika ada kekurangan, tolong beri saya beberapa saran.
Apa itu mybatis?
Mybatis adalah proyek open source dari Apache. Pada 2010, proyek ini dipindahkan dari Apache Software Foundation ke Google Code dan berganti nama menjadi Mybatis. Bermigrasi ke GitHub pada November 2013.
Mybatis adalah kerangka kerja lapisan kegigihan yang sangat baik yang mendukung SQL yang disesuaikan, prosedur tersimpan, dan pemetaan lanjutan. Mybatis menghindari hampir semua kode JDBC dan parameter pengaturan manual dan menghancurkan set hasil. Mybatis menggunakan XML sederhana atau anotasi untuk mengonfigurasi dan memetakan primitif, pemetaan antarmuka dan Java pojos (objek java tua biasa) ke dalam catatan dalam database. Sederhananya, mybatis adalah kerangka kerja lapisan yang persisten. Mybatis memungkinkan program untuk fokus pada SQL dan secara bebas dan fleksibel menghasilkan pernyataan SQL yang memenuhi kebutuhan melalui metode pemetaan yang disediakan oleh MyBatis. MyBatis dapat secara otomatis memasukkan memetakan parameter input untuk mempersiapkan dan memetakan hasil kueri yang diatur secara fleksibel ke dalam objek Java.
Selanjutnya, mari kita pahami prinsip kerangka kerja mybatis melalui gambar:
Penjelasan Arsitektur Kerangka:
A. Memuat File Konfigurasi: Konfigurasi berasal dari dua tempat, satu adalah file konfigurasi dan yang lainnya adalah anotasi kode Java. Informasi konfigurasi SQL dimuat ke dalam objek MappedStatement (termasuk konfigurasi pemetaan parameter yang diteruskan, dieksekusi pernyataan SQL, dan konfigurasi pemetaan hasil) dan disimpan dalam memori.
B. SQL Parsing: Ketika lapisan antarmuka API menerima permintaan panggilan, itu akan menerima ID dari SLQ yang masuk dan objek yang masuk (dapat berupa peta atau tipe data dasar). Mybatis akan menemukan mappedstatement yang sesuai berdasarkan ID SQL, dan kemudian mengurai mappedStatement berdasarkan objek parameter yang masuk. Setelah parsing, Anda bisa mendapatkan pernyataan dan parameter SQL untuk dieksekusi pada akhirnya.
C. Eksekusi SQL: Ambil SQL akhir dan parameter ke database untuk dieksekusi, dan dapatkan hasil pengoperasian database.
D. Pemetaan Hasil: Konversi hasil basis data operasi sesuai dengan konfigurasi pemetaan, yang dapat dikonversi menjadi tipe data hashmap, javabean atau dasar, dan mengembalikan hasil akhir.
Mybatis Memulai Analisis Program
Selanjutnya, editor akan memperkenalkan persyaratan spesifik dalam kombinasi dengan demo, dan persyaratannya adalah sebagai berikut:
Kueri informasi pengguna berdasarkan ID pengguna;
Informasi Pengguna Permintaan Fuzzyly Berdasarkan Nama Pengguna;
Tambahkan, hapus, dan perbarui pengguna.
Langkah pertama adalah membuat berbagai paket dan kelas, direktori proyek adalah sebagai berikut:
Langkah kedua adalah menulis konten di sqlmapconfig.xml, dan mengkonfigurasi lingkungan yang berjalan, sumber data, transaksi, dll. Dari mybatis. Kode terlihat seperti ini:
<span style = "font-family: comic sans ms; font-size: 18px;"> <? xml version = "1.0" encoding = "UTF-8"?> <! Doctype Configuration Public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <Configuration> <!-Setelah musim semi terintegrasi, konfigurasi lingkungan akan dihapuskan-> <lingkungan default = "Developent"> <! Pool koneksi database, dikelola oleh mybatis -> <datasource type = "polled"> <name properti = "driver" value = "$ {jdbc.driver}"/> <name properti = "url" value = "$ {jdbc.url}"/> <nama properti = "username" value = "$ {jdbc.url}"/<properti nama = "username" value = "$ {jdbc.url}"/<Properti nama = "username" value = "$ {jdbc.ur. value = "$ {jdbc.password}"/> </dateSource> </prepersatch> <!-Memuat file peta-> <petpers> resource = "sqlmap/user.xml"/> </pappers> </ Configuration> </span>Langkah ketiga adalah menulis konten di user.java, seperti yang ditunjukkan di bawah ini:
<span style = "font-family: comic sans ms; font-size: 18px;"> package cn.itcast.mybatis.po; impor java.util.date; /** * * <p> Judul: Pengguna </p> * <p> Deskripsi: pengguna PO </p> * @author ding guohua * @date 31 Juli 2016 15:39:04 * @Version 1.0 */Pengguna kelas publik {// Nama atribut sesuai dengan bidang tabel database pribadi int iD; Private String username; // Nama pengguna Private String sex; // Gender Private Date Birthday; // Ulang Tahun Alamat String Privat; // Alamat Public Int Getid () {Return ID; } public void setid (int id) {this.id = id; } string publik getUserName () {return username; } public void setusername (string username) {this.username = username; } public string getsex () {return sex; } public void setSex (string sex) {this.sex = sex; } tanggal publik getBirthday () {kembali ulang tahun; } public void setBirthday (tanggal ulang tahun) {this.birthday = ulang tahun; } public String getAddress () {alamat kembali; } public void setAddress (Alamat String) {this.address = alamat; } @Override Public String ToString () {return "user [id =" + id + ", username =" + username + ", sex =" + sex + ", ulang tahun =" + ulang tahun + ", alamat =" + alamat + "]"; }} </span>Langkah 4: Untuk mengimplementasikan fungsi menambahkan, menghapus, memodifikasi dan mencari, pertama -tama tulis konten di user.xml, seperti yang ditunjukkan di bawah ini:
<span style = "font-family: comic sans ms; font-size: 18px;"> <? xml version = "1.0" encoding = "UTF-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://dtd mapper 3.0 // en" "http:/Mapper <!-- The namespace namespace is the function of classifying the SQL management and understanding the isolation of SQL Note: using the mapper proxy method to develop, namespace plays a special and important role --> <mapper namespace="test"> <!-- Configure many SQL statements in the mapping file --> <!-- Requirements: Query the records of the user table through id --> <!-- Execute database query id: Identify SQL dalam file pemetaan merangkum pernyataan SQL ke dalam objek MappedStatement, sehingga ID disebut ID ParameterType: Tentukan jenis parameter input, di sini tentukan tipe int #{} untuk mewakili simbol placeholder #{ID}: di mana ID mewakili parameter yang menerima input, dan Parameter ID. Jika parameter input adalah tipe sederhana, nama parameter di #{} dapat sewenang -wenang, dan dapat berupa nilai atau nama lain HasilType: Tentukan jenis objek Java yang dipetakan dari hasil output dari SQL, dan pilih Tentukan Hasil untuk mewakili objek Java yang dipetakan ke catatan tunggal. -> <pilih id = "findUserById" parameTerType = "int" resultType = "cn.itcast.mybatis.po.user"> pilih * dari pengguna di mana id =#{value} </ pilih> <!-fuzzy query informasi berdasarkan nama pengguna, ganda Hasil dapat dikembalikan: spesifiknya adalah javy adalah java. string SQL, dan menyambung parameter yang diterima ke SQL tanpa modifikasi apa pun. Gunakan $ {} untuk menyambungkan SQL, menyebabkan SQL menyuntikkan $ {value}: untuk menerima konten parameter input. Jika tipe yang masuk adalah tipe sederhana, Anda hanya dapat menggunakan nilai dalam $ {}-> <pilih id = "findUserByName" parameTerType = "java.lang.string" Pilih * dari pengguna di mana nama pengguna seperti '%$ {value'}}}}} </User </User </User </User </User (value '{value' </aDrecte </PARAMET/USERITE </PARATEON </PARATETE </PARATETE </Usere di mana nama pengguna seperti '%$ {value}}}} <po' </usaTy </PARATETE </User </User </Usery </UserMere name like '%$ {value}} that adalah pojo (termasuk informasi pengguna) Tentukan nama atribut pojo di #{}, terima nilai atribut objek poJo, mybatis memperoleh nilai atribut objek melalui ognl-> <masukkan id = "insertUser" parameterType = "cn.itcast Data Ining.mybatis.po.user"> <! Last_insert_id (): Dapatkan nilai kunci utama yang direkam yang baru saja dimasukkan ke dalamnya, yang hanya berlaku untuk penambah diri kunci primer kunci primer: Atur nilai kunci utama kueri ke properti objek yang ditentukan oleh parameterType: Pilih last_insert_id () urutan eksekusi, relatif ke pernyataan insert, pesanan eksekusi: specificing hasil hasilnya hasilnya. keyProperty = "id" order = "after" resultType = "java.lang.integer"> pilih last_inser_id () </selectkey> masukkan ke pengguna (nama pengguna, ulang tahun, jenis kelamin, alamat) nilai (#{{UserName},#{ulang tahun},#{sex},#{address} <!- Use. Pertama, dapatkan kunci utama melalui UUID, atur kunci utama ke atribut ID objek pengguna, dan kemudian kedua, ketika insert dijalankan, hapus nilai atribut ID dari objek pengguna-> <sectkey keyproperty = "id" order = "sebelum" silseri = "java.lang.string"> Pilih uuid () </terpilih ke dalam pengguna = "java.lang.string" value (#{username},#{ulang tahun},#{sex},#{alamat}); </sert> <!-Untuk menghapus pengguna untuk menghapus pengguna berdasarkan ID, Anda perlu memasukkan nilai ID-> <delete id = "deleteUser" parameterType = "java.lang.integer"> hapus dari pengguna di mana pengguna iD-withy. objek, termasuk ID dan perbarui informasi. CATATAN: ID harus ada#{ID}: Dapatkan nilai atribut ID dari objek pengguna input -> <update id = "updateAser" parameTerType = "cn.itcast.mybatis.po.user"> Update User set UserName =#{UserName}, ulang tahun =#{ulang tahun}, seks =#{}}} {{UserName =#{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{#, </mapper> </span>Langkah 5: Tulis metode spesifik sebagai berikut:
<span style = "font-family: comic sans ms; font-size: 18px;"> package cn.itcast.mybatis.first; impor java.io.ioException; impor java.io.inputstream; impor java.util.date; impor java.util.list; impor org.apache.ibatis.io.Resources; impor org.apache.ibatis.Session.SQLSessionFactory; impor org.apache.ibatis.Session.SQLSessionFactoryBuilder; impor org.junit.test; impor cn.itcast.mybatis.po.user; Kelas Publik MyBATISFIRST {// Informasi Pengguna Query Berdasarkan ID dan Dapatkan Hasil Catatan @Test Void Public FindUserByIdTest () melempar IoException {// MyBatis File Konfigurasi String Resource = "sqlmapconfig.xml"; // Dapatkan Konfigurasi File Stream InputStream InputStream = Resources.GetResourCeAsstream (Resource); // Buat pabrik sesi dan lulus dalam informasi file konfigurasi mybatis SQLSessionFactory sqlSessionFactory = SQLSessionFactoryBuilder baru () .build (inputStream); // Dapatkan SQLSession melalui pabrik SQLSESSION SQLSESSION = sqlSessionFactory.opensession (); // Operasi database melalui SQLSESSION // Parameter pertama: ID pernyataan dalam file peta sama dengan = namespace+ "."+ ID dari pernyataan // Parameter kedua: Tentukan parameter tipe ParameterType yang cocok dengan file peta // sqlsession. sqlsession.selectone ("test.finduserbyid", 1); System.out.println (pengguna); // lepaskan sumber daya sqlsession.close (); } // Fuzzy Query Daftar pengguna berdasarkan nama pengguna @test public void findUserbynametest () melempar ioException {// mybatis configuration file string resource = "sqlmapconfig.xml"; // Dapatkan file konfigurasi inputStream inputStream = resource.getResourceAsstream (sumber daya); // Buat pabrik sesi dan lulus dalam informasi file konfigurasi mybatis SQLSessionFactory sqlSessionFactory = SQLSessionFactoryBuilder baru (). Build (inputStream); // Dapatkan SQLSession melalui pabrik SQLSESSION SQLSESSION = sqlSessionFactory.opensession (); // Daftar Pengguna dalam Daftar adalah sama dengan tipe yang ditentukan oleh Hasil Jerman dalam daftar file pemetaan <User> Daftar = sqlSession.selectList ("test.finduserbyname", "xiao ming"); System.out.println (daftar); sqlsession.close (); } public void insertUserTest () melempar ioException {// mybatis configuration file string resource = "sqlmapconfig"; // Dapatkan Konfigurasi File Stream InputStream InputStream = Resources.GetResourCeAsstream (Resource); // Buat pabrik sesi dan lulus dalam informasi file konfigurasi mybatis SQLSessionFactory sqlSessionFactory = SQLSessionFactoryBuilder baru (). Build (inputStream); // Dapatkan SQLSession melalui pabrik SQLSESSION SQLSESSION = sqlSessionFactory.opensession (); // masukkan pengguna objek pengguna pengguna = pengguna baru (); user.setusername ("ding guohua"); user.setBirthday (tanggal baru ()); user.setsex ("1"); user.setAddress ("anhui hefei"); // Pengguna dalam daftar dan jenis yang ditentukan oleh HasilType dalam file pemetaan selalu sqlsession.insert ("test.insertuser", pengguna); // mengirimkan hal -hal sqlsession.commit (); // tutup sesi sqlsession.close (); } // hapus informasi pengguna berdasarkan id @test public void deleteUsertest () melempar ioException {// mybatis file konfigurasi string resource = "sqlmapconfig.xml"; // Dapatkan Konfigurasi File Stream InputStream InputStream = Resources.GetResourCeAsstream (Resource); // Buat pabrik dan lulus dalam informasi file konfigurasi mybatis SQLSessionFactory sqlSessionFactory = baru SQLSessionFactoryBuilder (). Build (InputStream); // Dapatkan SQLSession melalui pabrik SQLSESSION SQLSESSION = sqlSessionFactory.opensession (); // Melewati ID yang masuk hapus pengguna sqlsession.delete ("test.deleteUser", 39); // mengirimkan hal -hal sqlsession.commit (); // tutup sesi sqlsession.close (); } // Perbarui informasi pengguna @test public void updateUserTest () melempar ioException {// mybatis file konfigurasi string resource = "sqlmapconfig.xml"; // Dapatkan Konfigurasi File Stream InputStream InputStream = Resources.GetResourCeAsstream (Resource); // Buat pabrik sesi dan lulus dalam informasi file konfigurasi mybatis SQLSessionFactory sqlSessionFactory = SQLSessionFactoryBuilder baru () .build (inputStream); // Dapatkan SQLSession melalui pabrik SQLSESSION SQLSESSION = sqlSessionFactory.opensession (); // Perbarui pengguna pengguna = pengguna baru (); // Perbarui ID USER.SetID (41); user.setusername ("ding guohua"); user.setBirthday (tanggal baru ()); user.setsex ("2"); user.setAddress ("anhui hefei"); sqlsession.update ("test.updateuser", pengguna); // melakukan transaksi sqlsession.commit (); // tutup sesi sqlsession.close (); }} </span>Pro dan kontra dari mybatis
keuntungan:
A. Mudah untuk memulai dan menguasai.
B. SQL ditulis dalam XML, yang memfasilitasi manajemen dan optimasi terpadu.
C. Decouple SQL dan kode program.
D. Berikan tag pemetaan untuk mendukung pemetaan hubungan ORM di antara objek dan database
e. Menyediakan tag pemetaan hubungan objek untuk mendukung konstruksi dan pemeliharaan hubungan objek
F. Menyediakan tag XML dan mendukung SQL Dinamis Dukungan.
kekurangan:
A. Beban kerja SQL sangat tinggi, terutama ketika ada banyak bidang dan banyak tabel terkait.
B. SQL tergantung pada database, menghasilkan portabilitas basis data yang buruk.
C. Karena tag ID di XML harus unik, metode dalam DAO tidak mendukung metode kelebihan.
D. Lapisan DAO terlalu sederhana, dan beban kerja perakitan objek relatif besar.
e. Penggunaan cache yang tidak tepat dapat dengan mudah menghasilkan data kotor.
Perbandingan antara mybatis dan hibernate
Kesamaan: Hibernate dan MyBatis dapat menghasilkan SesionFactory dari file konfigurasi XML melalui sessionFactoryBuilder, dan kemudian menghasilkan sesi dari sessionFactroy. Akhirnya, sesi mulai mengeksekusi hal -hal dan pernyataan SQL. Siklus hidup sessionFactoryBuilder, sessionfactory, dan sesi hampir sama.
Perbedaan:
Mybatis: Kecil, nyaman, efisien, sederhana, langsung, semi-otomatis;
Hibernate: kuat, nyaman, efisien, kompleks, tidak langsung, sepenuhnya otomatis;
mybatis:
A. Mudah untuk memulai, belajar dan menggunakannya sesegera mungkin. Ini menyediakan fungsi pengikatan objek otomatis untuk kueri basis data, dan melanjutkan banyak pengalaman penggunaan SQL. Ini sempurna untuk proyek yang tidak memiliki persyaratan model objek yang tinggi.
B. Optimalisasi SQL yang lebih rinci dapat dilakukan dan bidang kueri dapat dikurangi.
C. 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 dengan sendirinya, beban kerja relatif besar, dan tidak mudah untuk beradaptasi dengan modifikasi database yang cepat.
D. Mekanisme caching sekunder buruk.
Hibernate:
A. 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, kode yang perlu ditulis sangat tinggi, kecepatan pengembangannya sangat cepat, dan sangat keren.
B. Ada mekanisme caching sekunder yang lebih baik, dan caching pihak ketiga dapat digunakan.
C. 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.
Pesan Editor: Dalam posting blog ini, editor terutama memperkenalkan pengetahuan dasar mybatis, termasuk demo sederhana untuk menambah, menghapus, memodifikasi dan mencari, kelebihan dan kekurangan mybatis, dan perbandingan antara hibernasi dan mybatis. Persamaan dan perbedaan di antara mereka. Mybatis berarti kerangka kerja lapisan kegigihan. Mybatis memungkinkan program untuk fokus pada SQL, dan secara bebas dan fleksibel menghasilkan pernyataan SQL yang memenuhi kebutuhan melalui metode pemetaan yang disediakan oleh MyBatis. MyBatis dapat secara otomatis memasukkan parameter input untuk mempersiapkan, dan memetakan hasil kueri yang diatur secara fleksibel ke dalam objek Java.
Di atas adalah tutorial pengantar untuk ikhtisar prinsip Mybatis yang diperkenalkan oleh editor. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!