1.ResultMap
File XML yang dipetakan SQL adalah tempat semua pernyataan SQL ditempatkan. Anda perlu mendefinisikan ruang kerja, yang umumnya didefinisikan sebagai jalur kelas antarmuka yang sesuai. Setelah menulis file pemetaan pernyataan SQL, Anda perlu merujuknya di tag pemetaan file konfigurasi mybatis, misalnya:
<mapper Resource = "com/liming/manager/data/pemetaan/usermapper.xml"/> <mapper resource = "com/liming/manager/data/pemetaan/studermapper.xml"/> <mapper sumber daya/liming/manajer/data/mapper/classmapper.xmL " /> </phappers>
Ketika antarmuka Java berada di jalur relatif ke file XML, itu tidak dapat dinyatakan dalam pemetaan file konfigurasi MyBatis.
SQL memetakan beberapa elemen dasar file XML:
(1). Cache Mengkonfigurasi cache untuk pola yang diberikan (2). Cache-Ref mengacu pada cache dari pola lain (3). Hasilmap Ini adalah elemen yang paling kompleks tetapi kuat, yang menjelaskan cara memuat objek dari set hasil (4). SQL blok SQL yang dapat multiplexed dengan pernyataan lain (5). Sisipkan Pernyataan Sisipkan Peta (6). Perbarui Pernyataan Pembaruan Peta (7). Hapus Pernyataan Peta DeLeete (8). Pilih - Peta Pilih Pernyataan
1.1 Hasil
Hasilmap adalah elemen paling penting dan kuat dalam mybatis. Anda dapat menghemat 90% kode Anda daripada set hasil panggilan dengan JDBC, atau Anda dapat melakukan banyak hal yang tidak didukung JDBC. Bahkan, mungkin perlu ribuan baris kode untuk menulis pernyataan kompleks yang setara dengan pemetaan yang mirip dengan interaksi. Tujuan dari Hasil Maps adalah pernyataan sederhana tanpa pemetaan hasil yang tidak perlu. Pernyataan yang lebih kompleks tidak memerlukan apa pun selain hanya beberapa pernyataan yang benar -benar diperlukan untuk menggambarkan hubungan.
Atribut Hasil: Jenis adalah kelas entitas Java; ID adalah pengidentifikasi dari hasil ini.
Pemetaan yang dapat diatur oleh pemetaan yang dapat diatur:
(1). Konstruktor digunakan untuk mencerminkan hasilnya ke konstruktor kelas yang instan
a) parameter ID IDarg; Tandai hasil yang ditetapkan sebagai ID untuk memfasilitasi panggilan global
b) Refleksi rata -rata untuk konstruktor
(2). Hasil ID ID, Tandai Hasil yang ditetapkan sebagai ID untuk memfasilitasi panggilan global
(3). Hasil mencerminkan hasil normal untuk sifat Javabean
(4). asosiasi kombinasi tipe kompleks; jenis sintesis beberapa hasil
a) pemetaan hasil bersarang beberapa peta hasil asosiasi bersarang sendiri, dan juga dapat dirujuk ke satu sama lain
(5). Koleksi Koleksi Jenis Kompleks
(6). Koleksi pemetaan hasil bersarang juga dapat dirujuk ke yang lain
(7). Diskriminator menggunakan nilai hasil untuk memutuskan hasil yang akan digunakan
a) Kasus kasus kasus peta hasil dari beberapa nilai dasar
Saya. Pemetaan hasil bersarang, skenario kasus itu sendiri merupakan peta hasil, sehingga juga dapat mencakup beberapa elemen yang sama, atau merujuk pada gambaran hasil eksternal.
1.1.1 ID, hasilnya
ID dan hasilnya adalah pemetaan paling sederhana, ID adalah pemetaan kunci utama; Peta hasil dari bidang tabel basis data dasar lainnya ke atribut kelas entitas.
Contoh paling sederhana:
<resultMap type = "liming.student.manager.data.model.studentity" id = "studentResultMap"> <id properti = "studentId" kolom = "student_id" javatype = "string" jdbctype = "varchar"/> <hasil properti = "studentName" columnum = "JDBCTYPE =" VARCHAR "/> <Properti Hasil =" StudentName "COLMER" COLMER "JAV" JAVPCT = "JAV" "JAV" JAV "/JAVCOP =" JAV "JDBCTEP =" JAV "JDBCTEPE =" JD "JDBCTEP = Properti = "StudentSex" kolom = "student_sex" javatype = "int" jdbctype = "integer"/> <hasil properti = "studentbirthday" kolom = "student_birthday" javatype = "date" jdbctype = "date"/<hasil properti = "studentphoto" kolom student_ptipe = "JD" "/> <hasil =" studentphoto "kolom" student_photo = "jevoto"/> <hasil = "StudentPhoto" kolom "Student_photo =" JAVETE "/JAWARED [StudentSphoto" COLMOL = "Student_Photo =" JAVETE "JAWADE [JUGHTEDE [JUSSISTHOTO" COLMOL "JDBCTYPEP =" JAVETE " typeHandler = "org.apache.ibatis.type.blobtypehandler" /> < /resultMap>
Rincian Konfigurasi Properti ID dan Pernyataan Hasil:
milik | menggambarkan | |
milik | Nama atribut yang perlu dipetakan ke Javabean. | |
kolom | Nama kolom atau label alias tabel data. | |
Javatype | Nama kelas lengkap, atau alias tipe. Jika Anda mencocokkan Javabean, Mybatis biasanya akan mendeteksinya dengan sendirinya. Kemudian, jika Anda memetakan ke hashmap, Anda perlu menentukan tujuan yang akan dicapai oleh Javatype. | |
jdbctype | Daftar jenis yang didukung oleh tabel data. Properti ini hanya berguna untuk kolom yang memungkinkan kosong saat menyisipkan, memperbarui atau menghapus. JDBC membutuhkan ini, tetapi Mybatis tidak. Jika Anda menyandikan langsung untuk JDBC dan memiliki kolom yang memungkinkan kosong, Anda ingin menentukan item ini. | |
typeHandler | Gunakan properti ini untuk mengesampingkan prosesor tipe. Nilai ini bisa berupa nama kelas lengkap atau jenis alias. |
<resultMap type="StudentEntity" id="studentResultMap" > <constructor> <idArg javaType="String" column="STUDENT_ID"/> <arg javaType="String" column="STUDENT_NAME"/> <arg javaType="String" column="STUDENT_SEX"/> <arg javaType="Date" column="STUDENT_BIRTHDAY"/> </constructor> </resultMap>
Tentu saja, kita perlu mendefinisikan metode konstruktor dari kelas entitas kemahasiswaan:
Public StudentEntity (String StudentID, String StudentName, String StudentSex, Date StudentBirthday) {this.studentId = StudentId; this.studentName = studentName; this.studentsex = studentsex; this.studentbirthday = studentbirthday; } 1.1.3 Asosiasi
Elemen Union digunakan untuk menangani hubungan "satu-ke-satu". Anda perlu menentukan sifat -sifat kelas entitas Java yang dipetakan dan javatype atribut (biasanya mybatis akan mengenalinya sendiri). Nama kolom tabel database yang sesuai. Jika Anda ingin mengganti, kembalikan nilai hasilnya, Anda perlu menentukan TypeHandler.
Situasi yang berbeda perlu memberi tahu Mybatis cara memuat serikat pekerja. Mybatis dapat dimuat dalam dua cara:
(1). Pilih: Jalankan pernyataan SQL pemetaan lainnya untuk mengembalikan tipe entitas Java. Lebih fleksibel;
(2). HRESSMAP: Gunakan peta hasil bersarang untuk memproses set hasil kueri melalui bergabung dan memetakannya ke jenis entitas Java.
Misalnya, kelas sesuai dengan guru kelas.
Pertama, tentukan atribut guru kelas di kelas:
guru guru pribadi;
1.1.3.1 Gunakan Select untuk mengimplementasikan Union
Contoh: Ada atribut guru kelas dalam kategori entitas kelas. Ketika entitas kelas diperoleh melalui upaya bersama, entitas guru kelas dipetakan pada saat yang sama.
Ini dapat secara langsung menggunakan kembali pernyataan terpilih yang ditentukan dalam file Teachermapper.xml untuk meminta guru sesuai dengan ID -nya. Dan Anda tidak perlu memodifikasi pernyataan SQL tertulis, Anda hanya perlu memodifikasi RACKMAP secara langsung.
Bagian dari isi file classmapper.xml:
<resultMap type="ClassEntity" id="classResultMap"> <id property="classID" column="CLASS_ID" /> <result property="className" column="CLASS_NAME" /> <result property="classYear" column="CLASS_YEAR" /> <association property="teacherEntity" column="TEACHER_ID" select="getTeacher"/> </resultMap> <select id = "getClassById" parameTerType = "string" resultMap = "classResultMap"> pilih * dari class_tbl ct di mana ct.class_id = #{classId}; </pilih>Bagian dari file Teachermapper.xml:
<resultMap type = "TeacherEntity" id = "TeacherResultMap"> <id properti = "TeacherId" kolom = "Teacher_ID" /> <Properti Hasil = "TeacherName" Kolom = "Teacher_name" /> <Properti Hasil = "Teachersex" Kolom = "Teacher_Sex" /> <Properti Hasil = "TeacherBirthday" COLUMNER = "GURULER =" BBIRTH "KOMOLTHT" KOMOLT "KOMOLT" KOMOLT "KOMOLTE" KOMOLTE "KOMOLTE" KOMOLT "KOMOLTE" KOMOLTE "" kolom = "work_date"/> <properti result = "workDate" kolom = "work_date"/> <properti result = "profesional" kolom = "profesional"/> </resultMap> <pilih id = "getTeacher" parameTerpe = "string" resultMap = "teacherResultMap"> Select * from Teacher_tbl tt di mana tt.teacher = "TeacherResultMap"> dari Teacher_tbl tt di mana tt.teach = "TeacherResultMap"> dari Teacher_tbl tt di mana tt.teach = "TeacherResultMap"> dari Teacher_tbl tt di mana tt.teach = "TeacherResultMap"> dari Teacher_tbl tt di mana tt.teach = "TeacherResUntMap"> dari Teacher_TBl TT di mana tt.
1.1.3.2 Penggunaan Hasilmap untuk mencapai Union
Fungsi yang sama seperti di atas adalah untuk menanyakan kelas dan juga meminta guru kelas. Anda perlu menambahkan HRESSMAP (didefinisikan dalam file XML guru) di Asosiasi, tulis SQL baru (kueri tabel kelas kiri bergabung dengan tabel guru), dan tidak perlu guru pilih.
Ubah konten file classmapper.xml:
<resultMap type="ClassEntity" id="classResultMap"> <id property="classID" column="CLASS_ID" /> <result property="className" column="CLASS_NAME" /> <result property="classYear" column="CLASS_YEAR" /> <association property="teacherEntity" column="TEACHER_ID" resultMap="teacherResultMap"/> </resultMap> <select id = "getclassandteacher" parameTerType = "string" resultMap = "classResultMap"> pilih * dari class_tbl ct kiri bergabung dengan guru_tbl tt di ct.teacher_id = tt.teacher_id di mana ct.class_id = #{classid}; </pilih>Untuk TeacherResultMap, silakan lihat konten di atas dalam file Teachermapper.xml.
1.1.4 Koleksi
Elemen agregasi digunakan untuk menangani hubungan "satu-ke-banyak". Anda perlu menentukan atribut kelas entitas Java pemetaan, javatype atribut (biasanya arraylist); jenis objek dalam daftar objek (kelas entitas java); nama kolom tabel database yang sesuai;
Situasi yang berbeda perlu memberi tahu Mybatis cara memuat agregasi. Mybatis dapat dimuat dalam dua cara:
(1). Pilih: Jalankan pernyataan SQL pemetaan lainnya untuk mengembalikan tipe entitas Java. Lebih fleksibel;
(2). HRESSMAP: Gunakan peta hasil bersarang untuk memproses set hasil kueri melalui bergabung dan memetakannya ke jenis entitas Java.
Misalnya, kelas memiliki banyak siswa.
Pertama -tama tentukan atribut daftar siswa di kelas:
Daftar Pribadi <Sahasiswa StudentEntity> Daftar Siswa;
1.1.4.1 Gunakan Select untuk mengimplementasikan agregasi
Penggunaannya sangat mirip dengan Union, perbedaannya adalah bahwa ini adalah satu-ke-banyak, jadi umumnya daftar yang dipetakan terdaftar. Jadi di sini Anda perlu mendefinisikan javatype sebagai arraylist, Anda juga perlu menentukan jenis objek dalam daftar, dan nama pernyataan pilih yang harus disetel (harus dicatat bahwa kondisi pernyataan pilih untuk siswa kueri di sini haruslah kunci classid asing).
Bagian dari isi file classmapper.xml:
<resultMap type = "classEntity" id = "classResultMap"> <id properti = "classId" kolom = "class_id" /> <properti hasil = "classname" kolom = "class_name" /> <properti hasil = "classyear" column = "class_year" /> <asosiasi properti = "TeacherEntity" COLMOLTITY = "CLASSYEAR" PILITAN = "PILITAN" kolom = "class_id" javatype = "arraylist" ofType = "studentEntity" select = "getStudentByClassId"/> </resultMap> <pilih id = "getClassById" parameTerType = "string" resultMap = "classResultMap"> select * dari class_tbl ct di mana ct.clapsclass = classeD = classid {classid {classid {classED {classED {classeD {cllass {cllass {classRass = dari class_ dari clelas {classRassED; </pilih>Bagian dari file studentmapper.xml:
<!-Java Properties, Definisi Pemetaan Antara Bidang Tabel Database-> <resultMap type = "StudentEntity" id = "StudentResultMap"> <id properti = "studentId" kolom = "student_id" /> <hasil properti = "StudentName" kolom = "Student_name" /> <hasil Properti = "StudentSex" Kolom Studentsex = "Studentsex" kolom = "student_birthday" /> < /resultMap> <!-query daftar siswa, berdasarkan id kelas-> <pilih id = "getStudentByClassId" parameterType = "string" resultMap = "studentResultMap"> <incert refid = "selectSudentAll" /di mana st.class_id = #{classid} 1.1.4.2 Gunakan HasilMap untuk mencapai agregasi
Menggunakan HasilMap, Anda perlu menulis ulang SQL, kiri bergabung dengan tabel siswa.
<resultMap type="ClassEntity" id="classResultMap"> <id property="classID" column="CLASS_ID" /> <result property="className" column="CLASS_NAME" /> <result property="classYear" column="CLASS_YEAR" /> <association property="teacherEntity" column="TEACHER_ID" resultMap="teacherResultMap"/> <collection property="studentList" column="CLASS_ID" javaType="ArrayList" ofType="StudentEntity" resultMap="studentResultMap"/> </resultMap> <select id="getClassAndTeacherStudent" parameterType="String" resultMap="classResultMap"> SELECT * FROM CLASS_TBL CT LEFT JOIN STUDENT_TBL ST ON CT.CLASS_ID = ST.CLASS_ID LEFT JOIN Teacher_tbl tt di ct.teacher_id = tt.teacher_id Where ct.class_id = #{classId}; </pilih>
Untuk TeacherResultMap, silakan lihat konten di atas dalam file Teachermapper.xml. Silakan lihat StudentResultMap di bagian di atas dari file StudentMapper.xml.
1.1.5Discriminator Discriminator <BR /> Kadang -kadang kueri basis data terpisah dapat mengembalikan set hasil dari banyak tipe data yang berbeda (tetapi mudah -mudahan beberapa korelasi). Elemen diskriminator dirancang untuk menangani situasi ini, termasuk hierarki warisan kelas. Diskriminator sangat mudah dimengerti karena berperilaku seperti pernyataan switch di Java.
Diskriminator definisi menentukan properti kolom dan javatype. Kolom adalah tempat mybatis mencari nilai perbandingan. Javatype adalah jenis yang tepat untuk digunakan untuk memastikan tes yang setara (meskipun string berguna dalam banyak kasus).
Contoh berikut adalah bahwa ketika ClassID adalah 20000001, atribut ClassID dipetakan.
<resultMap type="liming.student.manager.data.model.StudentEntity" id="resultMap_studentEntity_discriminator"> <id property="studentId" column="STUDENT_ID" javaType="String" jdbcType="VARCHAR"/> <result property="studentName" column="STUDENT_NAME" javaType="String" jdbctype = "varchar"/> <properti result = "studentsex" kolom = "student_sex" javatype = "int" jdbctype = "integer"/> <properti hasil = "studentbirthday" kolom = "student_birthday" javatype = "date" jdbctype = "date"/> <"hasilnya =" phono = "colomo =" studento "colomo" colomo "colomo =" date "/<"/> <"colomo =" date "Jdbctype =" date "/<" hasil = " javatype = "byte []" jdbctype = "blob" typeHandler = "org.apache.ibatis.type.blobtypehandler" /> <properti result = "placeId" kolom = "place_id" javatype = "string" jdbctype = "varchar" /<diskriminator colom = "string" jdbctype = "varchar" /<diskriminator comolor = "javatype =" jdbctype = "varchar" /<diskriminator colom = "clexype =" jdbctype = "varchar" /<diskriminator = "javatype =" JDBCTYPE = "vARCHAR" /<DISKRIMINATOR = "JAVATYPE =" JAVTYPE = value = "20000001" resultType = "liming.student.manager.data.model.studentity"> <hasil properti = "classid" kolom = "class_id" javatype = "string" jdbctype = "varchar"/> </case> </diskriminator> </resultMap>
2. Tambah, Hapus, Modifikasi dan Periksa, Parameter, dan Cache
2.1 Pilih
Elemen pilih sangat sederhana. Misalnya:
<!-Permintaan siswa, menurut id-> <pilih id = "getstudent" parameTerType = "string" resultMap = "studentResultMap"> Pilih St.student_id, St.student_name, St.student_sex, St.Student_Birthday, St.Class_id dari Student_tbl St St.Student_id {studentser {students> {studentser {st.student {st.student {st.student {st.student, Pernyataan ini disebut 'Getstudent, memiliki parameter string, dan mengembalikan objek tipe kemahasiswaan.
Perhatikan bahwa identifikasi parameter adalah: #{StudentId}.
Pilih Detail Konfigurasi Atribut Pernyataan:
| milik | menggambarkan | Dapatkan nilainya | bawaan |
| pengenal | Dalam mode ini, pengidentifikasi unik dapat dirujuk oleh pernyataan lain | ||
| ParameterType | Nama kelas lengkap atau alias untuk parameter yang diteruskan ke pernyataan ini | ||
| Hasil Hasil | Pernyataan mengembalikan seluruh nama kelas atau alias dari jenis nilai. Perhatikan bahwa jika itu adalah koleksi, maka seluruh nama kelas atau alias item dalam koleksi diisi di sini, daripada nama kelas koleksi itu sendiri. (Hasil Hasil dan Hasil Map tidak dapat digunakan bersama -sama) | ||
| Hasilmap | Nama Hasil Eksternal Referensi. Pemetaan set hasil adalah fitur paling kuat di Mybatis. Banyak pemetaan kompleks dapat dengan mudah diselesaikan. (Hasil Hasil dan Hasil Map tidak dapat digunakan bersama -sama) | ||
| Flushcache | Jika diatur ke true, cache akan dihapus setiap kali pernyataan itu dipanggil. Pernyataan SELECT diatur ke false secara default | Benar | Salah | PALSU |
| Usecache | Jika diatur ke True, set hasil dari pernyataan tersebut akan di -cache. Pernyataan SELECT diatur ke false secara default true | false false Timeout menetapkan waktu maksimum drive menunggu respons sebelum melemparkan pengecualian. Standarnya adalah tidak ada nilai, dan drive memutuskan sendiri. | Benar | Salah | PALSU |
| Batas waktu | Atur waktu maksimum drive menunggu respons sebelum melemparkan pengecualian. Standarnya harus ditetapkan tanpa nilai, dan drive itu sendiri memutuskan | Bilangan bulat positif | Tidak diatur |
| Fetchsize | Setelah menetapkan nilai, drive akan bersemangat untuk kembali setelah jumlah set hasil mencapai nilai ini. Standarnya tidak diatur, dan drive memutuskan sendiri. | Bilangan bulat positif | Mendorong keputusan |
| Pernyataan Pernyataan Pernyataan | pernyataan, pernyataan yang disiapkan, pernyataan yang dapat dipanggil. Pernyataan yang disiapkan, pernyataan yang dapat dipanggil | PENYATAAN SIAP Dapat dipanggil | SIAP |
| HasilTypetpe | Forward_only, scroll_sensitive, scroll_insensitive Hanya penerusan, menggulir sensitif, menggulir case-tidak sensitif | Forward_only Scroll_sensitive Scroll_insensitive | Mendorong keputusan |
2.2 Masukkan
Pernyataan insert sederhana:
<!-masukkan siswa-> <masukkan id = "insertStudent" parameTerType = "studentEntity"> masukkan ke dalam student_tbl (student_id, student_name, student_sex, student_birthday, class_id) nilai ( #{studentId}, #{studentName}, #{studentsex}, #{studentId {{studentname}, #{studentsex}, #{studentId {studentsexy {studentsxity {studentsex {studentsex}, #{{/{{studentname { #{{{studentsEx}, #{{{studentbirdaySisipkan dapat menggunakan kebijakan kunci primer otomatis yang didukung oleh database, mengatur useGeneratedKeys = "true", dan kemudian mengatur KeyProperty ke kolom yang sesuai, dan itu selesai. Misalnya, StudentEntity di atas menggunakan otomatis yang dihasilkan untuk menghasilkan kunci utama untuk kolom ID. Anda juga dapat menggunakan elemen SelectKey. Contoh berikut menggunakan database MySQL NextVal ('Student') sebagai fungsi khusus untuk menghasilkan kunci.
<!-- Insert student automatic primary key--> <insert id="insertStudentAutoKey" parameterType="StudentEntity"> <selectKey keyProperty="studentID" resultType="String" order="BEFORE"> select nextval('student') </selectKey> INSERT INTO STUDENT_TBL (STUDENT_ID, STUDENT_NAME, STUDENT_SEX, STUDENT_BIRTHDAY, CLASS_ID) VALUES (#{studentID}, #{StudentName}, #{StudentSex}, #{StudentBirthday}, #{classEntity.classid}) </insert>| milik | menggambarkan | Dapatkan nilainya | bawaan |
| pengenal | Dalam mode ini, pengidentifikasi unik dapat dirujuk oleh pernyataan lain | ||
| ParameterType | Nama kelas lengkap atau alias untuk parameter yang diteruskan ke pernyataan ini | ||
| Flushcache | Jika diatur ke true, cache akan dihapus setiap kali pernyataan itu dipanggil. Pernyataan SELECT diatur ke false secara default | Benar | Salah | PALSU |
| Usecache | Jika diatur ke True, set hasil dari pernyataan tersebut akan di -cache. Pernyataan SELECT diatur ke false secara default true | false false Timeout menetapkan waktu maksimum drive menunggu respons sebelum melemparkan pengecualian. Standarnya adalah tidak ada nilai, dan drive memutuskan sendiri. | Benar | Salah | PALSU |
| Batas waktu | Atur waktu maksimum drive menunggu respons sebelum melemparkan pengecualian. Standarnya harus ditetapkan tanpa nilai, dan drive itu sendiri memutuskan | Bilangan bulat positif | Tidak diatur |
| Fetchsize | Setelah menetapkan nilai, drive akan bersemangat untuk kembali setelah jumlah set hasil mencapai nilai ini. Standarnya tidak diatur, dan drive memutuskan sendiri. | Bilangan bulat positif | Mendorong keputusan |
| Pernyataan Pernyataan Pernyataan | pernyataan, pernyataan yang disiapkan, pernyataan yang dapat dipanggil. Pernyataan yang disiapkan, pernyataan yang dapat dipanggil | PENYATAAN SIAP Dapat dipanggil | SIAP |
| UsegeneratedKeys | Beri tahu MyBatis untuk menggunakan metode GetGeneratedKeys JDBC untuk mendapatkan kunci utama yang dihasilkan oleh database (MySQL, SQLServer, dll. Database relasional akan memiliki bidang yang secara otomatis dihasilkan). Default: Salah | Benar | Salah | PALSU |
| KeyProperty | Identifikasi nilai yang akan dikembalikan oleh kunci yang diatur ke mybatis ke getGeneratedKeys, atau gunakan selectKey untuk pernyataan insert Sub-elemen. |
| milik | menggambarkan | Dapatkan nilainya |
| KeyProperty | Atribut yang perlu ditetapkan untuk hasil yang dihasilkan oleh pernyataan SelectKey. | |
| Hasil Hasil | Menghasilkan jenis hasil. MyBatis memungkinkan penggunaan tipe data dasar, termasuk tipe string dan int. | |
| Memesan | Itu dapat diatur ke sebelum atau sesudah. Jika diatur ke sebelumnya, pertama -tama akan memilih kunci utama, lalu atur keyProperty, lalu jalankan pernyataan insert; Jika diatur ke After, pertama -tama akan menjalankan pernyataan insert dan kemudian menjalankan pernyataan SelectKey, yang biasanya merupakan mekanisme urutan yang tertanam dalam pernyataan insert dalam database panggilan internal (seperti Oracle). | SEBELUM SETELAH |
| Pernyataan Pernyataan Pernyataan | Seperti di atas, MyBatis mendukung pernyataan, disiapkan, dan formulir pernyataan yang dapat dipanggil, sesuai dengan pernyataan, persiapan, dan tanggapan Callablestatement. | PENYATAAN SIAP Dapat dipanggil |
2.3 UPDATE, Hapus
Pembaruan sederhana:
<!-Perbarui Informasi Siswa-> <update id = "updateStudent" parameTerType = "studentEntity"> update student_tbl set student_tbl.student_name = #{studentName}, student_tbl.student_sex = #{studentsex}, student_tbl.student_birtheDer = {studentsex {studentsex {studentsex_tudent_birthex = {studentsex = {studentsex = {studentsex = {studentsex = {studentsex = {studentsex = #{classEntity.classid} di mana student_tbl.student_id = #{studentId}; </update>Hapus sederhana:
<!-Hapus siswa-> <delete id = "deletestudent" parameTerType = "studentEntity"> hapus dari student_tbl di mana student_id = #{studentId} </delete>
Perbarui dan Hapus Pernyataan Atribut Detail Konfigurasi:
| milik | menggambarkan | Dapatkan nilainya | bawaan |
| pengenal | Dalam mode ini, pengidentifikasi unik dapat dirujuk oleh pernyataan lain | ||
| ParameterType | Nama kelas lengkap atau alias untuk parameter yang diteruskan ke pernyataan ini | ||
| Flushcache | Jika diatur ke true, cache akan dihapus setiap kali pernyataan itu dipanggil. Pernyataan SELECT diatur ke false secara default | Benar | Salah | PALSU |
| Usecache | Jika diatur ke True, set hasil dari pernyataan tersebut akan di -cache. Pernyataan SELECT diatur ke false secara default true | false false Timeout menetapkan waktu maksimum drive menunggu respons sebelum melemparkan pengecualian. Standarnya adalah tidak ada nilai, dan drive memutuskan sendiri. | Benar | Salah | PALSU |
| Batas waktu | Atur waktu maksimum drive menunggu respons sebelum melemparkan pengecualian. Standarnya harus ditetapkan tanpa nilai, dan drive itu sendiri memutuskan | Bilangan bulat positif | Tidak diatur |
| Fetchsize | Setelah menetapkan nilai, drive akan bersemangat untuk kembali setelah jumlah set hasil mencapai nilai ini. Standarnya tidak diatur, dan drive memutuskan sendiri. | Bilangan bulat positif | Mendorong keputusan |
| Pernyataan Pernyataan Pernyataan | pernyataan, pernyataan yang disiapkan, pernyataan yang dapat dipanggil. Pernyataan yang disiapkan, pernyataan yang dapat dipanggil | PENYATAAN SIAP Dapat dipanggil | SIAP |
<!-Pernyataan SQL multipleks untuk menanyakan semua bidang tabel siswa-> <sql id = "selectstudentall"> pilih St.student_id, St.student_name, St.student_sex, St.student_birthday, St.Class_id dari Student_tbl st </sql>
Dengan cara ini, Anda dapat secara langsung merujuk dan menggunakannya dalam pernyataan SELECT. Ubah pernyataan pilih di atas menjadi:
<!-Permintaan siswa, menurut id-> <pilih id = "getStudent" parameTerType = "string" resultMap = "studentResultMap"> <include refid = "selectstudentall"/> di mana st.student_id = #{studentId} </pilih> 2.5 Parameter
Parameter telah digunakan di banyak tempat di atas, seperti kueri, modifikasi, kondisi penghapusan, penyisipan, data yang dimodifikasi, dll. Jenis data dasar yang dapat digunakan MyBatis dan tipe data Java yang kompleks.
Jenis data dasar, string, int, tanggal, dll.
Namun, menggunakan tipe data dasar hanya dapat memberikan satu parameter, jadi Anda perlu menggunakan kelas entitas java atau tipe peta sebagai tipe parameter. Atributnya dapat diperoleh secara langsung melalui #{}.
2.5.1 Parameter Jenis Dasar
Cari daftar siswa berdasarkan waktu penerimaan:
<!-Permintaan Daftar Siswa, sesuai dengan waktu penerimaan-> <pilih id = "getStudentListByDate" parameTerType = "date" resultMap = "studentResultMap"> pilih * dari student_tbl st left goint class_tbl ct di st.class_id = ct.class_id di mana ct.class_year = #year = {claskyear {clasyar {class.id; </pilih> Daftar <sahwahtertitas> studentlist = studentmapper.getstudentListByclassyear (stringutil.parse ("2007-9-1")); untuk (studententity entityTemp: studentlist) {system.out.println (entitytemp.toString ()); } 2.5.2 Parameter Jenis Entitas Java
Cari daftar siswa dengan nama dan jenis kelamin. Gunakan kelas entitas sebagai parameter:
<!-Daftar siswa kueri, seperti nama, = jenis kelamin, tipe entitas parameter-> <pilih id = "getStudentListListity" parameterType = "studentEntity" resultMap = "studentResultMap"> pilih * dari student_tbl st.student_name like concat (concat ('%', #{studentname {St.sexx {studentsx ', concat (') {studentname {studentsex ') </pilih> Entitas Studententity = StudentEntity baru (); entity.setstudentname ("li"); entity.setstudentsex ("pria"); Daftar <sahwah StudentEntitas> Daftar Siswa = StudentMapper.getStudentListListitas (entitas); untuk (studententity entityTemp: studentlist) {system.out.println (entitytemp.toString ()); } 2.5.3map Parameter
Cari daftar siswa dengan nama dan jenis kelamin. Gunakan peta sebagai parameter:
<!-Daftar Siswa Permintaan, = Jenis Kelamin, Jenis Peta Parameter-> <pilih id = "getStudentListWhereMap" parameterType = "peta" resultMap = "studentResultMap"> SELECT * dari Student_tbl St di mana St.student_sex = #{sex} dan St.student_sex = #{} </} </} {sex} dan St.student_sex = #{} </} </{/{sex} dan St.student_sex = #{} </} </{/seks Peta <string, string> peta = new HashMap <String, String> (); peta.put ("seks", "wanita"); peta.put ("name", "li"); Daftar <sahwah StudentEntitas> Daftar Siswa = StudentMapper.getstudentListWheremap (MAP); untuk (studententity entityTemp: studentlist) {system.out.println (entitytemp.toString ()); } 2.5.4 Implementasi multi-parameter
Jika Anda ingin lulus dalam beberapa parameter, Anda perlu menambahkan anotasi @param ke parameter antarmuka. Diberi contoh:
Penulisan antarmuka:
Daftar Publik <sahasien> getStudentList whereParam (@param (value = "name") nama string, @param (value = "sex") string sex, @param (value = "ulang tahun") ulang tahun, @param (value = "classentity") classentity classentity);
Metode Penulisan SQL:
<!-Daftar siswa kueri, seperti nama, = jenis kelamin, = ulang tahun, = kelas, metode multi-parameter-> <pilih id = "getstudentlist whereParam" resultMap = "studentResultMap"> pilih * dari student_tbl st <where> <if test = "name! = Null dan name! = '' '' 'Students,' test =" name! = Null and name! = '' '' 'StudentseDent,'%conven '{name' {student '{api', name (if test = 'name! </if> <if test = "sex! = null dan sex! = ''"> dan st.student_sex = #{sex} </if> <if test = "ulang tahun! = null"> dan st.student_birthday = #{ulang tahun} </if> <if test = "classentity! = null dan classentity." = #{ClassEntity.ClassID} </if> </where> </ pilih>Buat kueri:
List<StudentEntity> studentList = studentMapper.getStudentListWhereParam(", "",StringUtil.parse("1985-05-28"), classMapper.getClassByID("20000002")); for (StudentEntity entityTemp: studentList) { System.out.println(entityTemp.toString()); } 2.5.5 Metode Substitusi String
Secara default, menggunakan sintaks #{} menyebabkan mybatis menghasilkan properti yang disiapkan dan menggunakan parameter yang disiapkan (=?) Untuk mengatur nilainya dengan aman. Cobalah untuk menjadi cepat dan aman, dan juga sering digunakan. Tetapi kadang -kadang Anda mungkin ingin mengganti string yang tidak berubah ke dalam pernyataan SQL secara langsung. Misalnya, untuk dipesan oleh, Anda dapat menggunakan ini: memesan dengan $ {columnName} tetapi mybatis tidak akan memodifikasi dan menghindari string ini.
Catatan: Sangat tidak aman untuk menerima dan menerapkan input pengguna ke dalam pernyataan yang tidak berubah dengan cara ini. Ini akan memungkinkan pengguna untuk menanamkan kode korup, jadi mengharuskan bidang untuk tidak mengizinkan klien masuk, atau Anda secara langsung memeriksa legitimasinya.
2.6 cache cache
Mybatis berisi mekanisme cache yang kuat, dapat dikonfigurasi, dan dapat disesuaikan. Implementasi cache Mybatis 3 telah ditingkatkan berkali -kali, yang sangat kuat dan lebih mudah dikonfigurasi. Secara default, cache tidak diaktifkan. Selain cache sesi, ini dapat meningkatkan kinerja dan menyelesaikan ketergantungan global. Nyalakan cache level 2, Anda hanya perlu menambahkan baris sederhana ke file pemetaan SQL: <cache/>
Fungsi kalimat sederhana ini adalah sebagai berikut:
(1). Semua pernyataan pilih dalam file pemetaan akan di -cache.
(2). Semua menyisipkan, memperbarui dan menghapus pernyataan dalam file pemetaan akan menghapus cache.
(3). Cache didaur ulang menggunakan algoritma "jarang digunakan baru -baru ini" (4). Cache tidak akan dihapus oleh waktu yang ditentukan.
(5). Setiap cache dapat menyimpan 1024 daftar atau referensi ke objek (terlepas dari hasil kueri).
(6). Cache akan digunakan sebagai cache "baca/tulis", yang berarti bahwa objek yang diambil tidak dibagikan dan aman untuk penelepon. Tidak akan ada panggilan lain (7). atau modifikasi potensial pada utas.
Misalnya, buat cache FIFO untuk dihapus sekali dalam 60 detik, menyimpan 512 hasil objek atau daftar referensi, dan mengembalikan hasil hanya baca. Karena memodifikasinya di utas yang tidak digunakan dapat mengakibatkan konflik referensi.
<cache gusuran = "fifo" flushInterval = "60000" size = "512" readonly = "true"> </cache>
Anda juga dapat berbagi konfigurasi atau instance cache yang sama di berbagai ruang nama. Dalam hal ini, Anda dapat menggunakan cache-ref untuk merujuk cache lain.
<cache-ref namespace = "com.liming.manager.data.studentmapper"/>
Detail Konfigurasi Atribut Pernyataan Cache:
| milik | menjelaskan | Dapatkan nilainya | nilai default |
| Pengusiran | Kebijakan Caching: LRU - Penggunaan paling sedikit: Hapus objek yang belum digunakan dalam periode panjang terakhir. Fifi--in pertama-keluar: Pindah objek sebelumnya dalam antrian Soft - Soft Reference: Berdasarkan aturan referensi lunak, gunakan mekanisme pengumpulan sampah untuk menghapus objek Referensi Lemah - Lemah: Gunakan Mekanisme Pengumpulan Sampah untuk menghapus objek secara paksa berdasarkan aturan referensi yang lemah | Lru Fifi LEMBUT LEMAH | Lru |
| Flushinterval | Mewakili total waktu total milidetik. Defaultnya tidak diatur, jadi jika Anda menggunakan kliring tanpa interval, Anda hanya dapat memanggil pernyataan untuk menghapusnya. | Bilangan bulat positif | Tidak diatur |
| ukuran | Ukuran objek yang di -cache | Bilangan bulat positif | 1024 |
| readonly | Cache baca saja akan mengembalikan contoh yang sama kepada semua penelepon. Oleh karena itu, tidak satu pun dari mereka yang dapat dimodifikasi, yang dapat sangat meningkatkan kinerja. Cache yang dapat ditulis akan melewati urutan untuk mengembalikan salinan objek yang di -cache. Ini akan lebih lambat, tetapi lebih aman. Jadi nilai defaultnya salah. | Benar | Salah | PALSU |