MyBatis เป็นโครงการโอเพ่นซอร์สของ Apache ในปี 2010 โครงการนี้ถูกย้ายจาก Apache Software Foundation เป็น Google Code และถูกเปลี่ยนชื่อ MyBatis ต่อไปนี้คือการแนะนำการทำแผนที่ขั้นสูง MyBatis, SQL แบบไดนามิกและรับเนื้อหาคีย์หลักที่เพิ่มขึ้นอัตโนมัติ สำหรับรายละเอียดโปรดดูบทความนี้
1. SQL แบบไดนามิก
ฉันเชื่อว่าทุกคนจะประสบปัญหาเสมอเมื่อใช้ mybatis เพื่อใช้งานฐานข้อมูล หากตอนนี้เรามีผู้เขียนรายการเกี่ยวกับผู้เขียนเราจำเป็นต้องสอบถามข้อมูลบล็อกของผู้เขียนที่เกี่ยวข้องในฐานข้อมูลตามข้อมูลผู้เขียนที่มีอยู่ในผู้เขียน จากนั้นวิธีที่ง่ายที่สุดในการคิดคือการสำรวจผู้เขียนและรับข้อมูลที่เกี่ยวข้องเพื่อสอบถามฐานข้อมูล
สำหรับ (int i = 0; i <Authorlist.size (); i ++) {… // รหัสฐานข้อมูลแบบสอบถาม // เลือก * จากบล็อกที่ผู้เขียน =#{ผู้แต่ง, jdbcType = varchar}}}ลองคิดดูถ้าความยาวของผู้เขียนเป็น n เราต้องสอบถามฐานข้อมูล n ครั้ง หากเราใช้วิธีนี้ค่าใช้จ่ายของโปรแกรมไม่เพียง แต่เกี่ยวกับการสืบค้น แต่ยังเกี่ยวกับการใช้อินสแตนซ์การเชื่อมต่อจากพูลการเชื่อมต่อฐานข้อมูลการสร้างการเชื่อมต่อฐานข้อมูลและส่งคืนอินสแตนซ์ฐานข้อมูลไปยังพูลการเชื่อมต่อฐานข้อมูล สมมติว่าการกระทำทั้งสามนี้ใช้เวลาทั้งหมด 0.001 วินาที จากนั้นหากคุณใช้วิธีการสำรวจเพื่อสอบถามมันจะใช้เวลา 0.001N วินาที หากคุณต้องการสอบถาม 1,000 ครั้งมันจะเป็นอีก 1 วินาที สิ่งนี้ทนไม่ได้สำหรับโปรแกรมเมอร์เพราะนี่เป็นเพียงการสืบค้นแบบวงกลมและไม่นับเป็นรหัสธุรกิจอื่น ๆ
แล้วมีวิธีที่ดีกว่านี้ไหม? คำตอบคือใช่หนึ่งในนั้นคือ SQL แบบไดนามิก:
อัปโหลดรหัสก่อนอื่น:
<select id = "DynamicForEachTest" resultType = "com.blog.blog" parameterType = "java.util.list"> เลือก * จากบล็อกที่ผู้เขียนใน <foreach collection = "list" index = "index" item = "รายการ" open = "
TEM แสดงถึงนามแฝงเมื่อแต่ละองค์ประกอบในชุดวนซ้ำ
ดัชนีระบุชื่อเพื่อแสดงตำแหน่งที่การวนซ้ำแต่ละครั้งถึงระหว่างกระบวนการวนซ้ำ
เปิดหมายความว่าคำสั่งเริ่มต้น
ตัวคั่นระบุว่าสัญลักษณ์ใดที่ใช้เป็นตัวคั่นระหว่างการวนซ้ำแต่ละครั้ง
ปิดหมายถึงสิ่งที่สิ้นสุดด้วยเพื่อให้สามารถรับค่าคืนได้โดยใช้รายการ <bolg>
อย่างไรก็ตามคำสั่ง foreach ใน Dynamic SQL ใช้สิ่งที่เป็นจริงที่สุดในคำสั่งแทรกและมักจะใช้ในข้อ
2. การทำแผนที่ขั้นสูง
เมื่อใช้ myBatis ผลลัพธ์ของ refactspe = com.blog.author โดยทั่วไปจะใช้เพื่อรับผลลัพธ์การสืบค้น
หรือใช้ ResultType = java.util.map เพื่อส่งคืนชื่อคอลัมน์ฐานข้อมูลเป็นคีย์และค่าบันทึกเป็นค่า
แต่ในเวลานี้จำเป็นต้องมีผลลัพธ์ที่ได้รับซึ่งช่วยให้ค่าการคืนค่าการรวมกันฟรีเพื่อจัดการกับการสืบค้นที่ซับซ้อนมากขึ้น
หรือเพียงอัปโหลดรหัสก่อน:
SQL:
<select id = "getBlogs" resultMap = "บล็อก" parameterType = "แผนที่"> เลือก A.Authorid, A.uthorname, B.Blogid, b.blognamefrom ผู้เขียน A Light เข้าร่วมบล็อก B บน ผู้เขียน = b. ผู้เขียนที่ AuthorId = #{AuthorId, jdBcType = Integer} </elect>การกำหนดค่า MyBatis:
<resultmap id = "blogs" type = "com.bloh.blog"> <id property = "AuthorId" คอลัมน์ = "AuthorId"> <result property = "AuthorName" คอลัมน์ = "AuthorName"> <collection property = "postslist" OfType = "com.bolg.post"> property = "blogname"/> </resultmap>
คลาสเอนทิตีบล็อก
ชั้นเรียนสาธารณะ Bolg {Private Integer Authorid; String Private String Authorname; รายการส่วนตัว <Post> PostList; // Setter Getter}โพสต์เอนทิตีคลาส
โพสต์คลาสสาธารณะ {Private Integer Blogid; สตริงส่วนตัว Blogname; // setter getter}สิ่งนี้ช่วยให้คุณยอมรับการสืบค้นที่ซับซ้อนด้วยเอนทิตี
ต่อไปนี้เป็นฟังก์ชั่นของแต่ละแอตทริบิวต์:
ฉันจะไม่เข้าไปดูรายละเอียดเกี่ยวกับคุณสมบัติอื่น ๆ และการกำหนดค่าของการสืบค้น mybatis ทั่วไป
ResultSmap ใช้แทน ResultType ซึ่งระบุรูปแบบที่ส่งคืนโดยผลลัพธ์การสืบค้น
ID ในผลลัพธ์มีสองฟังก์ชั่นหลัก:
ดัชนีที่คล้ายกันเพื่อปรับปรุงประสิทธิภาพการสอบถาม
แยกแยะผลลัพธ์ที่แตกต่างกัน
ดังนั้นจึงเป็นการดีที่สุดที่จะไม่ละเว้น ID หากไม่มีคีย์หลักให้ใช้ฟิลด์ที่สามารถแยกความแตกต่างของระเบียนได้โดยไม่ซ้ำกัน
ผลลัพธ์คือชื่อตัวแปรที่กำหนดไว้ในคลาสเอนทิตีและคอลัมน์เป็นชื่อคอลัมน์ของฐานข้อมูล
คอลเลกชันเป็นคอลเลกชันของรายการแผนที่ ฯลฯ
โพสต์ลิสต์เป็นชื่อตัวแปรรายการที่กำหนดไว้ในคลาสเอนทิตีบล็อก
OFType เป็นคลาสเอนทิตีของวัตถุในรายการวัตถุ
3. รับ ID ที่เพิ่มขึ้นด้วยตนเอง:
หากมีสถานการณ์ต่อไปนี้หลังจากแทรกบันทึกฐานข้อมูลคุณต้องการรับคีย์หลักของบันทึกแทรกและใช้รหัสธุรกิจที่ตามมา
จากนั้น MyBatis ยังให้การสนับสนุนที่สอดคล้องกันสำหรับสถานการณ์นี้ (ไม่รองรับการแทรกแบทช์):
MySQL เป็นรหัสที่เพิ่มขึ้นของเสียงที่เพิ่มขึ้น สมมติว่าชื่อฟิลด์ของคีย์หลักที่เพิ่มขึ้นเองคือ ID
<insert id = "แทรก" useGeneratedKeys = "true" keyProperty = "id" parameterType = "ผู้ใช้"> แทรกลงใน <รวม refid = "table_name" /> (ชื่ออายุ) ค่า ( #{ชื่อ}, #{อายุ}) < /insert>มีแอตทริบิวต์มากกว่าสองแอตทริบิวต์มากกว่าการแทรกทั่วไป useGeneratedKeys = "true" ซึ่งหมายความว่าจะส่งคืนรหัสการรับรู้ตนเองเมื่อเปิดใช้งาน
keyProperty = "id" หมายถึงชื่อของคีย์หลักส่งคืน
จากนั้นคุณสามารถใช้คำสั่งต่อไปนี้เพื่อรับในรหัสธุรกิจ:
สมมติว่าคลาสเอนทิตีเป็นผู้ใช้
ผู้ใช้ผู้ใช้ = usermapper.insert (ผู้ใช้);
usernew.getId // เป็น ID ที่ได้รับการรับรองอัตโนมัติหลังจากการแทรก
ในความเป็นจริงคีย์หลักของ MySQL สามารถรับ MySQL ได้โดยเลือก Last_insert_id ();
ดังนั้นจึงมีวิธีอื่นในการเขียน:
<insert id = "แทรก" parameterType = "ผู้ใช้"> <selectKey resultSpe = "int" order = "หลังจาก" keyProperty = "id"> เลือก last_insert_id () เป็น id </selectkey> แทรกลงในชื่อ agevalues ( #{name}มันเป็นสิ่งที่ตรงกันข้ามกับวิธีการรับกุญแจหลักของ MySQL MySQL เป็นตารางที่จัดสรรค่าการเจริญเติบโตของตนเองหลังจากแทรกการดำเนินการในขณะที่ Oracle ได้รับค่าการเจริญเติบโตของตนเองก่อนที่จะทำการแทรก SQL ก่อนที่จะดำเนินการแทรก SQL จะต้องระบุค่าคีย์หลักไว้ในบันทึกที่จะแทรก ดังนั้นคุณต้องได้รับลำดับการเติบโตของตนเองที่ "ก่อน" จากนั้นฉีดลงในแผนที่พารามิเตอร์โดยเลือกคีย์ สมมติว่าการเติบโตของตนเองหรือ ID
<insert id = "แทรก" useGeneratedKeys = "true" keyProperty = "id" parameterType = "xxxx"> <selectkey resultType = "int" order = "ก่อน" keyProperty = "id"> seq_table.nextVal จาก dual </selecte ) </แทรก>
ID นี่คือ ID การเพิ่มขึ้นอัตโนมัติที่ได้รับจาก SelectKey
วิธีการรับสัญญาณเหมือนกับ MySQL เมื่อได้รับคีย์หลักที่เพิ่มขึ้นอัตโนมัติจะเป็นการดีที่สุดที่จะใช้การรับเอนทิตี
ข้างต้นคือการทำแผนที่ขั้นสูง MyBatis, SQL แบบไดนามิกและการได้รับคีย์หลักที่เพิ่มขึ้นด้วยตนเองที่แนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!