ในบทความนี้เราจะได้เรียนรู้เกี่ยวกับการใช้งานและกระบวนการเรียกใช้ MyBatis เรียกขั้นตอนที่เก็บไว้ ก่อนอื่นเราสร้างขั้นตอนที่เก็บไว้อย่างง่าย
ตัวคั่น $ สร้างโพรซีเดอร์ mybatis.ges_user_count (ในอายุ int, out user_count int) เริ่มเลือกจำนวน (*) จากผู้ใช้ที่ users.age = อายุเป็น user_count; สิ้นสุด $
ความหมายของขั้นตอนที่เก็บไว้นี้ค่อนข้างง่ายซึ่งก็คือการเข้าสู่อายุจากนั้นเรียกใช้การเลือกจำนวน (*) จากผู้ใช้ที่ผู้ใช้ age = อายุเป็น user_count; มันค่อนข้างง่ายที่จะได้รับจำนวนคนที่มีอายุเท่ากับอายุเพื่อกำหนดค่าให้กับ user_count
ถัดไปคือการโทรของขั้นตอนที่เก็บไว้ ดำเนินการคำสั่งต่อไปนี้เพื่อดำเนินการโทรของขั้นตอนที่เก็บไว้
ต่อไปลองมาดูกันว่าขั้นตอนที่จัดเก็บเรียกใช้โดยใช้ mybatis
usermapper.xml เพิ่มการกำหนดค่าการโทรขั้นตอนที่เก็บไว้:
<select id = "count" retementType = "callable" parameterMap = "getUserCountMap"> โทร mybatis.ges_user_count (?,?) </select>
ฟังก์ชั่นหลัก:
คลาสสาธารณะ Learn1Main {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// mybatis การกำหนดค่าไฟล์สตริงทรัพยากร = "เรียนรู้/mybatis-config.xml"; // ใช้คลาสโหลดเดอร์เพื่อโหลดไฟล์การกำหนดค่า mybatis (ยังโหลดไฟล์การแมปที่เกี่ยวข้อง) inputstream คือ = learn1main.class.getClassLoader (). getResourceasstream (ทรัพยากร); // สร้างโรงงานของ sqlsessionsessionfactory sessionfactory = ใหม่ sqlsessionfactorybuilder (). build (IS); SQLSession Session = SessionFactory.opensession (); แผนที่ <สตริง, จำนวนเต็ม> parameterMap = new hashmap <string, integer> (); parametermap.put ("อายุ", 12); ParameterMap.put ("user_count", -1); session.selectone ("com.tianjunwei.learn.learn1.entity.user.count", parametermap); ผลลัพธ์จำนวนเต็ม = parametermap.get ("user_count"); System.out.println (ผลลัพธ์); -ผลการทำงาน:
กระบวนการดำเนินการขั้นสุดท้ายอยู่ใน defaultresultsethandler ยังคงมีความแตกต่างระหว่างการเรียก SQL สามัญและขั้นตอนที่เก็บไว้ การดำเนินการของคำสั่ง SQL ใช้ callablestatement
// // จัดการพารามิเตอร์เอาท์พุท // // เรียกขั้นตอนที่เก็บไว้เพื่อส่งคืนผลลัพธ์ใส่ค่าผลลัพธ์ในพารามิเตอร์ @Override โมฆะโมฆะ handleoutputParameters (callablestatement CS) พ่น SQLException metaobject metaparam สุดท้าย = configuration.newMetaObject (parameterObject); รายการสุดท้าย <parameterMapping> parametermappings = boundSql.getParameterMappings (); /loop สำหรับแต่ละพารามิเตอร์สำหรับ (int i = 0; i <parametermappings.size (); i ++) {parametermapping สุดท้าย parametermapping = parametermappings.get (i); // ตัดสินรูปแบบของพารามิเตอร์ถ้า (parametermapping.getMode () == parameterMode.out || parameterMapping.getMode () == parameterMode.inout) {ถ้า (resultet.class.class.equals (parameterMapping.getJavatype ())) Metaparam); } else {final typeHandler <?> typeHandler = parameterMapping.getTypeHandler (); metaparam.setValue (parametermapping.getProperty (), typeHandler.getResult (CS, i + 1)); }}}} โมฆะส่วนตัว handlerefcursoroutputParameter (ผลลัพธ์ RS, parametermapping parametermapping, metaobject metaparam) พ่น sqlexception {ลอง {สตริงสุดท้ายผลลัพธ์ mapid = parametermapping.getResultMapid (); ผลลัพธ์สุดท้ายผลลัพธ์ map = configuration.getResultMap (resultmapid); defaultresulthandler สุดท้าย resulthandler = ใหม่ defaultresulthandler (ObjectFactory); ResultsEtWrapper RSW = ใหม่ ResultsEtWrapper (RS, การกำหนดค่า); HandlerowValues (RSW, ResultMap, Resulthandler, Rowbounds ใหม่ (), Null); Metaparam.setValue (Parametermapping.getProperty (), resulthandler.getResultlist ()); } ในที่สุด {// ปัญหา #228 (ปิดผลลัพธ์) CloserEsultset (RS); -ข้างต้นคือกระบวนการโทรและกระบวนการดำเนินการที่เก็บไว้ของการวิเคราะห์ซอร์สโค้ด MyBatis แนะนำให้คุณรู้จักโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!