Foreach ส่วนใหญ่จะใช้ในการสร้างในสภาพมันสามารถวนซ้ำผ่านคอลเลกชันในงบ SQL แอตทริบิวต์ขององค์ประกอบ foreach ส่วนใหญ่รวมถึงรายการ, ดัชนี, คอลเลกชัน, เปิด, ตัวคั่นและปิด รายการแสดงถึงนามแฝงเมื่อแต่ละองค์ประกอบในคอลเลกชันซ้ำ ดัชนีระบุชื่อเพื่อแสดงตำแหน่งที่การวนซ้ำแต่ละครั้งถึงระหว่างกระบวนการวนซ้ำ Open แสดงถึงสิ่งที่เริ่มต้นด้วยคำสั่งตัวคั่นแสดงว่าสัญลักษณ์ใดที่ใช้เป็นตัวคั่นระหว่างการวนซ้ำแต่ละครั้งและปิดแสดงถึงสิ่งที่จบลงด้วย สิ่งที่สำคัญที่สุดและผิดพลาดมากที่สุดเมื่อใช้ foreach คือแอตทริบิวต์การรวบรวม คุณลักษณะนี้จะต้องระบุ แต่ในกรณีที่แตกต่างกันค่าของแอตทริบิวต์จะแตกต่างกัน มีสามสถานการณ์หลัก:
1. หากผ่านในพารามิเตอร์เดียวและประเภทพารามิเตอร์คือรายการค่าแอตทริบิวต์การรวบรวมคือรายการ
2. หากส่งผ่านในพารามิเตอร์เดียวและประเภทพารามิเตอร์คืออาร์เรย์ค่าคุณสมบัติของคอลเลกชันคืออาร์เรย์
3. หากมีพารามิเตอร์หลายพารามิเตอร์ที่ผ่านมาเราต้องห่อหุ้มไว้ในแผนที่ แน่นอนพารามิเตอร์เดียวสามารถห่อหุ้มลงในแผนที่ ในความเป็นจริงถ้าคุณผ่านพารามิเตอร์คุณจะห่อหุ้มมันไว้ในแผนที่ในเต้านม คีย์ของแผนที่คือชื่อพารามิเตอร์ดังนั้นในเวลานี้ค่าแอตทริบิวต์การรวบรวมคือคีย์ของรายการที่ผ่านหรือวัตถุอาร์เรย์ในแผนที่ที่ห่อหุ้มด้วยตัวเอง
มาดูรหัสตัวอย่างสำหรับสามสถานการณ์ข้างต้น:
1. ประเภทของรายการพารามิเตอร์เดียว:
<select id = "DynamicForEachTest" resultType = "blog"> เลือก * จาก t_blog โดยที่ id ใน <foreach collection = "list" index = "index" item = "item" open = "(" separator = "," close = ")">#{รายการ}ค่าของคอลเลกชันด้านบนคือรายการและ Mapper ที่เกี่ยวข้องเป็นเช่นนี้
รายการสาธารณะ <บล็อก> DynamicForEachTest (รายการ <จำนวนจำนวนเต็ม> ID);
รหัสทดสอบ:
@TestPublic Void DynamicForEachTest () {SQLSession Session = util.getSqlSessionFactory (). OpenSession (); BlogMapper BlogMapper = Session.getMapper (BlogMapper.Class); arraylist <integer> (); ids.add (1); ids.add (3); ids.add (6); รายการ <บล็อก> บล็อก = blogmapper.dynamicforeachtest (IDS); สำหรับ (บล็อกบล็อก: บล็อก) System.out.println (บล็อก); session.close ();}2. ประเภทของพารามิเตอร์เดียวอาร์เรย์:
<select id = "DynamicForEach2test" resultType = "blog"> เลือก * จาก t_blog โดยที่ id ใน <foreach collection = "array" index = "index" item = "item" open = "(" separator = "close =") ">#{item}คอลเลกชันด้านบนเป็นอาร์เรย์รหัส Mapper ที่สอดคล้องกัน:
รายการสาธารณะ <บล็อก> DynamicForEach2test (ID int [] ids);
รหัสทดสอบที่เกี่ยวข้อง:
@TestPublic โมฆะ DynamicForEach2Test () {SQLSession Session = UTIL.GetSqlSessionFactory (). OpenSession (); BlogMapper BlogMapper = เซสชัน GetMapper (BlogMapper.class); int [] ids = new int [] {1,3,6,9}; blogmapper.dynamicforeach2test (ids); สำหรับ (บล็อกบล็อก: บล็อก) system.out.println (บล็อก); session.close ();}3. ห่อหุ้มพารามิเตอร์ลงในประเภทของแผนที่ด้วยตัวเอง
<select id = "DynamicForEach3test" resultType = "blog"> เลือก * จาก t_blog โดยที่ชื่อ "%"#{title} "%" และ id ใน <foreach collection = "ids" index = "index" item = "item" open = "(" separator = "," close = ")">#}ค่าของคอลเลกชันด้านบนคือ ID ซึ่งเป็นคีย์ของแผนที่พารามิเตอร์ที่ส่งผ่านและรหัส MAPPER ที่เกี่ยวข้อง:
รายการสาธารณะ <บล็อก> DynamicForEach3Test (แผนที่ <String, Object> Params);
รหัสทดสอบที่เกี่ยวข้อง:
@TestPublic โมฆะ DynamicForEach3Test () {SQLSession Session = UTIL.GETSQLSessionFactory (). OpenSession (); BlogMapper BlogMapper = Session.getMapper (BlogMapper.Class); arraylist <integer> (); ids.add (1); ids.add (2); ids.add (3); ids.add (6); ids.add (7); ids.add (9); แผนที่ <สตริง, วัตถุ> params = new hashmap <string, object> () blogmapper.dynamicforeach3test (params); สำหรับ (บล็อกบล็อก: บล็อก) system.out.println (บล็อก); session.close ();}ข้างต้นเป็นความรู้ที่เกี่ยวข้องเกี่ยวกับคำอธิบายโดยละเอียดของคำสั่ง foreach ของ mybatis ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ!