รู้เบื้องต้นเกี่ยวกับ mybatis
MyBatis เป็นเฟรมเวิร์กเลเยอร์การคงอยู่ที่ยอดเยี่ยมที่รองรับการสืบค้น SQL แบบธรรมดาขั้นตอนที่เก็บไว้และการทำแผนที่ขั้นสูง MyBatis กำจัดการตั้งค่าด้วยตนเองของรหัส JDBC เกือบทั้งหมดและพารามิเตอร์และการค้นหาการห่อหุ้มของชุดผลลัพธ์ MyBatis สามารถใช้ XML อย่างง่ายหรือคำอธิบายประกอบสำหรับการกำหนดค่าและการแมปดั้งเดิมการแมปอินเทอร์เฟซและ pojos ของ Java (วัตถุ Java เก่าธรรมดา) ลงในบันทึกในฐานข้อมูล
1. mybiats foreach tag
Foreach ส่วนใหญ่จะใช้ในการสร้างในสภาพมันสามารถวนซ้ำผ่านคอลเลกชันในงบ SQL แอตทริบิวต์ขององค์ประกอบ foreach ส่วนใหญ่รวมถึงรายการ, ดัชนี, คอลเลกชัน, เปิด, ตัวคั่นและปิด รายการแสดงถึงนามแฝงเมื่อแต่ละองค์ประกอบในคอลเลกชันซ้ำ ดัชนีระบุชื่อเพื่อแสดงตำแหน่งที่การวนซ้ำแต่ละครั้งถึงระหว่างกระบวนการวนซ้ำ Open แสดงถึงสิ่งที่เริ่มต้นด้วยคำสั่งตัวคั่นแสดงว่าสัญลักษณ์ใดที่ใช้เป็นตัวคั่นระหว่างการวนซ้ำแต่ละครั้งและปิดแสดงถึงสิ่งที่จบลงด้วย สิ่งที่สำคัญที่สุดและผิดพลาดมากที่สุดเมื่อใช้ foreach คือแอตทริบิวต์การรวบรวม คุณลักษณะนี้จะต้องระบุ แต่ในกรณีที่แตกต่างกันค่าของแอตทริบิวต์จะแตกต่างกัน มีสามสถานการณ์หลัก:
หากการส่งผ่านเป็นพารามิเตอร์เดียวและประเภทพารามิเตอร์คือรายการค่าแอตทริบิวต์การรวบรวมคือรายการ
หากการส่งผ่านเป็นพารามิเตอร์เดียวและประเภทพารามิเตอร์คืออาร์เรย์ค่าคุณสมบัติของคอลเลกชันคืออาร์เรย์
หากมีพารามิเตอร์หลายตัวผ่านเราจำเป็นต้องห่อหุ้มไว้ในแผนที่
การใช้งานเฉพาะมีดังนี้:
<insert id = "insertBatch" parameterType = "list"> แทรกลงใน tStudent (ชื่อ, อายุ) <foreach collection = "list" item = "item" index = "index" open = "(" close = ")2. mybatis executortype.batch
Executortypes มี 3 ประเภทที่สร้างขึ้นใน MyBatis ค่าเริ่มต้นนั้นง่าย ในโหมดนี้มันจะสร้างคำสั่งการประมวลผลล่วงหน้าใหม่สำหรับการดำเนินการของแต่ละคำสั่งและส่ง SQL ในบรรทัดเดียว ในขณะที่โหมดแบทช์นำคำสั่งที่ประมวลผลไว้ล่วงหน้าและดำเนินการคำสั่งอัปเดตทั้งหมดในแบทช์ เห็นได้ชัดว่าโหมดแบทช์มีปัญหาของตัวเอง ตัวอย่างเช่นเมื่อการดำเนินการแทรกไม่มีวิธีที่จะได้รับ ID ที่รับรู้ด้วยตนเองก่อนที่จะส่งธุรกรรมซึ่งไม่เป็นไปตามข้อกำหนดทางธุรกิจในสถานการณ์ที่แน่นอน
การใช้งานเฉพาะมีดังนี้:
*Method One Spring+MyBatis
// รับ sqlsession // ฉีด sqlsessiontemplate ดั้งเดิมจาก Spring@autoWeverPrivate SQLSessionTemplate SQLSessionTemplate; // รับเซสชันใหม่ที่มีแบทช์ส่งไปยังเท็จโดยอัตโนมัติ SQLSessionTemplate.getSqlSessionFactory (). opensession (executortype.batch, false); // รับ mapperfoomapper = session.getMapper (foomapper.class); ขนาด int = 10,000; ลอง {สำหรับ (int i = 0; i <size; i ++) foo (); foo.setName (string.valueof (System.currentTimeMillis ())); foomapper.insert (foo); ถ้า (i % 1000 == 0 || i == ขนาด - 1) {// // ส่งทุกครั้ง (ข้อยกเว้น e) {// ไม่สามารถส่งข้อมูลที่ส่งกลับมาได้วิธีที่ 2:
เมื่อรวมกับนามแฝง SQL Mapper ทั่วไปควรมีชื่อแพ็คเกจ + ชื่อคลาส
โมฆะสาธารณะ INSERTBATCH (แผนที่ <String, Object> parammap, รายการ <user> รายการ) โยนข้อยกเว้น {// รับเซสชันใหม่ที่มีแบทช์ส่งไปยังเท็จโดยอัตโนมัติ // หากการส่งอัตโนมัติถูกตั้งค่าเป็นจริงจำนวนการส่งไม่สามารถควบคุมได้ SQLSessionTemplate.getSqlSessionFactory (). opensession (executortype.batch, false); ลอง {ถ้า (null! = list || list.size ()> 0) {int lsize = list.size (); สำหรับ (int i = 0, n = list.size (); list.get (i); user.setIndate ((String) parammap.get ("indate")); user.setDatadate ((String) parammap.get ("datadate")); // แหล่งข้อมูล เวลา // session.insert ("com.xx.mapper.usermapper.insert", ผู้ใช้); // session.update ("com.xx.mapper.usermapper.updateByPrimaryKeySelective", _ เอนทิตี); session.insert ("ชื่อแพ็คเกจ {// ส่งด้วยตนเองทุก ๆ 1,000 เซสชัน commit () ไม่สามารถย้อนกลับได้หลังจาก commit; // ทำความสะอาดแคชเพื่อป้องกันการล้นเซสชันล้น clearcache ();}}}} catch (ข้อยกเว้น e) {// ไม่มีข้อมูลที่ส่งกลับสามารถย้อนกลับ ();ข้างต้นเป็นสองวิธีของการแทรกแบทช์ใน mybatis แนะนำให้คุณรู้จักโดยตัวแก้ไข (การแทรกที่มีประสิทธิภาพ) ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!