Artikel sebelumnya "Pengembangan Proyek Praktis Javaweb Praktis (I)" telah menciptakan kelas entitas dan alat paginasi. Artikel ini menggunakan mybatis untuk membuat lapisan DAO.
Selain itu, dokumentasi API Mybatis dapat digunakan sebagai referensi
1. Penggunaan mybatis
1. Perkenalkan paket rak
Di sini saya memperkenalkan paket mybatis dan mysql ke dalam lib
2. Tulis config.xml untuk mengonfigurasi lingkungan basis data
Posting kode terlebih dahulu, lalu jelaskan satu per satu
<? 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"> <pouburation> <poursees = "Properties =" Properties = "" <nama paket = "com.model"/> </yypealiases> <lingkungan default = "pengembangan"> <lingkungan id = "pengembangan"> <transactionManager type = "jdbc"/> <datasource type = "pooled"> <name properten = "driver" value = "$ {driver}"/<nama properti = "name =" $ "$" $ {driver} "/<nama properti =" name = "$" $ "$" $ " value = "$ {userName}"/> <name properti = "kata sandi" value = "$ {password}"/> </dateSource> </urvence> <!-Lingkungan kedua-> <lingkungan id = "publish"> <TransactionManager type = "jdbc"/<DataSource type = "pooled"/lingkungan> </Environes> </EnvironmentLangkah pertama adalah memperkenalkan format file XML, yaitu, DTD, yang perlu disalin langsung dari templat yang disediakan oleh MyBatis.
<! Doctype Configuration Public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
Pertanyaan 1
Fungsi Properties adalah untuk mengonfigurasi file properti yang sesuai, sumber daya menentukan rute yang sesuai, dan kami dapat mengonfigurasi driver database, URL, nama pengguna, kata sandi, dll. Dalam file properti. Lihat yang berikut. Dengan cara ini, MyBatis akan secara otomatis membaca parameter berikut, dan Anda dapat menggunakan $ {} untuk merujuknya di XML.
driver = com.mysql.jdbc.driver url = jdbc: mysql: // localhost: 3306/shop username = root password = 123456
Pertanyaan 2
Typealiases mengkonfigurasi alias di bawah jalur yang ditentukan. Kami dapat mengonfigurasi satu alias nama tunggal <typealias type = "com.model.user" alias = "user"/> dengan cara ini, com.model.user diubah menjadi pengguna alias. Tidak perlu menulis semua nama nanti. Anda hanya perlu pengguna untuk mengganti modifikasi batch <package name = "com.model"/>. Dengan cara ini, Anda dapat memodifikasi semua kelas paket, dan alias default adalah nama kelas entitas.
Pertanyaan 3
Lingkungan digunakan untuk mengonfigurasi lingkungan basis data, dan dapat mengonfigurasi beberapa lingkungan, seperti lingkungan pengembangan dan lingkungan rilis, default mengacu pada lingkungan default
Perhatikan bahwa tidak ada S di lingkungan, yang mewakili lingkungan di bawah lingkungan. Ini dibedakan dengan ID, jadi ID harus unik.
TransactionManager mewakili jenis database koneksi, JDBC terhubung ke java
DataSource Mengkonfigurasi Mode Sumber Data, Pooled adalah mode kumpulan koneksi. Untuk mode lain, Anda dapat pergi ke dokumen resmi untuk memeriksanya dan memilih sesuai dengan kebutuhan Anda.
Properti adalah untuk mengonfigurasi koneksi database. Jangan pindahkan nama, ubah nilai = "driver". Berikut adalah penggunaan {} untuk membaca konfigurasi di file properti atas. Perhatikan mencocokkan nama untuk membacanya.
3. Tulis Pernyataan SQL Pemetaan Mapper
Di sini saya menulis metode pemuatan userdao, yaitu membaca pengguna berdasarkan ID. Kode berikut ini setara dengan fungsi Public Load Load (Int ID). Untuk mybatis, ada dua jenis penggantian #{} akan secara otomatis dikutip sesuai dengan jenisnya, seperti jenis string #{name} diganti dengan 'name'. Yang lainnya adalah penggantian $ {}, yang secara langsung diganti dalam format asli dan tidak akan menambahkan hal -hal lain.
<? 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"> <"poperpe =" pezer = "pezer =" PARAMET "PARAM" "IDTY/PARAM" "IDTY/PARAM" " * dari pengguna di mana id =#{id} </select> </mapper>Langkah pertama adalah memperkenalkan file header DTD dan merumuskan aturan untuk file XML
Pilih tag, menunjukkan bahwa saat ini merupakan pernyataan pilih
Atribut ID setara dengan nama fungsi, dirujuk oleh ID
Atribut ParameterType, yang mewakili tipe parameter yang masuk, dapat menentukan tipe dasar atau jenis kustom. Jika itu adalah tipe khusus, metode GET akan secara otomatis dipanggil untuk mendapatkan atributnya.
Properti HasilType, tipe nilai pengembalian, dapat secara langsung menyesuaikan tipe, dan secara otomatis akan memanggil metode yang ditetapkan untuk mengatur parameter kueri dan menggunakan lebih banyak properti dalam artikel selanjutnya.
4. Panggil Peta Mapper
Sebelum menelepon, Anda perlu mengonfigurasi pemetaan di config.xml terlebih dahulu. Perhatikan bahwa XML yang dikonfigurasi di sini adalah jalur file.
<mappers> <mapper resource = "com/model/user.xml"/> </phappers>
Kemudian tulis kelas tes
public static void main (string [] args) {try {inputStream is = resources.getResourceAsstream ("config.xml"); // baca file konfigurasi sqlsessionFactory factory = get sqlSession ucsion = facpory = facply (). session.selectone (user.class.getName ()+". LOAD", 1); // Panggil Sistem Fungsi Muat.out.println (user.getNickName ()); // output nickname session.close (); // tutup sesi} catch (ioException e) {e.printstacktrace (); }} hasil:
5. Kelas Alat SQLSession
Menulis kelas tes seperti yang di atas terlalu merepotkan, jadi saya merangkum sqlsession untuk memfasilitasi penggunaan lapisan DAO
Paket com.util; impor org.apache.ibatis.io.Resources; impor org.apache.ibatis.Session.sqlsession; impor org.apache.ibatis.Session.SQLSESSIONFactory; impor org.apache.ibatis.Session.Session java.io.ioException; impor java.io.inputStream;/*** dibuat oleh NL101 pada 2016/2/23. */kelas publik sessionutil {private static SQLSessionFactory factory = null; static {try {inputStream is = Resources.getResourCeAsstream ("config.xml"); // baca file konfigurasi factory = baru sqlSessionFactoryBuilder (). build (is); // create factory menggunakan file konfigurasi} catch (ioException e) {e.printstacktrace (); }} / ** * Dapatkan sesi * @return * / public static SQLSession getSession () {return factory.opensession (); } / ** * Tutup sesi * @param sesi * / public static void closeSession (sesi sqlSession) {if (session! = Null) session.close (); sesi = null; }}Di atas adalah penggunaan dasar mybatis, dan sekarang mulai merangkum lapisan dao
2. Encapsulate DAO
1.Userdao.java
Public User Load (int ID) Dapatkan pengguna berdasarkan ID
Itu telah ditulis di atas
Tambah boolean publik (pengguna pengguna) Tambahkan pengguna
Kode XML
<!-Tambahkan pengguna-> <masukkan id = "add" parameTerType = "user"> masukkan ke nilai pengguna (null,#{username},#{password},#{nickName},#{type}) </masukkan>Kode Java
/** /*** Tambahkan pengguna* @param pengguna Pengguna yang akan ditambahkan* @return Sukses sejati* /public boolean add (pengguna pengguna) {int isAdd = 0; SQLSession session = sessionutil.getSession (); coba {isAdd = session.insert (user.class.getName ()+". add", user); session.commit (); // kirim} catch (pengecualian e) {session.rollback (); // rolleback jika pengiriman gagal} akhirnya {sessionutil.closesession (session); } System.out.println (isAdd); kembalikan isAdd> 0; } public boolean delete (int id) hapus penggunaKode XML
<!-Hapus pengguna-> <delete id = "delete" parameTerType = "int"> hapus dari pengguna di mana id =#{id} </delete>Kode Java
/ ** * hapus pengguna berdasarkan id * @param id untuk menghapus id pengguna * @return benar -benar sukses */ public boolean delete (int id) {int isDelete = 0; SQLSession session = sessionutil.getSession (); coba {isDelete = session.delete (user.class.getName ()+". hapus", id); session.commit (); } catch (Exception e) {session.rollback (); // gagal pengembalian System.out.println ("Hapus pengguna gagal"); e.printstacktrace (); } akhirnya {sessionutil.closesession (session); } return isDelete> 0; } Pembaruan Boolean Publik (Pengguna Pengguna) Pembaruan PenggunaKode XML
<!-Modifikasi pengguna-> <update id = "update" parameTerType = "user"> update pengguna set username =#{username}, password =#{password}, nickName =#{nickName}, type =#{type} di mana id =#{id} </update </update>Kode Java
/ *** Perbarui pengguna* @param pengguna Pengguna yang akan diperbarui* @return Sukses True*/ Pembaruan Boolean Publik (Pengguna Pengguna) {int isUpdate = 0; SQLSession session = sessionutil.getSession (); coba {isUpdate = session.delete (user.class.getName ()+". update", user); session.commit (); } catch (Exception e) {session.rollback (); // gagal pengembalian System.out.println ("Pembaruan gagal"); e.printstacktrace (); } akhirnya {sessionutil.closesession (session); } return iSupdate> 0; } login pengguna publik (nama pengguna string, kata sandi string) menentukan apakah pengguna adaKode XML
<!-Penilaian Login Pengguna-> <pilih id = "login" parameTerType = "string" resultType = "user"> pilih * dari pengguna di mana username =#{username} </pilih>Kode Java
/ *** Tentukan apakah ada pengguna* @param nama pengguna nama pengguna* @param kata sandi* @return keberadaan pengguna pengembalian tidak ada pengembalian nol*/ login pengguna publik (nama pengguna string, kata sandi string) {user user = null; SQLSession session = sessionutil.getSession (); coba {user = session.selecTone (soapbinding.use.class.getName ()+". Login", nama pengguna); // Saat kata sandi salah, atur pengguna ke null if (! User.getPassword (). Sama (kata sandi)) {user = null; }} akhirnya {sessionutil.closesession (session); } mengembalikan pengguna; } pager publ find (nama string, string sort, string order) pemrosesan pagination Kode XML:
SQL dinamis digunakan di sini. Mengenai SQL dinamis, itu adalah penggunaan tag seperti di mana, jika, pilih, dll. Anda dapat merujuk ke dokumen resmi. Selain itu, di Mybatis, konsep NULL tidak ada. Misalnya, Anda lulus pengguna = null, tetapi saat mengganti, itu diganti dengan string "nol". Jika nilai ini tidak tersedia, itu adalah nol.
<!--Pagination code--> <select id="find" parameterType="Map" resultType="User"> SELECT * from user <if test="name!=null">WHERE (username LIKE #{name} or nickname LIKE #{name})</if> ORDER BY ${sort} ${order} LIMIT #{pageStart},#{pageSize} </select> <!--Total number catatan halaman-> <pilih id = "findCount" parameTerType = "peta" resultType = "int"> pilih count (*) dari pengguna <if test = "name! = null"> di mana (nama pengguna seperti #{name} atau nama panggilan seperti #{name}) </if> </select>Kode Java: Secara keseluruhan, masih didasarkan pada pagination yang dirancang oleh artikel sebelumnya
/*** kueri halaman berdasarkan kondisi yang ditentukan* @param nama Kondisi kueri, null mewakili kondisi sortir sortir tanpa syarat* @param, null mewakili sortir berdasarkan id* @param memesan kondisi sortir, null mewakili pesanan naik* @return*/pagar publik <user> temukan (name string, string order) {int pagesTart = public = pagar = page page (page) {int pagest = puber page = page page. SystemContext.getPageSize (); // halaman ukuran pager <user> pagers = new pager <> (); Peta <String, Object> peta = hashmap baru <> (); if (name! = null &&! name.equals ("")) {name = "%"+name+"%"; maps.put ("name", name); } if (sort == null || sort.equals ("")) {sort = "id"; // disortir berdasarkan id dengan default} if (order == null || order.equals ("")) {order = "asc"; // default} maps.put ("sort", sort); peta.put ("pesanan", pesanan); peta.put ("pagestart", pagestart); peta.put ("halaman", halaman); SQLSession session = sessionutil.getSession (); Daftar <User> data = null; coba {datasas = session.selectList (user.class.getName ()+". find", peta); // dapatkan rekaman pagers.setDatas (data); pagers.setPagesze (halaman); pagers.setpagestart (pagestart); int totalRecord = session.selectone (user.class.getName ()+". findCount", peta); // Dapatkan jumlah total catatan pagers.setTotalRecord (TotalRecord); pagers.setPageIndex (pagestart/pagesze+1); } akhirnya {sessionutil.closesession (session); } mengembalikan halaman; } Struktur proyek saat ini
Pada artikel berikutnya, saya akan menulis berdasarkan umum untuk memfasilitasi penulisan kode. Dan terus mempelajari penggunaan properti mybatis lainnya. Terima kasih atas bacaan Anda.