Pemrograman dalam Operasi Antarmuka
Secara umum, ketika kita membangun kelas yang memetakan antarmuka SQL, biasanya terlihat seperti ini:
public static void testBasicQuery (int id) {SQLSession session = mybatisutils.getsqlsession (); Coba { / * * David.mybatis.demo.ivisitorOperation.BasicQuery di sini harus sesuai dengan namespace dalam konfigurasi pada gambar di bawah ini * / pengunjung pengunjung = (pengunjung) sesi. Mybatisutils.closession (sesi); System.out.println (pengunjung); } catch (exception e) {// todo: handle exception}}<!-Di sini namespace sesuai dengan parameter string yang Anda lewati-> <mapper namespace = "david.mybatis.demo.ivisitorOperation"> <!-di sini hasilnya sesuai dengan alias yang baru saja Anda tentukan dalam node typealis = "visoring =" visoring = "parametertype; Status> 0 Pesan dengan ID </pilih> </mapper>
Dengan cara ini, jika nama -nama di kedua sisi secara tidak sengaja tidak sesuai selama proses pengembangan nyata, pengecualian akan terjadi. Untuk menghindari situasi seperti itu, kita dapat menggunakan metode antarmuka untuk melakukan operasi yang sesuai. Mari kita ubah artikel ini di bawah ini.
Pertama, kami membuat kelas ivisitoperation baru dengan nama paket David.mybatis.demo, menunjukkan bahwa antarmuka semua metode basis data akan dioperasikan di masa depan, seperti yang ditunjukkan di bawah ini:
Paket David.mybatis.demo; import java.util.list; impor david.mybatis.model.pagenateargs; david.mybatis.model.visitor; antarmuka publik ivisitoroperation { /* query dasar* / public vixitor BasicQuery (int int);} public public static {public query* / public vixitor BasicQuery (int int);} public public testic Sesi sqlsession = mybatisutils.getsqlsession (); coba {ivisitorOperation vOperation = session.getMapper (ivisitorOperation.class); Pengunjung pengunjung = voperation.basicquery (id); Mybatisutils.closession (sesi); System.out.println (pengunjung); } catch (exception e) {// todo: handle exception}}Ini dilakukan, jadi kami tidak perlu khawatir tentang ketidakcocokan yang dapat dihasilkan dari nama metode penulisan manual.
Operasi CRUD
Berikut ini akan menjelaskan penciptaan operasi CRUD dan GetList berdasarkan operasi tabel tunggal. Untuk membuat beberapa data uji, mari pertama kali dapatkan metode Tambah.
Lanjutkan untuk Tambah Tambah, Hapus, Perbarui, Permintaan, dan Metode Antarmuka GetList di kelas antarmuka Ivisitoroperation terakhir, seperti yang ditunjukkan di bawah ini:
/** Kueri dasar*/ pengunjung publik BasicQuery (int id); /** Tambahkan Pengunjung*/ Int Publik Tambah (Pengunjung Pengunjung); /** Hapus pengunjung*/ int hapus publik (int id); /** Pembaruan Pengunjung*/ Pembaruan int publik (Pengunjung Pengunjung); /** Kueri Pengunjung*/ Kueri Pengunjung Publik (Int ID); / * * Daftar Pengunjung Permintaan */ Daftar Publik <Wisitor> getList ();
Untuk operasi CRUD yang sesuai, node Sisipkan, Perbarui, Hapus, dan Pilih masing -masing di bawah simpul <Mapper> dari Visitormapper.xml. Untuk detail konfigurasi terperinci, silakan merujuk ke situs web resmi http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
Konfigurasi dalam contoh ini adalah sebagai berikut: gunakan #{parameter_name} untuk lulus parameter, dan tentu saja, Anda juga dapat menggunakan $ {parameter_name} secara langsung.
Dengan cara sebelumnya, mybatis akan mengonversinya menjadi bentuk parameterisasi, misalnya masukkan ke dalam nilai tabel (nama) (#{name}) => masukkan ke dalam nilai tabel (nama) (?) (Dalam kasus mysql)
Dengan cara terakhir, mybatis akan melewati parameter tanpa melakukan operasi apa pun, seperti memasukkan nilai tabel (nama) ($ {name}) => masukkan ke dalam tabel (nama) nilai ([nilai yang Anda lewati]), lulus aa, inilah aa, lulus 'aa', di sini adalah 'aa'.
<? 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"><mapper naMapper =" mapper. <!-useGeneratedKeys = "true" berarti apakah akan menggunakan urutan pertumbuhan diri, keyproperty = "id" menentukan kolom mana yang merupakan kolom pertumbuhan diri, parameterType = "pengunjung" menentukan tipe yang sesuai dengan definisi dalam antarmuka quisitoroperation. Jenis pengembalian yang disesuaikan adalah pilihan terbaik untuk mengembalikan tipe kompleks dan juga senjata paling kuat di mybatis-> <masukkan id = "tambahkan" parameTerType = "pengunjung" useGeneratedKeys = "true" keyproperty = "id"> masukkan ke dalam pengunjung (nama, email, status, createTime) nilai ( #{ #{ #{ #{ #{ #{{ #{{ #{{ #{{ #{{ #{ #{{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ #{ <delete id="delete" parameterType="int"> delete from Visitor where status>0 and id = #{id} </delete> <update id="update" parameterType="Visitor"> update Visitor set Name = #{name}, Email=#{email}, Status=#{status} where id=#{id} and Status>0; </update> <pilih id = "query" parameTerType = "int" resultType = "pengunjung"> Pilih id, nama, email, status, createTime dari pengunjung di mana id =#{id} dan status> 0 pesanan dengan id </pilih> <pilih id = "basicQuery" parameTerpe = "int" resultType = "ID visitor"> Dari> dari ParameterType = "int" hasil "visor" id = "getList" resultMap = "visitorrs"> <include refid = "getListql" /> < /select> <resultMap type = "pengunjung" id = "vistaRrs"> <id kolom = "id" properti = "id" /> <hasil kolom = "" name = "name" /<hasil kolom hasil = "email" property " /creatim ="> name = "name =" name " /<hasil kolom =" email "email" email " properti = "createTime"/> </resultMap> <sql id = "getListql"> pilih * dari pengunjung di mana status> 0 </sql> </mapper>Satu hal yang perlu diperhatikan di sini adalah bahwa ID dalam simpul operasi harus sesuai dengan nama antarmuka dalam definisi antarmuka, dan jenis parameter juga harus sesuai dengan itu. Misalnya, antarmuka adalah ADD (pengunjung pengunjung). Kemudian saat mengkonfigurasi node insert, id = "add" dan parameterType = "pengunjung"
Jika tidak, pengecualian yang sesuai akan dilaporkan. Misalnya, jika simpul ID tidak sesuai dengan nama antarmuka, pengecualian berikut akan muncul:
Anda dapat melihat bahwa saat mendapatkan daftar di file konfigurasi Visitormapper.xml, Anda menggunakan HasilMap. Saat menggunakan HasilMap, Anda dapat menentukan bidang mana peta pernyataan SQL Anda sendiri, karena kadang -kadang Anda tidak memerlukan begitu banyak kolom, sehingga Anda tidak perlu mengkonfigurasi begitu banyak peta saat mengonfigurasi pemetaan, atau kolom Anda telah alias, sehingga Anda tidak dapat secara langsung menggunakan TaneType = "Pengunjung" untuk memetakan, karena pemetaan default dengan Metode Mybatis yang cocok dengan tabel dengan tabel yang atribut. Anda juga dapat mengontrol apakah akan memetakan dengan mengkonfigurasi nilai atribut <Stueptings> di bawah simpul <Configuration> untuk mengontrol apakah akan memetakan dengan penamaan unta di Javabean sebagai berikut.
<Pengaturan> <pengaturan nama = "MapundersCoreToCamElcase" value = "false" /> < /settings>
Untuk konfigurasi lain yang memodifikasi mapper, Anda dapat melihatnya di http://mybatis.github.io/mybatis-3/configuration.html#settings.
Untuk kelas mapper pengunjung adalah sebagai berikut:
<mapper namespace = "david.mybatis.demo.ivisitoroperation"> <sql id = "getListql"> Pilih id sebagai visitor_id, nama, email, status, createTime dari pengunjung di mana status> </sql> <pilih ID = "getList" resultMap = "visitor"> </sql> <pilih = "getList" resultMap = "visitor"> </sql> <pilih = "getList" resultMap = "visitor"> </sql </sql> <schect "getList" resultMap = "visitors"> <certing "> </sql </sql =" getList "hancur" Mengacu pada di sini adalah properti properti. Bidang di dalamnya harus sama dengan properti yang Anda tentukan di entitas. Ini adalah case sensitif, jika tidak, setter default tidak akan menemukan properti yang sesuai saat menetapkan nilai ke properti. Anda dapat mencoba properti kolom yang sesuai dengan nama set hasil yang dikembalikan oleh pernyataan kueri. Jika alias diberikan ke bidang yang sesuai, misalnya, ID menjadi Visitor_ID, maka nama kolom yang sesuai juga harus sesuai dengan -> <resultMap type = "pengunjung" id = "Visitors"> <id kolom = "visitor_id" properti = "ID" /> <RAZIN KOMOL: "NAME" <nama " /" NAME " /> <Kolom Hasil =" Email "Kolom" Email " kolom = "createTime" properti = "createTime"/> </resultMap> </mapper>
Di sini Anda juga akan melihat bahwa ada simpul <sql> node. Ini digunakan untuk mengekstraksi pernyataan atau bidang SQL publik untuk digunakan kembali di tempat lain. Untuk instruksi terperinci lainnya, silakan merujuk ke http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
Sisanya adalah operasi yang sama seperti sekarang. Anda dapat membuat kelas demorun dalam program demo untuk menyimpan berbagai metode pengujian, sebagai berikut:
Paket david.mybatis.demo; import java.util.arrays; impor java.util.list; impor org.apache.ibatis.Session.sqlsession; import David.mybatis.model.basicqueryargs; impor David.mybatis.model.crud.crud.crud.crud. david.mybatis.model.pagenateargs; impor david.mybatis.model.visitor; impor david.mybatis.model.website; kelas publik demorun {public static testbasicquery (int id) {sqlsession Sesi Coba { / * * David.mybatis.demo.ivisitorOperation.BasicQuery di sini harus sesuai dengan namespace dalam konfigurasi pada gambar di bawah ini * / pengunjung pengunjung = (pengunjung) sesi. Mybatisutils.closession (sesi); System.out.println (pengunjung); } catch (Exception e) {// todo: handle Exception E.PrintStackTrace (); }} public static void testBasicQueryByInterfaceway (int id) {sqlSession session = mybatisutils.getsqlsession (); coba {ivisitorOperation vOperation = session.getMapper (ivisitorOperation.class); Pengunjung pengunjung = voperation.basicquery (id); Mybatisutils.closession (sesi); System.out.println (pengunjung); } catch (Exception e) {// todo: handle Exception E.PrintStackTrace (); }} /** Tambahkan catatan pengunjung dalam batch* / public static void addVisitors () {sqlSession session = mybatisutils.getsqlsession (); Daftar <Visitor> pengunjung = arrays.aslist (pengunjung baru [] {pengunjung baru ("mongoDb", "[email protected]"), pengunjung baru ("redis", "[email protected]"), pengunjung baru ("memcached", "[email protected]"), New Visitor ("ccached", "[email protected]"), New Visitor ("ccached", "[email protected]"), ("memcached", "[email protected]"), ("memcached", "[email protected]"), ("memcached" (" Pengunjung ("HBase", "[email protected]"), pengunjung baru ("BigTable", "[email protected]"), pengunjung baru ("hive", "[email protected]"), pengunjung baru ("MapReduce", "[email protected]"),}); untuk (pengunjung pengunjung: pengunjung) {addVisitor (pengunjung, sesi); } Mybatisutils.closession (sesi); Mybatisutils.showmessages (crud_enum.list, pengunjung.size ()); } /** Tambahkan informasi pengunjung* / @suppresswarnings ("tidak digunakan") addVisitor statis private (pengunjung pengunjung, sesi SQLSession) {if (session == null) session = mybatisutils.getsqlSession (); IvisitorOperation vOperation = session.getMapper (ivisitoroperation.class); int recordcount = voperation.add (pengunjung); session.commit (); if (session == null) mybatisutils.closession (sesi); Mybatisutils.showmessages (crud_enum.add, recordcount); } /** Kelebihan muatan Tambah pengunjung* / public static void addVisitor (pengunjung pengunjung) {addVisitor (pengunjung, null); } /** Hapus informasi pengunjung* / public static void deletevisitor (int id) {sqlSession session = mybatisutils.getsqlsession (); IvisitorOperation vOperation = session.getMapper (ivisitoroperation.class); int recordcount = voperation.delete (id); session.commit (); Mybatisutils.closession (sesi); Mybatisutils.showmessages (crud_enum.delete, recordcount); } /** Perbarui informasi pengunjung* / public static void updateVisitor (int id) {sqlSession session = mybatisutils.getsqlsession (); IvisitorOperation vOperation = session.getMapper (ivisitoroperation.class); Pengunjung pengunjung = voperation.query (id); System.out.println ("Objek Asli:" + Pengunjung); String name = visitor.getName (); if (name.contains ("diperbarui"))) {visitor.setname (name.substring (0, name.indexof ("diperbarui"))); } else {visitor.setname (name + "updated"); } int recordcount = voperation.update (pengunjung); session.commit (); Mybatisutils.closession (sesi); Mybatisutils.showmessages (crud_enum.update, recordcount); System.out.println ("Objek Perbarui:" + Pengunjung); } /** Informasi pengunjung kueri* / public static void queryVisitor (int id) {sqlSession session = mybatisutils.getsqlsession (); IvisitorOperation vOperation = session.getMapper (ivisitoroperation.class); Pengunjung pengunjung = voperation.query (id); Mybatisutils.closession (sesi); Mybatisutils.showmessages (crud_enum.query, 1); System.out.println (pengunjung); } /** Query Daftar pengunjung* / public static void queryVisitorList () {sqlSession session = mybatisutils.getsqlsession (); IvisitorOperation vOperation = session.getMapper (ivisitoroperation.class); Daftar <Visitor> pengunjung = voperation.getList (); untuk (pengunjung pengunjung: pengunjung) {System.out.println (pengunjung); } Mybatisutils.closession (sesi); Mybatisutils.showmessages (crud_enum.list, pengunjung.size ()); }} Kelas Demorun menjalankan crud meja tunggal sederhana, dan demo selesai.