Proyek Spring Mybatis
Saat ini, sebagian besar proyek internet Java dibangun menggunakan Spring MVC + Spring + Mybatis.
Menggunakan Spring IOC dapat secara efektif mengelola berbagai sumber daya Java dan mencapai fungsi plug-and-play; Melalui kerangka kerja AOP pegas, transaksi basis data dapat dipercayakan pada manajemen pegas, menghilangkan sebagian besar kode transaksi, dan menggabungkan dengan fleksibilitas tinggi, karakteristik SQL yang dapat dikonfigurasi, dan dioptimalkan dari situs web besar berkinerja tinggi.
Tidak ada keraguan bahwa dua kerangka kerja besar, Mybatis dan Spring, telah menjadi kombinasi kerangka kerja utama dari teknologi internet java. Mereka telah bertahan dengan uji volume data besar dan permintaan skala besar dan telah banyak digunakan dalam sistem internet. Menggunakan mybatis-spring membuat lapisan bisnis dan lapisan model terpisah lebih baik. Pada saat yang sama, menggunakan mybatis di lingkungan musim semi lebih sederhana, menyimpan banyak kode, dan Anda bahkan dapat menghindari penggunaan objek seperti SQLSessionFactory dan SQLSession, karena mybatis-spring merangkumnya untuk kita.
Dikutip dari: "Java EE Internet Lightweight Framework Pengembangan Terpadu"
Langkah 1: Buat Proyek Uji
Langkah pertama adalah membuat proyek webProyPect baru yang disebut [mybatisandspring] di Ide:
Kemudian buat 4 paket kosong di [SRC]:
Kemudian buat folder sumber baru [config] untuk menempatkan berbagai file konfigurasi sumber daya:
Kemudian buat folder keamanan default [web-inf] baru di bawah folder [Web], dan buat [kelas] dan [lib] di bawahnya, dan ubah lokasi output proyek di bawah [kelas]:
Struktur awal proyek lengkap adalah sebagai berikut:
Langkah 2: Memperkenalkan Paket Jar Ketergantungan
Langkah kedua adalah menyiapkan paket JAR ketergantungan proyek:
Tempatkan paket JAR yang tercantum di atas di folder [LIB] di bawah folder [Web-INF], dan kemudian tambahkan dependensi.
Langkah 3: Tulis file konfigurasi pegas
Langkah ketiga adalah menulis file konfigurasi pegas:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: context = "http://www.springframework.org/schema/context" xsi: schemalocation = "http://www.springframework.org/schema/beans http:/wwww.spramework.org http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> <!-File Konfigurasi-> <Context: Property-Place-Location Lokasi =" ClassPath: Data: Data. id = "DataSource"> <name properti = "driverclassName" value = "$ {jdbc.driver}"/> <name properti = "url" value = "$ {jdbc.url}"/> <nama properti = "value =" $ {jdbc.userName} "/> <words" value = "$" $ {jdbc.username} "//</} values =" $ "$ {jdbc.username}"//</} name {"$" $ "$" $ " </bean> <!-sqlSessionFactory-> <bean id = "sqlSessionFactory"> <!-Muat file konfigurasi mybatis-> <name properti = "configlocation" value = "mybatis/sqlmapconfig.xml"/<!-sumber data-> <nama properti/sqlmapconfig.xml "/> <!Langkah 4: Tulis file konfigurasi mybatis
Langkah 4: Tulis file konfigurasi global mybatis di bawah paket [mybatis] sqlmapconfig.xml:
<? 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"> <! <Pengaturan Nama = "LazyLoadingEnabled" value = "true"/> <!-Ubah pemuatan aktif ke pemuatan pasif (mis. Memuat sesuai permintaan)-> <pengaturan nama = "agresivelazyLoading" value = "false"/> <!-nyalakan nilai cache global (cache) </false/</false </false/</cacheen/cacheen/cache. <yypealiases> <package name = "cn.wmyskxz.pojo"/> </yypealiases> <!-Muat file peta-> <Mappers> <!-Muat satu file peta pada satu waktu melalui metode sumber daya-> <mapper resource = "sqlmap/userMapper.xml"/> <!-Batper load/"sqlmap/userMapper.xml"//> <! </Mappers> </Configuration>
Dalam file konfigurasi ini:
Langkah 5: Tulis mapper dan file konfigurasi lainnya
Langkah 5: Tulis file pemetaan mapper. Di sini, nama file pemetaan mapper masih didefinisikan sebagai "usermapper.xml" (yang konsisten dengan konfigurasi di sqlmapconfig.xml). Untuk menguji efeknya, hanya satu peta SQL kelas kueri yang dikonfigurasi:
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><" namapper = "" "" "" "nampaper =" "" ParameTerType = "_ int" resultType = "user"> SELECT * dari pengguna di mana id = #{id} </select> </mapper>Dalam konfigurasi ini, parameter output dipetakan ke "pengguna", karena kelas entitas di bawah paket "cn.wmyskxz.pojo" dikonfigurasi dalam sqlmapconfig.xml sebelum menggunakan alias (yaitu, nama kelas dengan "di sini hanya perlu membuat Java Kelas yang sesuai dengan" Java Class yang berkorespondensi " Paket "cn.wmyskxz.pojo":
Paket cn.wmyskxz.pojo; import java.io.serializable; pengguna kelas publik mengimplementasikan serial yang dapat di -serial {private int id; nama pengguna string pribadi; / * Getter and Setter */}Menerapkan antarmuka serializable adalah untuk mempersiapkan penggunaan proxy dinamis mapper selanjutnya, dan tidak ada proxy dinamis yang digunakan di sini.
Informasi koneksi database dikonfigurasi dalam sumber daya database "db.properties" dan dikonfigurasi dalam bentuk "key = nilai". String menggunakan "$ {}" untuk mendapatkan nilai yang sesuai dengan kunci:
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc: mysql: // localhost: 3306/mybatis? karakterenCoding = utf-8jdbc.username = rootjdbc.password = root
Selain itu, konfigurasi log sama dengan konfigurasi sebelumnya, jadi saya langsung menempelkannya:
# Konfigurasi logging global# Di lingkungan pengembangan, level log harus diatur ke debug, dan lingkungan produksi harus diatur ke info atau errorLog4j.rootlogger = debug, stdout# konsol Output ... LOG4J.Appender.stdout = org.apache.log4j.consoleAppenderLog4j.Appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.appender.stdout
Langkah 6: Tulis lapisan DAO
Langkah 6: Tulis lapisan objek akses data.
Karena proyek ini hanya menanyakan pengguna pengguna, hanya ada satu kelas di lapisan DAO. Antarmuka antarmuka lapisan DAO dibuat di bawah paket "cn.wmyskxz", yang mendefinisikan metode findUserbyId dan parameternya adalah nilai id pengguna (tipe int):
Paket cn.wmyskxz.dao; import cn.wmyskxz.pojo.user; antarmuka publik userdao {// kueri informasi pengguna berdasarkan ID pengguna publik findUserById (int id) melempar pengecualian;}Kemudian buat kelas implementasi antarmuka userdao userdaoImpl di bawah paket yang sama:
Paket cn.wmyskxz.dao; impor cn.wmyskxz.pojo.user; impor org.apache.ibatis.Session.sqlsession; Impor org.mybatis.spring.support.sqlsessionDaosupport; Kelas Publik UserDaoImpl Extends SqlaOsport SQLAOSPORT; Kelas Publik findUserById (int id) melempar pengecualian {// mewarisi kelas SQLSessiondaOsupport dan lulus this.getSqlSession () Dapatkan SQLSession SQLSession sqlSession = this.getSQLSession (); Pengguna pengguna = sqlSession.selecTone ("test.finduserbyId", id); Pengguna Kembali; }}Ada beberapa penjelasan:
<!-Antarmuka DAO Asli-> <bean id = "userdao"> <name properti = "sqlSessionFactory" ref = "sqlSessionFactory"/> </bean>
Catatan: Setelah kelas implementasi DAO mewarisi kelas induk SQLSessiondaOsupport, tidak perlu mendefinisikan metode untuk mendapatkan kelas instance sesi SQLSession dengan sendirinya. Kelas induk akan memuat informasi sumber data secara default dan menyediakan metode untuk mendapatkan kelas SQLSession.
Langkah 7: Tulis kelas tes layanan
Buat kelas tes [UserserVicetest] di bawah paket "cn.wmyskxz.test":
Paket cn.wmyskxz.test; import cn.wmyskxz.dao.userdao; import cn.wmyskxz.pojo.user; impor org.junit.before; import org.junit.test; impor org.springfrramework.context.applextlexlext.application; org.springframework.context.support.classpathxmlappLicationContext; kelas publik UserserVicetest {private applicationContext ApplicationContext; // Dapatkan objek file konfigurasi pegas terlebih dahulu sebelum menjalankan metode pengujian // annotation @before panggilan metode ini sebelum menjalankan semua metode pengujian kelas ini @Before public void setup () melempar pengecualian {applicationContext = new classpathxmlapplicationContext ("classpath: spring/applicationContext.xml"); } @Test public void testFindUserbyId () melempar Exception {// dapatkan objek userdao dengan mengkonfigurasi objek sumber daya userdao userdao = (userdao) applicationContext.getBean ("userdao"); // hubungi pengguna pengguna pengguna = userdao.finduserbyId (1); // output Sistem Informasi Pengguna.out.println (user.getId () + ":" + user.getUserName ()); }}Jalankan metode pengujian dan hasil output adalah sebagai berikut:
Proksi Dinamis + Implementasi Anotasi
Contoh program di atas tidak selesai menggunakan proxy dan anotasi Mapper Dynamic. Mari kita coba cara menggunakan proxy dan anotasi dinamis:
Langkah 1: Tulis UserQueryMapper
Buat antarmuka proxy [userQueryMapper] baru di bawah [mapper] dan gunakan anotasi:
Paket cn.wmyskxz.mapper; import cn.wmyskxz.pojo.user; impor org.apache.iatis.annotations.select; antarmuka publik UserQueryMapper {@Select ("Select * dari pengguna di mana id = #{id}") Pengguna Public FindUserbyid (Int ID) Throws)Catatan: Secara default, nama bean adalah userquerymapper (mis., Huruf pertama adalah huruf kecil)
Sekarang kita memiliki kelas proxy, kita perlu memberi tahu Spring untuk memindai kelas ini di sini. Mapper perlu menggunakan pemindai khusus untuk memindai objek konfigurasi:
<!-Pemindai Mapper-> <Bean> <!-Pindai komponen di bawah paket cn.wmyskxz.mapper-> <name properti = "basepackage" value = "cn.wmyskxz.mapper"/> </bean>
Langkah 2: Tulis kelas tes
Kali ini kami tidak lagi mengambil objek Userdao, tetapi objek proxy mapper yang ditentukan UserQueryMapper:
Paket cn.wmyskxz.test; import cn.wmyskxz.mapper.userQueryMapper; import cn.wmyskxz.pojo.user; impor org.junit.before; import org.junit.test; impor org.springfrramework.context.applextlexlext; org.springframework.context.support.classpathxmlappLicationContext; kelas publik UserserVicetest {private applicationContext ApplicationContext; // Dapatkan objek file konfigurasi pegas terlebih dahulu sebelum menjalankan metode pengujian // annotation @before panggilan metode ini sebelum menjalankan semua metode pengujian kelas ini @Before public void setup () melempar pengecualian {applicationContext = new classpathxmlapplicationContext ("classpath: spring/applicationContext.xml"); } @Test public void testFindUserbyId () melempar Exception {// Dapatkan objek userdao dengan mengkonfigurasi objek sumber daya userQueryMapper userQueryMapper = (userQueryMapper) applicationContext.getBean ("userQueryMapper"); // hubungi metode userdao pengguna pengguna = userquerymapper.finduserbyId (1); // output Sistem Informasi Pengguna.out.println (user.getId () + ":" + user.getUserName ()); }}Jalankan metode tes dan dapatkan hasil yang benar:
Anda dapat melihat bahwa hasil kueri sama dengan agen non-mapper sebelumnya.
Meringkaskan
Di atas adalah metode integrasi yang sempurna antara mybatis dan musim semi 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!