Pengantar 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.
Istilah ibatis berasal dari kombinasi "Internet" dan "Abatis", dan merupakan kerangka kerja lapisan kegigihan berbasis Java. Ibatis menyediakan kerangka kerja lapisan persistensi termasuk peta SQL dan objek akses data (DAO)
1. Paket Jar yang Diperlukan
Di sini kita membahas penggunaan mybatis secara terpisah, cukup masukkan paket mybatis-xxxjar.
Jika Anda menggunakan Maven untuk membangun proyek, Anda perlu meletakkan konfigurasi berikut dalam ketergantungan pom.xml:
<dependency> <GroupId> org.mybatis </groupId> mybatis </artifactid> <version> 3.2.2 </version> </dependency>
Perusahaan saat ini menggunakan 3.2.2, dan Anda dapat menempatkan nomor versi sesuai dengan paket JAR Anda sendiri.
Jika Anda berintegrasi dengan kerangka kerja yang sesuai, Anda perlu meletakkan paket integrasi. Misalnya, perusahaan kami menggunakan mybatis untuk berintegrasi dengan Spring.
Anda juga perlu menambahkan paket mybatis-spring-xxx.jar dan memutuskan berdasarkan situasi yang sebenarnya. Tentu saja, paket toples driver basis data juga sangat diperlukan.
2. Bangun SQLSessionFactory dari XML
Setiap aplikasi berbasis Mybatis berpusat pada contoh SQLSessionFactory.
Contoh SQLSessionFactory dapat diperoleh melalui SQLSessionFactoryBuilder.
SQLSessionFactoryBuilder dapat membangun instance SQLSessionFactory dari file konfigurasi XML atau instance konfigurasi pra-disesuaikan.
Sangat mudah untuk membangun instance SQLSessionFactory dari file XML. Disarankan untuk menggunakan file sumber daya di bawah ClassPath untuk konfigurasi.
Namun, ini juga dapat dikonfigurasi menggunakan inputStream apa pun, termasuk jalur file dalam bentuk string atau jalur file dalam bentuk file: // url.
MyBatis berisi kelas alat yang disebut Sumber Daya, yang berisi beberapa metode praktis yang membuatnya lebih mudah untuk memuat file sumber daya dari ClassPath atau lokasi lain.
Misalnya:
String Resource = "mybatis-config.xml"; inputStream adalah = resources.getResourceAsstream (sumber daya); sqlsessionfactory sqlsessionfactory = SQLSessionFactoryBuilder baru (). Build (IS);
File Konfigurasi XML (Konfigurasi XML) berisi pengaturan inti untuk sistem MyBATIS, termasuk sumber data untuk mendapatkan instance koneksi database (DataSource)
dan manajer transaksi (TransactionManager) yang menentukan lingkup dan mode kontrol transaksi. File konfigurasi akan dibahas secara rinci nanti.
Misalnya:
<!-? Xml Version = "1.0" encoding = "UTF-8"?-> <Configuration> <lingkungan default = "pengembangan"> <lingkungan id = "pengembangan"> <transactionManager type = "jdbc"> <DataSource type = "pooled"> <nama properti = "value" value = "com.mysql.jdbc value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <nama properti = "nama pengguna" value = "root"> <name properti = "kata sandi" value = "root123"> </properti </properti </properti </properti </datasoSoRECE> </transactions File usermainmapper.xml. Usermainmapper.xml terletak di paket com.lanhuigu.mybatis.map, jadi sumber daya ditulis sebagai com/lanhuigu/mybatis/peta/usermainmapper.xml-<mapper resource = "com/lanhuigu/mybatis/peta/usermain.>
Badan Elemen Lingkungan berisi konfigurasi manajemen transaksi dan pengumpulan koneksi. Elemen Mappers berisi satu set mapper mapper (file XML dari pemetaan ini berisi kode SQL dan informasi definisi pemetaan).
3. Dapatkan sqlsession dari sqlsessionfactory
Sekarang setelah kita memiliki SQLSessionFactory, kita bisa mendapatkan contoh sqlsession dari itu. SQLSession sepenuhnya berisi semua metode yang diperlukan untuk menjalankan perintah SQL ke database.
Anda dapat secara langsung menjalankan pernyataan SQL yang dipetakan melalui instance SQLSession. Misalnya:
SQLSessionFactory SQLSessionFactory = null; // xml Build SQLSessionFactory Factory Instance sesi SQLSession = null; // Dapatkan objek SQLSession dari instance pabrik SQLSessionFactory, coba {String Resource = "mybatis-config.xml"; Sumber daya. 1); System.out.println (user.getUserName ());} akhirnya {session.close ();} Tidak ada masalah dalam menjalankan pemetaan dengan cara ini, kami juga dapat melakukan pemetaan dengan cara yang lebih ringkas.
Gunakan antarmuka yang dapat menggambarkan parameter secara wajar dan mengembalikan nilai untuk pernyataan yang diberikan (misalnya, usermainmapper.class),
Anda tidak hanya dapat menjalankan kode yang lebih jelas dan jenis-aman sekarang, tetapi Anda tidak perlu khawatir tentang literal dan gips string yang rentan kesalahan. Misalnya:
SQLSession sesi = sqlSessionFactory.opensession (); usermainmapper usermainmapper = session.getMapper (usermainmapper.class); pengguna pengguna = usermainmapper .ueryusermainbyId (1);
4. Contoh
Sangat mudah untuk bingung hanya dengan membaca tetapi tidak berlatih. Lihatlah contoh -contohnya dan kembali membaca dokumen, mungkin efeknya akan lebih baik.
Siapkan Paket Jar:
mybatis-3.2.2.jar (mybatis)
mysql-connector-java-5.1.21.jar (driver database)
juniit -4.4.jar (tes, tidak ingin menggunakan junit ini, Anda dapat menggunakan metode utama untuk mengujinya)
Struktur Proyek:
Database:
Buat tabel `t_user_main` (` f_id` int (11) bukan null, `f_username` varchar (20) default null,` f_age` int (3) nol default, kunci primer (`f_id`)) engine = myisam charset = latin1; masukkan ke t_user_main nilai ('1,' latin1; masukkan ke T_USER_MAIN Nilai -nilai ('1,' LATIN1; Sisipkan ke T_USER_MAIN NIVEL ('MYISAM,' LATIN1; Sisipkan ke T_USER_MAIN NIREL ('Konfigurasi XML MyBatis --Mybatis-config.xml:
<!-? Xml Version = "1.0" encoding = "UTF-8"?-> <Configuration> <lingkungan default = "pengembangan"> <lingkungan id = "pengembangan"> <transactionManager type = "jdbc"> <DataSource type = "pooled"> <nama properti = "value" value = "com.mysql.jdbc value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <nama properti = "nama pengguna" value = "root"> <name properti = "kata sandi" value = "root123"> </properti </properti </properti </properti </datasoSoRECE> </transactions File usermainmapper.xml. Usermainmapper.xml terletak di paket com.lanhuigu.mybatis.map, jadi sumber daya ditulis sebagai com/lanhuigu/mybatis/peta/usermainmapper.xml-<mapper resource = "com/lanhuigu/mybatis/peta/usermain.>
User.java:
package com.lanhuigu.mybatis.entity;import java.io.Serializable;public class User implements Serializable{private static final long serialVersionUID = -3412068097348759984L;private Integer id;private String username;private Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;} string publik getUserName () {return username;} public void setusername (string userName) {this.userName = username;} public integer getage () {return usia;} public void setage (integer usia) {this.age =}}}}} {}} {}} {this;Usermainmapper.xml:
<!-? Xml Version = "1.0" encoding = "UTF-8"?-> <!-Tentukan namespace unik untuk mapper ini. Nilai namespace secara konvensional diatur ke nama paket + Hapus nama file akhiran file peta SQL. Ini dapat memastikan bahwa nilai namespace unik. Misalnya, namespace = "com.lanhuigu.mybatis.map.usermainmapper" adalah com.lanhuigu.mybatis.map (nama paket) + usermainmapper (usermainmapper. Pernyataan Query SQL Dalam tag SELECT, atur atribut ID dari tag pilih ke queryusermainbyId, nilai atribut ID harus unik, dan atribut parameterType tidak dapat digunakan kembali untuk menunjukkan jenis parameter yang digunakan dalam kueri. The resultType attribute indicates the result set type returned by the query resultType="com.lanhuigu.mybatis.entity.User" means encapsulating the query result into an object of the User class Return to the User class, which is the entity class corresponding to the users table--><select id="queryUserMainById" parametertype="int" resultType = "com.lanhuigu.mybatis.entity.user"> pilih ID f_id, nama pengguna f_username, f_age usia dari t_user_main di mana f_id = #{id} </pilih> </mapper>Mybatistest.java Test Code:
Paket com.lanhuigu.mybatis; impor java.io.ioexception; impor java.io.inputstream; impor org.apache.iatis.io.Resources; impor org.apache.atis.session.session; impor org.apache.ibatis.session.session.Session.Session; org.apache.ibatis.Session.SQLSessionFactoryBuilder; impor org.junit.test; impor com.lanhuigu.mybatis.entity.user; Kelas publik mybatistest {@testpublic void testMybatis () Lemparan ioException {@testPublic squactionfyfyfyfyfy Bangun SQLSessionFactory Factory Instance SQLSession Session = null; // Dapatkan objek SQLSession coba {//1.mybatis Path file konfigurasi, yang ditempatkan di bawah ClassPath, yang setara dengan string Resource = "mybatis-config.xml"; // 2. Baca file konfigurasi mybatis dan buat instance pabrik SQLSessionFactory // ======= 2.1 Gunakan loader kelas untuk memuat file konfigurasi mybatis (juga memuat file pemetaan yang terkait) // inputStream adalah = mybatistest.class.getClasserer (). GetResourceAmsstream (Sumber); getSExory (). GetResoureSstream (Sumber); Sumber). Pabrik // SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (IS); // ====== 2.2 Gunakan kelas sumber daya yang disediakan oleh mybatis untuk memuat file konfigurasi mybatis (ini juga memuat file pemetaan yang terkait) // pembaca pembaca = sumber daya. GetReSourceasReader (Sumber // Bangun pabrik SQLSessionFactory // SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (Reader); // ===== 2.3 Gunakan kelas sumber daya yang disediakan oleh Mybatis untuk memuat MyBatis 'File InputStream IS = Resources.getReSourceAsstream (Sumber) SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (IS); // 3. Buat SQLSessionsion yang dapat mengeksekusi SQL dalam file pemetaan = sqlSessionFactory.opensession ();/*** String identifikasi untuk pemetaan sql:* com.Lanhuigu.mybatis.map.map.userminmapper adalah nilai atribut Namespace dari tag menara di USMAP.map. dari tag pilih file USermainMapper.xml. Melalui nilai atribut ID dari tag pilih, * SQL yang akan dieksekusi dapat ditemukan melalui kombinasi keduanya. */// Jalankan kueri dan kembalikan objek pengguna yang unik. Catatan: "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyId" adalah string identifikasi yang memetakan SQL. Pengguna pengguna = session.selecTone ("com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid", 1); System.out.println (user.getusername ());} akhirnya {session.close ();}}}Output Konsol:
Untuk contoh di atas, dalam kode uji:
Pengguna pengguna = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.queryUsermainById", 1); System.out.println (user.getusername ());Apakah kode ini sangat tidak menyenangkan untuk digunakan? Kami telah mengatakan ada cara yang lebih langsung:
Tambahkan antarmuka pemetaan ke peta struktur proyek:
Paket com.lanhuigu.mybatis.map; import com.lanhuigu.mybatis.entity.user; antarmuka publik usermainmapper {pengguna publik queryusermainbyid (int id);}Pada saat yang sama, ubah kode uji sebagai berikut:
Paket com.lanhuigu.mybatis; impor java.io.ioexception; impor java.io.inputstream; impor org.apache.iatis.io.Resources; impor org.apache.atis.session.session; impor org.apache.ibatis.session.session.Session.Session; org.apache.ibatis.Session.SQLSessionFactoryBuilder; impor org.junit.test; import com.lanhuigu.mybatis.entity.user; import com.lanhuigu.mybatis.map.usermainmapper; kelas publik mybatistest {publicpublic.map.usermainmapper; kelas publik mybatistest {mybatistest {publest {mybatistest {SQLSessionFactory SQLSessionFactory = null; // xml Build SQLSessionFactory Factory Instance sesi SQLSession = null; // Dapatkan objek SQLSession coba {//1.mybatis Path File, yang ditempatkan di bawah classpath, yang setara dengan string sumber daya = "MyBatis." Baca file konfigurasi mybatis dan buat instance pabrik SQLSessionFactory // ======= 2.1 Gunakan loader kelas untuk memuat file konfigurasi mybatis (juga memuat file pemetaan yang terkait) // inputStream adalah = mybatistest.class.getClasserer (). GetResourceAmsstream (Sumber); getSExory (). GetResoureSstream (Sumber); Sumber). Pabrik // SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (IS); // ====== 2.2 Gunakan kelas sumber daya yang disediakan oleh mybatis untuk memuat file konfigurasi mybatis (ini juga memuat file pemetaan yang terkait) // pembaca pembaca = sumber daya. GetReSourceasReader (Sumber // Bangun pabrik SQLSessionFactory // SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (Reader); // ===== 2.3 Gunakan kelas sumber daya yang disediakan oleh Mybatis untuk memuat MyBatis 'File InputStream IS = Resources.getReSourceAsstream (Sumber) SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (IS); // 3. Buat SQLSessionsion yang dapat mengeksekusi SQL dalam file pemetaan = sqlSessionFactory.opensession ();/*** String identifikasi untuk pemetaan sql:* com.Lanhuigu.mybatis.map.map.userminmapper adalah nilai atribut Namespace dari tag menara di USMAP.map. dari tag pilih file USermainMapper.xml. Melalui nilai atribut ID dari tag pilih, * SQL yang akan dieksekusi dapat ditemukan melalui kombinasi keduanya. */// Jalankan kueri dan kembalikan objek pengguna yang unik. Catatan: "com.lanhuigu.mybatis.map.usermainmapper.queryUsermainById" adalah string identifikasi yang memetakan sql/*pengguna pengguna = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.QueryusMainByid", 1); System.out.println (user.getUserName ());*/usermainmapper usermainmapper = session.getMapper (usermainmapper.class); pengguna pengguna = usermainmapper.queryusermainbyId (1); System.out.println (user.getusername ();} {1); System.out.println (User.getusername (); {1); Ubah bagian kueri sebelumnya menjadi:
UsermainMapper usermainmapper = session.getmapper (usermainmapper.class); pengguna pengguna = usermainmapper.queryusermainbyId (1);
Gunakan antarmuka yang dapat menggambarkan parameter secara wajar dan mengembalikan nilai untuk pernyataan yang diberikan (misalnya, usermainmapper.class),
Anda tidak hanya dapat menjalankan kode yang lebih jelas dan jenis-aman sekarang, tetapi Anda tidak perlu khawatir tentang literal dan gips string yang rentan kesalahan.
Jalankan kode uji dan efeknya sama.
Lokasi Antarmuka UsermainMapper:
Karena kami telah menambahkan antarmuka, mybatis-config.xml dapat mengubah konfigurasi untuk bagian mapper dan secara langsung memetakan file paket di mana antarmuka usermainmapper berada:
Yang ke
Ubah ke
Konfigurasi lengkap adalah sebagai berikut, dan Anda dapat memverifikasi dengan menjalankan kode uji. Praktik ini lebih mudah untuk memelihara dan mengelola peta dengan cara yang terpadu:
<!-? Xml Version = "1.0" encoding = "UTF-8"?-> <Configuration> <lingkungan default = "pengembangan"> <lingkungan id = "pengembangan"> <transactionManager type = "jdbc"> <DataSource type = "pooled"> <nama properti = "value" value = "com.mysql.jdbc value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <nama properti = "nama pengguna" value = "root"> <name properti = "kata sandi" value = "root123"> </properti </properti </properti </properti </datasoSoRECE> </transactions File usermainmapper.xml. Usermainmapper.xml terletak di paket com.lanhuigu.mybatis.map, jadi sumber daya ditulis sebagai com/lanhuigu/mybatis/peta/usermainmapper.xml-> <!-<mapper resource = "com/lanhuigu/mybatis/peta/peta/usermapper. name = "com.lanhuigu.mybatis.map"> </packing> </phappers> </configuration>
Seperti di atas, kita dapat melihat bahwa tidak peduli bagaimana kita bermain, apakah SQL masih dipetakan di usermainmapper.xml?
Apakah implementasi ini unik? Apakah saya harus menggunakan XML?
Tentu saja tidak. Jika kode Anda di atas dimodifikasi dan diuji dengan sukses, maka mari kita buat modifikasi terakhir.
Alih -alih menggunakan usermainmapper.xml untuk mengimplementasikan pemetaan, kami menggunakan anotasi Java untuk mengimplementasikan pemetaan.
Modifikasi utama adalah antarmuka usermainmapper.java, menambahkan metode baru queryusermainbyidnew, dan menggunakan anotasi untuk mengimplementasikan pemetaan
Pemetaan antarmuka pemecahan diri Mybatis.
Modified UsermainMapper.java Interface:
Paket com.lanhuigu.mybatis.map; impor org.apache.ibatis.annotations.param; impor org.apache.ibatis.annotations. Anotasi*/@pilih ("Pilih ID F_ID, nama pengguna F_USERNAME, F_AGE Usia dari t_user_main di mana f_id = $ {id}") Pengguna publik queryusermainbyidnew (@param ("id") int id);} Kode tes yang dimodifikasi, jalankan dengan cara berikut:
Paket com.lanhuigu.mybatis; impor java.io.ioexception; impor java.io.inputstream; impor org.apache.iatis.io.Resources; impor org.apache.atis.session.session; impor org.apache.ibatis.session.session.Session.Session; org.apache.ibatis.Session.SQLSessionFactoryBuilder; impor org.junit.test; import com.lanhuigu.mybatis.entity.user; import com.lanhuigu.mybatis.map.usermainmapper; kelas publik mybatistest {publicpublic.map.usermainmapper; kelas publik mybatistest {mybatistest {publest {mybatistest {SQLSessionFactory SQLSessionFactory = null; // xml Build SQLSessionFactory Factory Instance sesi SQLSession = null; // Dapatkan objek SQLSession coba {//1.mybatis Path File, yang ditempatkan di bawah classpath, yang setara dengan string sumber daya = "MyBatis." Baca file konfigurasi mybatis dan buat instance pabrik SQLSessionFactory // ======= 2.1 Gunakan loader kelas untuk memuat file konfigurasi mybatis (juga memuat file pemetaan yang terkait) // inputStream adalah = mybatistest.class.getClasserer (). GetResourceAmsstream (Sumber); getSExory (). GetResoureSstream (Sumber); Sumber). Pabrik // SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (IS); // ====== 2.2 Gunakan kelas sumber daya yang disediakan oleh mybatis untuk memuat file konfigurasi mybatis (ini juga memuat file pemetaan yang terkait) // pembaca pembaca = sumber daya. GetReSourceasReader (Sumber // Bangun pabrik SQLSessionFactory // SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (Reader); // ===== 2.3 Gunakan kelas sumber daya yang disediakan oleh Mybatis untuk memuat MyBatis 'File InputStream IS = Resources.getReSourceAsstream (Sumber) SQLSessionFactory = SQLSessionFactoryBuilder baru (). Build (IS); // 3. Buat SQLSessionsion yang dapat mengeksekusi SQL dalam file pemetaan = sqlSessionFactory.opensession ();/*** String identifikasi untuk pemetaan sql:* com.Lanhuigu.mybatis.map.map.userminmapper adalah nilai atribut Namespace dari tag menara di USMAP.map. dari tag pilih file USermainMapper.xml. Melalui nilai atribut ID dari tag pilih, * SQL yang akan dieksekusi dapat ditemukan melalui kombinasi keduanya. */// Jalankan kueri dan kembalikan objek pengguna yang unik. Catatan: "com.lanhuigu.mybatis.map.usermainmapper.queryUsermainById" adalah string identifikasi yang memetakan sql/*pengguna pengguna = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.QueryusMainByid", 1); System.out.println (user.getUserName ());*//*usermainmapper usermainmapper = session.getMapper (usermainmapper.class); pengguna pengguna = usermainmapper.queryUsermainById (1); System.out.println (user.getUsername ());*//Usmapper session.getMapper (usermainmapper.class); pengguna pengguna = usermainmapper.queryusermainbyidnew (1); System.out.println (user.getUserName ());} akhirnya {session.close ();}}}Di atas adalah kumpulan lengkap MyBatis Pendahuluan (2) 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!