Dalam artikel ini, kita akan belajar tentang penggunaan dan proses proses panggilan mybatis yang tersimpan. Pertama, kami membuat prosedur tersimpan sederhana
Delimiter $ CREATE PROSEDUR MYBATIS.GES_USER_COUNT (dalam usia int, out user_count int) Mulai pilih Count (*) dari pengguna di mana pengguna.age = usia ke user_count; Akhir $
Arti dari prosedur yang tersimpan ini sebenarnya relatif sederhana, yaitu untuk memasuki usia dan kemudian menjalankan hitungan pilih (*) dari pengguna di mana pengguna.age = usia ke user_count; Relatif mudah untuk mendapatkan jumlah orang dengan usia yang sama dengan usia untuk menetapkan nilai ke user_count.
Berikutnya adalah panggilan prosedur tersimpan. Jalankan perintah berikut untuk menyelesaikan panggilan prosedur tersimpan.
Selanjutnya, mari kita lihat bagaimana prosedur tersimpan dipanggil menggunakan mybatis.
Usermapper.xml Menambahkan Konfigurasi Panggilan Prosedur Tersimpan:
<Pilih id = "hitung" pernyataantype = "callable" parameterMap = "getUserCountMap"> hubungi mybatis.ges_user_count (?,?) </pilih>
Fungsi utama:
kelas publik learn1main {public static void main (string [] args) {// mybatis configuration file string resource = "learn/mybatis-config.xml"; // Gunakan class loader untuk memuat file konfigurasi mybatis (juga memuat file pemetaan terkait) inputStream adalah = learn1main.class.getClassLoader (). GetResourceAsstream (sumber daya); // Bangun pabrik SQLSessionSessionFactory sessionFactory = SQLSessionFactoryBuilder () baru baru; SQLSession session = sessionfactory.opensession (); Peta <string, integer> parameterMap = hashmap baru <string, integer> (); parameterMap.put ("usia", 12); parameterMap.put ("user_count", -1); session.selectone ("com.tianjunwei.learn.learn1.entity.user.count", parameterMap); Integer hasil = parameterMap.get ("user_count"); System.out.println (hasil); }}Hasil Menjalankan:
Proses eksekusi akhir adalah di defaultresultsetHandler. Masih ada perbedaan antara memanggil SQL biasa dan prosedur tersimpan. Eksekusi pernyataan SQL menggunakan callablestatement.
// // menangani parameter output // // panggil prosedur tersimpan untuk mengembalikan hasilnya, masukkan nilai hasil dalam parameter @Override void public handleOutputParameters (callablestatement cs) melempar sqlexception {final objek parameterObject = parameterHandler.getParameterObject (); final metaObject metaparam = configuration.newMetaObject (parameterObject); Daftar Akhir <Parametermapping> parameterMappings = BoundSQL.GetParametermappings (); /Loop untuk setiap parameter untuk (int i = 0; i <parametermappings.size (); i ++) {parametermapping final parametermapping = parametermappings.get (i); //Judge the pattern of the parameter if (parameterMapping.getMode() == ParameterMode.OUT || parameterMapping.getMode() == ParameterMode.INOUT) { if (ResultSet.class.equals(parameterMapping.getJavaType())) { handleRefCursorOutputParameter((ResultSet) cs.getObject(i + 1), parameterMapping, metaparam); } else {final typeHandler <?> typeHandler = parametermapping.gettypehandler (); metaparam.setValue (parametermapping.getProperty (), typeHandler.getResult (cs, i + 1)); }}}} private void handleRefCursorOutputParameter private, parametermapping parametermapping, metaObject metaparam) melempar sqlexception {coba {final string resultMapid = parametermapping.getResultMapid (); final resultMap resultMap = configuration.getResultMap (resultMapId); final defaultresulthandler resulthandler = baru defaultresulthandler (objectFactory); Hasil Akhir RSW RSW = Hasil Baru (RS, Konfigurasi); HandlerowValues (RSW, RACKMAP, RESULTHANDLER, ROWBOUNDS BARU (), NULL); metaparam.setValue (parametermapping.getProperty (), resulthandler.getResultList ()); } akhirnya {// masalah #228 (tutup hasil) ClosereSultSet (RS); }}Di atas adalah proses panggilan prosedur tersimpan dan operasi analisis kode sumber mybatis 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!