ว่ากันว่ามันเป็นประโยชน์ที่ดีที่สุดไม่ใช่การเล่นตลก แต่หลายคนไม่เข้าใจว่าทำไมพวกเขาถึงใช้ปลั๊กอินนี้ การใช้ SQL โดยการเขียนด้วยลายมือและการแบ่งหน้าของ SQL ...
ดังนั้นฉันจึงเขียนตัวอย่างเป็นพิเศษเพื่ออธิบายว่าทำไมมันถึงดีที่สุด
สมมติว่าเราได้เขียนอินเทอร์เฟซ Mapper และ XML ดังนี้:
อินเตอร์เฟสสาธารณะ sysloginlogmapper { / ** * สอบถามบันทึกการเข้าสู่ระบบตามเงื่อนไขการสืบค้น * @param logip * @param ชื่อผู้ใช้ * @param logindate * @param exitdate * @return * / รายการ <sysloginlog> findsysloginlog (@param @Param ("logIndate") สตริง logIndate, @Param ("exitDate") สตริงออก ExitDate, @Param ("LOGERR") สตริง LOGERR); - <? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" namespace = "com.easternie.sys.dao.sysloginlogmapper"> <select id = "findsysloginlog" resultType = "com.easternie.sys.vo.model.sysloginlog"> select * จาก sys_login_loga b บน a.userid = b.userid </if> <โดยที่> <ถ้า test = "logip! = null และ logip! = ''"> a.logip เช่น '%' ||#{logip} || '%' </ถ้า> <ถ้า test = "ผู้ใช้! '%' ||#{ชื่อผู้ใช้} || '%') </ถ้า> <ถ้าทดสอบ = "logIndate! = null และ logIndate! = '' '> และ to_date (substr (a.logindate, 0,10),' yyyy-mm-dd ') = to_date (#{logindate} TEST = "ExitDate! = NULL และ EXITDATE! = ''"> และ TO_DATE (SUBSTR (A.ExitDate, 0,10), 'yyyy-mm-dd') = to_date (#{exitDate}, 'yyyy-mm-dd') '%' ||#{logerr} || '%' </if> </where> order โดย logid desc </select> </mapper>แม้ว่ามันจะเป็นตัวอย่างง่ายๆ XML ที่นี่ไม่ง่ายเลย
หากคุณมีวิธีการ mybatis สำเร็จรูปเช่นข้างต้นแล้วและฉันต้องการแยกแยะแบบสอบถามนี้ตอนนี้ฉันควรทำอย่างไร?
หากเป็น SQL ที่เขียนด้วยลายมือฉันต้องเพิ่มสองอินเทอร์เฟซหนึ่งการสืบค้นการนับรวมและอื่น ๆ ที่เปลี่ยนเป็นการปนเปื้อน ดูเหมือนจะไม่ยากที่จะคัดลอกและวางใน XML จากนั้นเปลี่ยนคำสั่ง คุณทำสิ่งนี้หรือไม่?
หากใช้ปลั๊กอินนี้ฉันต้องทำอย่างไร? - -
สำหรับวิธีการเหล่านี้ที่ MyBatis เขียนไว้ฉันไม่จำเป็นต้องเปลี่ยนแปลงอะไรเลย
แต่อาจต้องย้ายเลเยอร์บริการ ตัวอย่างเฉพาะด้านบน ดูรหัสการโทรเลเยอร์บริการด้านล่าง
รหัสเมื่อไม่จำเป็นต้องใช้การเพจ:
รายการสาธารณะ <sysloginlog> findsysloginlog (String loginip, String username, String logIndate, String exitDate, String logerr) พ่น BusinessException {return sysloginlogmapper.findsysloginlog - รหัสหลังจากเพิ่มฟังก์ชั่น Paging:
pagehelper.page.page <SyslogInLog> findSySlogInLog (สตริงล็อกอิน, สตริงชื่อผู้ใช้, สตริง logIndate, สตริงออกจากระบบ, สตริง logerr, int pagenumber, หน้า int) โยน BusinessException sysloginlogmapper.findsysloginlog (loginiP, ชื่อผู้ใช้, logindate, exitdate, logerr); ส่งคืน pagehelper.endpage (); -
ในการเปรียบเทียบ:
ค่าส่งคืนได้เปลี่ยนจากรายการ <SysloginLog> เป็น pageHelper.Page <SysloginLog>
มีการเพิ่มพารามิเตอร์สองพารามิเตอร์ Pagenumber และ Pagesize
จากนั้นในรหัสกระบวนการจะเรียกว่าก่อน
PageHelper.StartPage (pagenumber, pagesize);
StartPage บอกผู้สกัดกั้นว่าฉันจะเริ่มต้นเพจ พารามิเตอร์เพจนั้นเป็นทั้งสอง
จากนั้นเรียกรหัส MyBatis ดั้งเดิม:
sysloginlogmapper.findsysloginlog (loginiP, ชื่อผู้ใช้, logindate, exitdate, logerr);
มันแปลกหรือไม่ที่ไม่มีค่าส่งคืนที่นี่? ในความเป็นจริง PageHelper ได้รับค่าส่งคืนโดยอัตโนมัติ สามารถเรียกคืนค่าคืนได้ผ่านรหัสต่อไปนี้:
PageHelper.endPage ();
ในเวลาเดียวกัน Endpage บอกกับ Interceptor ว่าฉันได้สิ้นสุดการเพจแล้วฉันไม่ต้องการคุณอีกต่อไป
คุณคิดว่ารหัสดังกล่าวเป็นเรื่องง่ายหรือ SQL ที่เขียนด้วยลายมือนั้นง่ายหรือไม่?
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น