Sebuah proyek baru telah diluncurkan dalam dua hari terakhir karena anggota tim proyek selalu menggunakan mybatis. Meskipun saya secara pribadi lebih suka model minimalis JPA, mybatis masih bertekad untuk mempertahankan seleksi teknologi terpadu untuk mempertahankan proyek. Saya online untuk menemukan informasi yang relevan tentang kombinasi boot musim semi dan mybatis. Ada berbagai bentuk, yang membuat orang bosan membacanya. Menggabungkan demo dan dokumen resmi Mybatis, saya akhirnya menemukan dua mode paling sederhana. Saya menghabiskan hari merangkum dan membagikannya.
Inti dari kerangka kerja ORM adalah untuk menyederhanakan pengkodean database operasi dalam pemrograman. Sekarang pada dasarnya ada dua perusahaan yang tersisa. Salah satunya adalah mengklaim bahwa Anda tidak dapat menulis kalimat SQL Hibernate, dan yang lainnya adalah untuk men -debug mybatis dari SQL dinamis secara fleksibel. Keduanya memiliki karakteristik sendiri dan dapat digunakan secara fleksibel sesuai dengan kebutuhan dalam pengembangan sistem tingkat perusahaan. Saya menemukan fenomena yang menarik: sebagian besar perusahaan tradisional suka menggunakan hibernate, dan industri internet biasanya menggunakan mybatis.
Karakteristik hibernate adalah bahwa semua SQL dihasilkan menggunakan kode Java, dan tidak perlu menulis (baca) SQL tanpa melompat keluar dari program. Ini memiliki integritas pemrograman. Ini berkembang ke bagian atas model. Pada dasarnya, SQL yang sesuai dapat dihasilkan berdasarkan nama metode. Jika Anda tidak tahu banyak, Anda dapat membaca artikel saya sebelumnya tentang penggunaan JPA data pegas.
Mybatis sangat merepotkan pada tahap awal, membutuhkan berbagai file konfigurasi, kelas entitas, asosiasi pemetaan lapisan DAO, dan banyak konfigurasi lainnya. Tentu saja, Mybatis juga menemukan kerugian ini. Pada tahap awal, generator dikembangkan, yang secara otomatis dapat menghasilkan kelas entitas, file konfigurasi dan kode lapisan DAO berdasarkan hasil tabel, yang dapat mengurangi bagian dari volume pengembangan; Pada tahap selanjutnya, banyak optimisasi dapat digunakan untuk menggunakan anotasi, secara otomatis mengelola lapisan DAO dan file konfigurasi, dll., Dan pengembangan ke atas adalah model yang akan kita bicarakan hari ini. Mybatis-Spring-Boot-Starter adalah Springboot+MyBatis dapat sepenuhnya beranotasi tanpa file konfigurasi, dan juga dapat menjadi konfigurasi sederhana dan mudah untuk memulai.
Sekarang pikirkan, Spring Boot luar biasa. Selama Anda mengaitkan apa pun dengan Spring Boot, itu akan menyederhanakannya.
mybatis-spring-boot-starter
Deskripsi Resmi: Mybatis Spring-Boot-Starter akan membantu Anda menggunakan MyBatis dengan Spring Boot
Faktanya, Mybatis telah mengembangkan solusi untuk bergabung dalam kesenangan karena boot musim semi yang begitu populer, tetapi yang ini memang telah memecahkan banyak masalah dan memang jauh lebih halus untuk digunakan. Ada dua solusi utama untuk mybatis-spring-boot-starter. Salah satunya adalah menggunakan anotasi untuk menyelesaikan semua masalah, dan yang lainnya adalah tradisi lama yang disederhanakan.
Tentu saja, mode apa pun perlu pertama kali memperkenalkan file POM mybatis-spring-boot-starter. Sekarang versi terbaru adalah 1.1.1 (kebetulan ada di double 11 :))
<dependency> <GroupId> org.mybatis.spring.boot </groupId> <ArTifactId> mybatis-spring-boot-starter </artifactid> <version> 1.1.1 </versi> </dependency>
Saya akan memperkenalkan dua model pengembangan
Tidak ada versi konfigurasi versi anotasi
Itu dilakukan dengan anotasi.
1 Tambahkan file Maven yang relevan
<Dependencies> <dependency> <GroupId> org.springframework.boot </groupId> <ArtifactId> Spring-boot-starter </t Artifactid> </dependency> <dependency> <roupid> org.springframework.boot </groupid> <t Artifactidid </groupid> <t Artifact.boot > Spring-boot-starter-test </t ArtifactId> <scope> tes </seupop> </gandendency> <dependency> <Groupid> org.springframework.boot </sroupid> <ArtifactId> Spring-bootter-starter-web </arttifactid> </dependency> <depen Dency> <GroupId> org.mybatis.spring.boot </groupid> <ArtifactId> mybatis-spring-boot-starter </t Artifactid> <version> 1.1.1 </version> </dependency> <groupdency> <groupid> mysql </groupid> <Artifactid> Mysql Onnector-java </stifactid> </dependency> <dependency> <groupid> org.springframework.boot </groupid> <ArTifactId> Spring-boot-devtools </arttifactid> <pilihan> true </prectional> </dependency> </dependency>
Saya tidak akan memposting paket POM lengkap di sini, silakan baca kode sumber secara langsung
2. Application.properties menambahkan konfigurasi yang relevan
mybatis.type-aliases-package = com.neo.entityspring.datasource.driverclassname = com.mysql.jdbc.driverspring.dataSource.url = jdbc: mysql: // localhost: 3306/test1? Useunicode = mysql: //corcroring: 3306/test1? Useunicode = mysql://///localhost: 3306/test1? Useunicode = true & charactering = characters8/uchinging = 330seting: 3306/test1? Useunicode = true & characters8 rootspring.datasource.password = root
Springboot akan secara otomatis memuat konfigurasi yang relevan dari spring.dataSource.*, Dan sumber data akan secara otomatis disuntikkan ke SQLSessionFactory. SQLSessionFactory akan secara otomatis disuntikkan ke mapper. Ngomong -ngomong, Anda tidak perlu khawatir tentang segalanya, ambil saja dan gunakan.
Tambahkan Paket Pemindaian Mapper di kelas startup @MapperScan
@SpringbootApplication@mapperscan ("com.neo.mapper") Aplikasi kelas publik {public static void main (string [] args) {springApplication.run (application.class, args);}}Atau cukup tambahkan anotasi @mapper di kelas mapper. Dianjurkan untuk menggunakan yang di atas, jika tidak, akan sangat merepotkan untuk menambahkan anotasi untuk setiap mapper.
3. Kembangkan mapper
Langkah ketiga adalah bagian yang paling kritis, dan produksi SQL ada di sini
Antarmuka publik Usermapper {@select ("Pilih * dari pengguna")@result ({@@result (properti = "UsersEx", column = "user_sex", javatype = userexenum.class),@result (properti = "nickName", kolom = "nick_name")}) daftar <userentity> getall ();@@@@@nick_name ")}) #{id} ")@result ({@result (properti =" UsersEx ", column =" user_sex ", javatype = userexenum.class),@result (properti =" nickname ", column =" nick_name ")}}} {}}} {} {nick_sex), {nick_sex, {nick_ nick {nick_sex, Userx, #{UsersEx}) ") batal insert (userEntity user);@update (" Perbarui pengguna set username =#{username}, nick_name =#{nickName} di mana id =#{id} ") pembaruan void (userEntity user);@hapus (" hapus dari pengguna di mana id =#{id} ") (void); void (" hapus dari pengguna di mana id =#{id} ") (userEntity user);@hapus (" hapus dari pengguna di mana id =#{id} ")Agar lebih dekat dengan produksi, saya secara khusus menggarisbawahi dua atribut USER_SEX dan NICK_NAME dalam database dan nama atribut kelas entitas tidak konsisten. Selain itu, user_sex menggunakan enumerasi
@Select adalah anotasi kelas kueri, dan semua pertanyaan menggunakan ini
@Result memodifikasi set hasil dikembalikan, dan atribut kelas entitas terkait dan bidang database sesuai satu per satu. Jika atribut kelas entitas dan nama atribut basis data konsisten, atribut ini tidak perlu dimodifikasi.
@Insert Sisipkan database yang akan digunakan, langsung melewati kelas entitas akan secara otomatis menguraikan atribut ke nilai yang sesuai
@Update bertanggung jawab untuk memodifikasi, dan juga dapat langsung diteruskan ke objek
@Delete bertanggung jawab untuk menghapus
Untuk lebih banyak properti, silakan merujuk di sini: http://www.mybatis.org/mybatis-3/zh/java-api.html
Perhatikan bahwa perbedaan antara menggunakan simbol # dan $ simbol:
// Contoh ini membuat pernyataan yang disiapkan, sesuatu seperti pilih * dari guru where name =?@Select ("select * from Teacher where name = #{name}") guru selectTeachFoVenName (@param ("name") name string); // Contoh ini membuat pernyataan yang di -lined, sesuatu seperti pilih * dari guru di mana nama = 'someName';@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@somename (") pilih nama string);4. Gunakan
Tiga langkah di atas pada dasarnya menyelesaikan pengembangan lapisan yang relevan. Saat menggunakannya, gunakan saja sebagai kelas biasa dan dapat disuntikkan ke dalamnya.
@Runwith (springrunner.class) @springboottestpublic kelas Usermappertest {@AutowiredPrivate Usermapper Usermapper; @testpublic void testInsert () melempar pengecualian {userMapper "(newerentity (" aa "," a123456 ", userser (" aa "," a123456 ", pengguna. "B123456", UsersExenum.Woman)); usermapper.insert (UserEntity baru ("CC", "B123456", UsersExenum.Woman)); Assert.asserTequals (3, Usermapper.getall (). Ukuran ());}@testplic void testQuery () LOWRECHOL (). Usermapper.getall (); System.out.println (users.toString ());}@testpublic void testupdate () melempar pengecualian {userentity user = Usermapper.getone (3l); System.out.println (user.toString ()); user.setnickname ("neo"); usermapper.update (pengguna); assert.asserttrue (("neo" .Equals (usermapper.getone (3l) .getNickName ()));Ada tambahan lengkap, penghapusan, modifikasi dan pencarian dalam kode sumber, jadi saya tidak akan mempostingnya di sini
Versi XML minimalis
Versi XML minimalis mempertahankan tradisi lama file pemetaan. Optimalisasi terutama tercermin dalam lapisan implementasi yang tidak perlu diimplementasikan. Sistem akan secara otomatis menemukan SQL yang sesuai di file pemetaan sesuai dengan nama metode.
1. Konfigurasi
File POM sama dengan versi sebelumnya, kecuali bahwa konfigurasi berikut ditambahkan ke application.properties
mybatis.config-locations = classpath: mybatis/mybatis-config.xmlmybatis.mapper-locations = classpath: mybatis/mapper/*. xml
Menentukan alamat file konfigurasi dasar mybatis dan file pemetaan kelas entitas
Konfigurasi mybatis-config.xml
<configuration><typeAliases><typeAlias alias="Integer" type="java.lang.Integer" /><typeAlias alias="Long" type="java.lang.Long" /><typeAlias alias="HashMap" type="java.util.HashMap" /><typeAlias alias="LinkedHashMap" type = "java.util.linkedhashmap" /> <typealias alias = "arraylist" type = "java.util.arraylist" /> <typealias alias = "linkedlist" type = "java.util.linkedlist" /< /typealases> < /typealases> < /configuration> configuration>
Di sini Anda juga dapat menambahkan beberapa konfigurasi mybatis dasar
2. Tambahkan file pemetaan pengguna
<mapper namespace = "com.neo.mapper.usermapper"> <resultMap id = "baseeresultMap" type = "com.neo.entity.userentity"> <id kolom = "id" properti = "id" jdbctype = "bigint" /> <hasil hasil = "nama pengguna" nama pengguna = "username" "jdbcType =" JDBT " /> <hasil hasil =" nama pengguna "Properti" username = "" "" JDBCTYPE = "JD" /> <Hasil Kolom = "UserName" Properti "Username =" UserName " jdbcType="VARCHAR" /><result column="user_sex" property="userSex" javaType="com.neo.enums.UserSexEnum"/><result column="nick_name" property="nickName" jdbcType="VARCHAR" /></resultMap><sql id="Base_Column_List" >id, userName, password, user_sex, nick_name < /sql> <pilih id = "getAll" resultMap = "baseresultMap"> pilih <incerted refid = "base_column_list" /> dari pengguna < /pilih> <pilih id = "getOne" ParameterType = "java.Lang.long" resultMap = "baseresultMap"> dari revies = "java." #{ID} </pilih> <masukkan id = "masukkan" parameTerType = "com.neo.entity.userentity"> masukkan ke dalam pengguna (nama pengguna, kata sandi, user_sex) ( #{Username}, #{kata sandi}, #{{UsersEx}) </masukkan <update id iD = "update" ParamEterpe = "com." test = "nama pengguna! = null"> username = #{username}, </if> <if test = "password! = null"> password = #{password}, </if> nick_name = #{nickName} where id = #{id} </update> <delete id id = "delete" paramerType = "paramerping =" paramerpe = "JAVA." #{ID} </delete> </mapper>Bahkan, itu hanya memindahkan mapper SQL dari versi sebelumnya ke XML di sini
3. Tulis Kode Lapisan DAO
Antarmuka Publik Usermapper {Daftar <UserEntity> getAll (); UserEntity getOne (Long ID); void Insert (userEntity user); void update (userEntity user); void delete (long id);}Dibandingkan dengan langkah sebelumnya, hanya ada metode antarmuka yang tersisa.
4. Gunakan
Tidak ada perbedaan antara menggunakannya dan versi sebelumnya, silakan lihat kode
Bagaimana memilih
Kedua mode tersebut memiliki karakteristik sendiri. Versi beranotasi cocok untuk mode sederhana dan cepat. Faktanya, seperti model layanan microser populer saat ini, layanan mikro akan sesuai dengan basis data sendiri. Permintaan untuk kueri koneksi multi-meja akan sangat berkurang, dan itu akan menjadi semakin cocok untuk mode ini.
Model tradisional lama lebih cocok untuk proyek besar. Ini dapat secara fleksibel menghasilkan SQL secara dinamis, yang nyaman untuk menyesuaikan SQL, dan juga memiliki perasaan menulis SQL dengan kesenangan dan kemewahan.
Contoh Kode-GitHub: https://github.com/ityouknow/spring-boot-examples
Contoh Kode-Kode Cloud: https://gitee.com/ityouknow/spring-boot-examples