MyBatis เป็นเฟรมเวิร์กเลเยอร์การคงอยู่ที่ยอดเยี่ยมที่รองรับการสืบค้น SQL แบบธรรมดาขั้นตอนที่เก็บไว้และการทำแผนที่ขั้นสูง MyBatis กำจัดการตั้งค่าด้วยตนเองของรหัส JDBC เกือบทั้งหมดและพารามิเตอร์และการค้นหาการห่อหุ้มของชุดผลลัพธ์ MyBatis สามารถใช้ XML อย่างง่ายหรือคำอธิบายประกอบสำหรับการกำหนดค่าและการแมปดั้งเดิมการแมปอินเทอร์เฟซและ pojos ของ Java (วัตถุ Java เก่าธรรมดา) ลงในบันทึกในฐานข้อมูล
ตอนนี้ MyBatis กำลังเป็นที่นิยมมากขึ้นทุกคนรู้ข้อได้เปรียบของมันดังนั้นฉันจะไม่พูดอะไรมากแค่พูดถึงประเด็นสำคัญ
MyBatis มีฟังก์ชั่น SQL แบบไดนามิก เราสามารถใช้ <ถ้า> <เมื่อ> <โดยที่> <อย่างอื่น> <foreach> และอื่น ๆ เพื่อให้เราสามารถเขียน SQL แบบไดนามิกที่สร้างขึ้นตามเงื่อนไข อย่างไรก็ตามในตอนกลางมีความเข้าใจผิดเล็กน้อยของแท็ก <if> ที่เรามักจะใช้ซึ่งจะล้มลงถ้าเราบังเอิญ ให้ฉันยกตัวอย่างปกติ:
<select id = "FindActiveBlogWithTitLeLike" พารามิเตอร์ ณ เวลา = "blog" resultType = "blog"> เลือก * จากบล็อกโดยที่ state = 'active' <ถ้า test = "title! = null"> และชื่อเช่น #{title} </if> </select>ในตัวอย่างข้างต้นเมื่อชื่อไม่เท่ากับ NULL เงื่อนไขในแท็ก <fife> จะถูกประกบกันเพื่อให้คำสั่ง SQL เป็นแบบไดนามิก
แต่เมื่อเราตัดสินเงื่อนไขทั้งหมดคุณเขียนด้วยวิธีนี้:
<select id = "findActiveBlogWithTitLeLike" parameterType = "blog" resultType = "blog"> เลือก * จากบล็อกที่ <ถ้า test = "userId! = null"> state = 'active' </if> <ถ้า test = "tite! = null"
ไม่มีปัญหาใช่ไหม อย่างน้อยก็เป็นวิธีที่ดีอย่างน้อยก็สามารถสร้าง SQL ได้ตามปกติ
อย่างไรก็ตามฉันไม่รู้ว่าคุณสังเกตเห็นว่าเมื่อเงื่อนไขทั้งหมดเป็นโมฆะจะเกิดอะไรขึ้น
เลือก * จากบล็อกที่
คุณเคยเห็นไหม SQL ดังกล่าวสามารถดำเนินการได้สำเร็จหรือไม่?
คำตอบคือแน่นอน
แล้วฉันควรทำอย่างไร? จากนั้นโปรดจำไว้ว่าเมื่อคุณเขียน SQL แบบไดนามิกก่อนอื่นให้พิจารณาว่าเงื่อนไขทั้งหมดจะเกิดขึ้นหรือไม่หากเงื่อนไขทั้งหมดไม่เป็นความจริงหรือไม่และจะมีเพียงอย่างเดียว แต่ไม่มีเงื่อนไข จากนั้นสิ่งที่คุณต้องทำคือเพิ่มแท็ก <โดยที่> เพื่อห่อเงื่อนไขทั้งหมด
<select id = "FindActiveBlogWithTitLeLike" parameterType = "blog" resultType = "blog"> เลือก * จากบล็อก <โดยที่> <ถ้า test = "userId! = null"> state = 'active' </if> <ถ้า test = "tite! = null"
ด้วยวิธีนี้เมื่อเงื่อนไขทั้งหมดไม่เป็นความจริงจะไม่ถูกสะกดออกมา
ในเวลานี้เพื่อนอัจฉริยะค้นพบว่าหากเงื่อนไขแรกไม่เป็นความจริงและเงื่อนไขที่สองเป็นจริง SQL จะกลายเป็นเช่นนี้หรือไม่?
เลือก * จากบล็อกที่ชื่อเรื่องเช่น #{title}ไม่ต้องกังวลเมื่อคุณใช้แท็ก <fife> เพื่อล้อมรอบเงื่อนไขมันจะลบออกโดยอัตโนมัติและ
ด้านบนเป็นกับดักขนาดเล็กของการใช้แท็ก SQL แบบไดนามิกโดยตัวแก้ไขเพื่อแนะนำคุณโดย MyBatis ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!