เมื่อเรียนรู้ไฮเบอร์เนตบรรณาธิการได้สัมผัสกับการแมปต่างๆ การทำแผนที่ใน mybatis ทำงานอย่างไร? ในโพสต์บล็อกนี้วันนี้บรรณาธิการส่วนใหญ่จะแนะนำการทำแผนที่ขั้นสูงใน MyBatis เป็นส่วนใหญ่รวมถึงแบบตัวต่อตัวแบบหนึ่งต่อหลายและหลายต่อหลายคน ฉันหวังว่าเพื่อนที่ต้องการมากขึ้นจะเป็นประโยชน์ ตัวแก้ไขส่วนใหญ่แนะนำรูปแบบข้อมูลผลิตภัณฑ์คำสั่งซื้อแบบสอบถามแบบหนึ่งต่อหนึ่งแบบสอบถามแบบหนึ่งต่อหลายและแบบสอบถามหลายต่อหลายคน
1. สั่งรูปแบบข้อมูลผลิตภัณฑ์
1. สคริปต์การดำเนินการฐานข้อมูลมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> สร้างรายการตาราง (ID int ไม่ใช่ NULL AUTO_INCREMENT, ItemSNAME VARCHAR (32) ไม่ใช่ความคิดเห็นที่เป็นโมฆะ คีย์หลัก (ID)) charset เริ่มต้น = UTF8; / *โครงสร้างตารางสำหรับตาราง `orderdetail` */ สร้างตาราง orderdetail (id int ไม่ใช่ null auto_increment, orders_id int ไม่แสดงความคิดเห็น" รหัสคำสั่งซื้อ 'รายการ item_id int ไม่แสดงความคิดเห็น' รหัสผลิตภัณฑ์ ', รายการ `und null ความคิดเห็น `fk_orderdetail_2` (` items_id`), ข้อ จำกัด `fk_orderdetail_1` คีย์ต่างประเทศ (` order_id`) การอ้างอิง `order '(` id`) ในการลบการดำเนินการใด ๆ charset = utf8; / *โครงสร้างตารางสำหรับตาราง `orders` */ สร้างคำสั่งซื้อตาราง (id int ไม่ใช่ null auto_increment, user_id int ไม่แสดงความคิดเห็น null 'คำสั่งซื้อ', หมายเลข varchar (30) ไม่ใช่ความคิดเห็นที่เป็นโมฆะ ข้อ จำกัด `fk_orders_id` คีย์ต่างประเทศ (` user_id`) อ้างอิง `t_user` (` id`) ในการลบไม่มีการดำเนินการในการอัปเดตไม่มีการดำเนินการ) เริ่มต้น charset = utf8; / *โครงสร้างตารางสำหรับตาราง `t_user` */ สร้างตาราง t_user (id int ไม่ใช่ null auto_increment, ชื่อผู้ใช้ Varchar (32) ไม่ใช่ความคิดเห็น null 'ชื่อผู้ใช้' วันเกิดวันเกิดค่าเริ่มต้นความคิดเห็น </span>
รหัสข้อมูลทดสอบ
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;">/ *ข้อมูลสำหรับตาราง `รายการ ' */ แทรกลงในรายการ (รายการชื่อ, ราคา, รายละเอียด, pic, createTime) ค่า (' เดสก์ท็อป ', 3000.0,' คอมพิวเตอร์นี้มีคุณภาพดีมาก! ('โน๊ตบุ๊ค', 6000.0, 'โน๊ตบุ๊ค', ประสิทธิภาพที่ดี, คุณภาพดี! ', null,' 2015-07-08 13:22:57 '), (' กระเป๋าเป้สะพายหลัง ', 200.0,' กระเป๋าเป้สะพายหลังแบรนด์, ความจุสูงและคุณภาพดี! / *ข้อมูลสำหรับตาราง `orderdetail` */ แทรกลงใน` orderdetail` (`orders_id`,` item_id`, `item_num`) ค่า (1,1,1), (1,2,3), (2,3,4), (3,2,3); / *ข้อมูลสำหรับตาราง `orders` */ แทรกลงใน` orders` (`user_id`,` number`, `createTime`, 'note') ค่า (1, '10,00010', '2015-06-04 13: 22: 35', NULL) (2, '1000012', '2015-07-17 14: 13: 23', NULL), (3, '1000012', '2015-07-16 18: 13: 23', NULL), (4, 1000012 ',' 2015-07-15 19: 13: 23 ' (6, '1000012', '2015-07-13 16: 13: 23', NULL); / *ข้อมูลสำหรับตาราง `ผู้ใช้ ' */ แทรกลงใน` t_user` (`` ชื่อผู้ใช้', 'วันเกิด', 'เพศ', 'ที่อยู่') ค่า ('วังวู', null, '2', null), ('จางซาน', '2014-07-10' Xiaoming ', null,' 1 ',' Zhengzhou, Henan '), (' Chen Xiaoming ', null,' 1 ',' Zhengzhou, Henan '), (' Zhang Sanfeng ', null,' 1 ',' zhengzhou, Henan ') ('Chen Xiaoming', null, '1', 'Zhengzhou, Henan'), ('Wang Wu', Null, Null, Null), ('Xiao A', '2015-06-27', '2', 'beijing') C ',' 2015-06-27 ',' 1 ',' Beijing '), (' Xiao D ',' 2015-06-27 ',' 2 ',' Beijing '); </span>2. แนวคิดการวิเคราะห์แบบจำลองข้อมูล
(1). เนื้อหาข้อมูลที่บันทึกไว้ในแต่ละตาราง: ทำความคุ้นเคยกับเนื้อหาที่บันทึกไว้ในแต่ละตารางในโมดูลซึ่งเทียบเท่ากับกระบวนการของความต้องการระบบการเรียนรู้ (ฟังก์ชั่น);
(2). การตั้งค่าฟิลด์ที่สำคัญสำหรับแต่ละตาราง: ฟิลด์ที่ไม่ว่างเปล่าฟิลด์คีย์ต่างประเทศ;
(3). ความสัมพันธ์ระหว่างตารางและตารางระดับฐานข้อมูล: ความสัมพันธ์ที่สำคัญในต่างประเทศ;
(4). ความสัมพันธ์ทางธุรกิจระหว่างตาราง: เมื่อวิเคราะห์ความสัมพันธ์ทางธุรกิจระหว่างตารางจะต้องอยู่บนพื้นฐานของความสำคัญทางธุรกิจบางอย่างในการวิเคราะห์
3. การวิเคราะห์แนวคิดฐานข้อมูลสำหรับแบบจำลองผลิตภัณฑ์สั่งซื้อดังแสดงในรูปด้านล่าง:
2. แบบสอบถามแบบตัวต่อตัว
2.1. ข้อกำหนด: ข้อมูลการสั่งซื้อแบบสอบถามและข้อมูลผู้ใช้เชื่อมโยง
2.2. การใช้งาน ResultType
2.2.1 คำสั่ง SQL
กำหนดตารางหลักของแบบสอบถาม: ตารางการสั่งซื้อกำหนดตารางการเชื่อมโยงของแบบสอบถามตารางผู้ใช้รหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> SELECT T1.*, T2.USERNAME, T2.SEX, T2.Address จากคำสั่งซื้อ T1, T_USER T2 โดยที่ T1.USER_ID = T2.ID </span>
2.2.2 สร้างเอนทิตีเอนทิตี
ผู้ใช้เอนทิตีผู้ใช้ java รหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> Package Com.mybatis.entity; นำเข้า java.util.date; นำเข้า java.util.list; / ** * @className: ผู้ใช้ * @description: toDo (เอนทิตีของผู้ใช้) * @author ahvari */ ผู้ใช้ระดับสาธารณะ {Id Id ส่วนตัว; // ชื่อชื่อผู้ใช้สตริงส่วนตัว; // เพศส่วนตัวเซ็กส์; // ที่อยู่สตริงส่วนตัว; // วันเกิดวันเกิดวันเกิด; // คำสั่งซื้อที่ผู้ใช้สร้างรายการส่วนตัว <คำสั่ง> คำสั่งซื้อ; // getter และ setter ...... } </span>คำสั่งซื้อเอนทิตีคำสั่ง. java
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> Package Com.mybatis.entity; นำเข้า java.util.date; นำเข้า java.util.list; / *** @className: คำสั่งซื้อ* @description: TODO (เอนทิตีสั่งซื้อ)* @author Ahvari*/ คำสั่งซื้อระดับสาธารณะ {/ ** รหัสคำสั่งซื้อหลักหลัก*/ ID จำนวนเต็มส่วนตัว; / ** สั่งรหัสผู้ใช้*/ ผู้ใช้จำนวนเต็มส่วนตัว; / ** หมายเลขคำสั่งซื้อ*/ หมายเลขสตริงส่วนตัว; / ** เวลาสั่งซื้อ*/ วันที่ส่วนตัว createTime; / ** หมายเหตุ*/ หมายเหตุสตริงส่วนตัว; // ข้อมูลผู้ใช้ผู้ใช้ส่วนตัวผู้ใช้; // รายละเอียดการสั่งซื้อรายการส่วนตัว <OrderDetail> orderDetails; // getter และ setter ...... } </span>เอนทิตีผลิตภัณฑ์: items.java
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> Package Com.mybatis.entity; นำเข้า java.util.date; / *** @className: รายการ* @description: todo (คลาสเอนทิตีผลิตภัณฑ์)* @author ding guohua*/ รายการคลาสสาธารณะ {/ ** ตารางผลิตภัณฑ์รหัสหลักรหัสหลัก*/ รหัสจำนวนเต็มส่วนตัว; / ** ชื่อผลิตภัณฑ์*/ สตริงส่วนตัวรายการชื่อ; / ** ราคาสินค้า*/ ราคาลอยตัวส่วนตัว; / ** คำอธิบายผลิตภัณฑ์*/ รายละเอียดสตริงส่วนตัว; / ** รูปภาพผลิตภัณฑ์*/ รูปภาพสตริงส่วนตัว; / ** วันที่ผลิต*/ วันที่ส่วนตัว createTime; // getter และ setter ...... } </span>สั่งซื้อเอนทิตีรายละเอียด orderdetail.java
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> Package Com.mybatis.entity; / *** @className: orderDetail* @description: todo (รายละเอียดการสั่งซื้อเอนทิตี)* @author ding guohua*/ คลาสสาธารณะ orderdetail {/ ** หลัก, รายละเอียดรายการ ID*/ ID จำนวนเต็มส่วนตัว; / ** id*/ คำสั่งซื้อจำนวนเต็มส่วนตัว; / ** รหัสผลิตภัณฑ์*/ รายการจำนวนเต็มส่วนตัว / ** ปริมาณการซื้อผลิตภัณฑ์*/ รายการจำนวนเต็มส่วนตัว NUM; // ข้อมูลผลิตภัณฑ์ที่สอดคล้องกับรายละเอียดรายการส่วนตัวรายการ; // getter และ setter ...... } </span>สร้างคลาส wrapper เพื่อแมปข้อมูลการสืบค้นทั้งหมดไปยังคลาสนี้ orderscustom.java
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;">/ ** * @className: ordersCustom * @description: todo (คลาสที่ขยายของคำสั่งซื้อซึ่งแผนที่คำสั่งซื้อและการสืบค้นผู้ใช้ แอตทริบิวต์ชื่อผู้ใช้สตริงส่วนตัว; เซ็กซ์สตริงส่วนตัว; ที่อยู่สตริงส่วนตัว // getter และ setter ...... } </span>
2.2.3 สร้าง ordersccustommapper.java รหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;"> Package Com.mybatis.mapper; นำเข้า java.util.list; นำเข้า com.mybatis.entity.orderscustom; / *** @className: ordersmappercustom* @description: todo (ordersmappercustom mapper)* @author ding guohua*/ ส่วนต่อประสานสาธารณะคำสั่งซื้อ {/ ** คำสั่งค้นหา } </span>2.2.4 การสร้าง orderscustommapper.xml นั้นเหมือนกับชื่ออินเตอร์เฟสที่เกี่ยวข้อง ในขณะที่โหลดไฟล์กำหนดค่าผ่านอินเตอร์เฟส Mapper รหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;"> <? xml version = "1.0" encoding = "UTF-8" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-เนมสเปซเนมสเปซฟังก์ชั่นคือการจำแนกการจัดการของ SQL ซึ่งเป็นที่เข้าใจกัน namespace = "com.mybatis.mapper.orderscustommapper"> <!-คำสั่งค้นหา, ข้อมูลผู้ใช้แบบสอบถามเชื่อมโยง-> <select id = "finderDersuser" resultType = "com.mybatis.entity.ordersCustom" t1.user_id = t2.id </select> </mapper> </span>
2.3 การใช้งาน Map ResultsMap
2.3.1 คำสั่ง SQL เหมือนกับข้างต้น
2.3.2 แนวคิดการแมปผลลัพธ์:
ใช้ ResultMap เพื่อแมปข้อมูลการสั่งซื้อในผลลัพธ์การสืบค้นไปยังวัตถุคำสั่งซื้อเพิ่มแอตทริบิวต์ผู้ใช้ในคลาสคำสั่งซื้อและแมปข้อมูลผู้ใช้คิวรีที่เกี่ยวข้องกับแอตทริบิวต์ผู้ใช้ในวัตถุคำสั่งซื้อ (มีการเพิ่มในเอนทิตีคำสั่งซื้อด้านบน)
2.3.3 orderscustommapper.xml
1. กำหนดผลลัพธ์ map รหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;"> <!-กำหนดผลลัพธ์ของคำสั่งแบบสอบถามผู้ใช้ที่เกี่ยวข้อง, แมปผลลัพธ์การสืบค้นทั้งหมดกับ com.mybatis.entity.orders-> <resultmap type = "com.mybatis.entity. ID: ตัวระบุที่ไม่ซ้ำกันในคอลัมน์แบบสอบถามตัวระบุที่ไม่ซ้ำกันในข้อมูลการสั่งซื้อ หากคอลัมน์หลายคอลัมน์เป็นตัวระบุที่ไม่ซ้ำกัน (เช่น: ตารางพจนานุกรมในการออกแบบฐานข้อมูลทั่วไปใช้คีย์หลักร่วม) คอลัมน์หลายคอลัมน์ต้องกำหนดค่า: คอลัมน์การระบุตัวตนที่ไม่ซ้ำสำหรับคุณสมบัติข้อมูลคำสั่งซื้อ: แอตทริบิวต์ที่แมปข้อมูลคำสั่งซื้อโดยไม่ซ้ำกัน column = "orders_id" คุณสมบัติ = "ordersid"/>, คล้ายกับการกำหนดค่าไฟล์การแมปเอนทิตีไฮเบอร์เนต) -> <id column = "id" property = "id"/> <result column = "user_id" คุณสมบัติ = "userId"/> <result column = "number" คุณสมบัติ = "number"/> <result column = "createTime" property = "createTime"/> <result = "note" note = "หมายเหตุ" การเชื่อมโยง: ข้อมูลที่ใช้ในการแมปคุณสมบัติการสืบค้นวัตถุเดียวที่เกี่ยวข้อง: เพื่อแมปข้อมูลผู้ใช้ของคิวรีที่เกี่ยวข้องซึ่งคุณสมบัติในคำสั่งซื้อ-> <การเชื่อมโยงคุณสมบัติ = "ผู้ใช้" javatype = "com.mybatis.entity.User"> <! property = "id"/> <result column = "username" property = "username"/> <result column = "sex" property = "sex"/> <result column = "address" property = "ที่อยู่"
2. คำจำกัดความคำสั่งรหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> <!-คำสั่งค้นหา, ข้อมูลผู้ใช้ที่คิวรี่เชื่อมโยง, ใช้ RESVOMSMAP เพื่อนำไปใช้-> <Select ID = "FINDORDERSUSULLESULTMAP" T2.SUSTMAP t1.user_id = t2.id </select> </span>
3. เพิ่มวิธีการต่อไปนี้ไปยังอินเตอร์เฟส ordercustommapper.java:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;">/ ** การสืบค้นคำสั่งซื้อข้อมูลผู้ใช้ใช้ข้อมูลผู้ใช้ใช้ RESLUTMAP เพื่อใช้งาน*/ รายการสาธารณะ <คำสั่ง> findERSUSERSULTMAP () </span>
4. การทดสอบ Junit ของ ResultSpe และ ResultsMap การใช้งานรหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;"> Package Com.mybatis.test; นำเข้า Java.io.InputStream; นำเข้า java.util.list; นำเข้า org.apache.ibatis.io.resources; นำเข้า org.apache.ibatis.session.sqlsessionfactory; นำเข้า org.apache.ibatis.session.sqlsessionfactorybuilder; นำเข้า org.junit. ก่อน; นำเข้า org.junit.test; นำเข้า com.mybatis.entity.orders; นำเข้า com.mybatis.entity.orderscustom; นำเข้า com.mybatis.mapper.orderscustommapper; Public Class OrdersCustommApperTest {Private SQLSessionFactory SQLSessionFactory; // วิธีนี้คือการดำเนินการ @Before public void setup () โยนข้อยกเว้น {String Resource = "SQLMAPCONFIG.XML"; InputStream InputStream = Resources.getResourceasstream (ทรัพยากร); // สร้าง sqlsessionfcatory sqlsessionfactory = ใหม่ sqlsessionfactorybuilder (). build (inputstream); } // สอบถามคำสั่งซื้อข้อมูลผู้ใช้แบบสอบถามและใช้ ResultType เพื่อใช้การทดสอบ @Test Public Public Void TestFindOrdERSUSER () {SQLSession SQLSESSION = SQLSessionFactory.opensession (); // สร้างพร็อกซีออบเจ็กต์สั่งซื้อ OCTOMPAPPER OC = SQLSESSION.GETMAPPER (OrdersCustommApper.Class); // รายการเมธอด Mapper CALL <derScustom> list = oc.findordersuser (); System.out.println (รายการ); sqlsession.close (); } // สอบถามคำสั่งซื้อข้อมูลผู้ใช้แบบสอบถามและการทดสอบที่ใช้งานโดยใช้ ResultMap @Test Public Public Void TestFindERSUSERSULLESULTMAP () {SQLSESSION SQLSESSION = SQLSessionFactory.Opensession (); // สร้างพร็อกซีออบเจ็กต์คำสั่งซื้อ OC OC = SQLSession.getMapper (ordersCustommapper.class); // รายการเมธอด Mapper Call <sroders> list = oc.findordersuserresultmap (); System.out.println (รายการ); sqlsession.close (); }} </span>5. ResultType และ ResultSmap ใช้การสืบค้นแบบหนึ่งต่อหนึ่ง
ใช้แบบสอบถามแบบหนึ่งต่อหนึ่ง:
A.ResultType: มันค่อนข้างง่ายที่จะนำไปใช้โดยใช้ผลลัพธ์ หากชื่อคอลัมน์แบบสอบถามไม่รวมอยู่ใน POJO คุณจะต้องเพิ่มแอตทริบิวต์ที่เกี่ยวข้องของชื่อคอลัมน์เพื่อทำการแมปให้เสร็จสมบูรณ์
ข. หากไม่มีข้อกำหนดพิเศษสำหรับผลลัพธ์การสืบค้นขอแนะนำให้ใช้ ResultType
C.ResultMap: ผลลัพธ์ที่ได้จะต้องมีการกำหนดแยกต่างหากซึ่งเป็นปัญหาเล็กน้อย หากมีข้อกำหนดพิเศษสำหรับผลลัพธ์การสืบค้นการใช้ ResultMap สามารถทำให้แอตทริบิวต์ของการทำแผนที่การสืบค้นที่เกี่ยวข้องเสร็จสมบูรณ์
D.ResultMap สามารถใช้งานได้อย่างขี้เกียจ, ResultType ไม่สามารถใช้การโหลดขี้เกียจได้
3. แบบสอบถามแบบหนึ่งถึงหลายคน
3.1 ข้อกำหนด: คำสั่งค้นหา (ผู้ใช้ที่เกี่ยวข้อง) และรายละเอียดการสั่งซื้อ;
3.2 เพิ่มคุณสมบัติ <orderdetail> คุณสมบัติ orderdetails ในคลาส order.java (เพิ่มเอนทิตีข้างต้น) ในที่สุดข้อมูลการสั่งซื้อจะถูกแมปเป็นคำสั่งซื้อและรายละเอียดการสั่งซื้อที่สอดคล้องกับคำสั่งซื้อจะถูกแมปเข้ากับคุณสมบัติ orderdetails ในคำสั่งซื้อ
3.3 เพิ่มสิ่งต่อไปนี้ใน orderscustommapper.xml
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> <!-การคิวการค้นหาการค้นหาผู้ใช้และรายละเอียดการสั่งซื้อ-> <select id = "finderDerDorderDetailResultMap" resultmap = "orderDorderDetailResultMap"> select t1. t3.items_id, t3.items_num, t3.orders_id จากคำสั่งซื้อ t1, t_user t2, orderdetail t3 โดยที่ t1.user_id = t2.id และ t3
คำจำกัดความของ resultmap จะถูกเพิ่มไปยัง orderscustommapper.xml
<span style = "Font-Family: Comic Sans MS; Font-Size: 18px;"> <!-ผลลัพธ์สำหรับการสอบถามคำสั่งซื้อ (ผู้ใช้ที่เกี่ยวข้อง) และรายละเอียดการสั่งซื้อ-> <resultmap type = "com.mybatis.Entity.orders" ider-orderdailresultmap ใช้ขยายการสืบทอดอย่ากำหนดค่าการแมปของข้อมูลการสั่งซื้อและข้อมูลผู้ใช้ในนั้น-> <!-ข้อมูลรายละเอียดการสั่งซื้อที่เกี่ยวข้องหนึ่งการสืบค้นสมาคมการสั่งซื้อมีรายละเอียดการสั่งซื้อหลายรายการ คุณต้องใช้คอลเลกชันการทำแผนที่คอลเลกชัน: แผนที่หลายระเบียนที่สอบถามในคุณสมบัติการเชื่อมโยงกับคุณสมบัติการรวบรวมของประเภท: ระบุประเภทของ pojo ในคุณสมบัติคอลเลกชันที่แมป-> <property = "orderdetails" ของ tetype = "com.mybatis.entity.orderdetail"> <! com.mybatis.entity.orderDetail -> <id column = "orderDetail_id" คุณสมบัติ = "id"/> <result column = "items_id" คุณสมบัติ = "itementId"/> <result column = "items_num" คุณสมบัติ = "itemsNum"/>
3.4 เพิ่มวิธีการในคลาสอินเตอร์เฟส ordercustomemapper.java, รหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;">/ ** คำสั่งค้นหา (ผู้ใช้ที่เกี่ยวข้อง) และรายละเอียดการสั่งซื้อ*/ รายการสาธารณะ <OrderDetail> FindERSANDORDERDETAILRESULTMAP (); </span>
3.5 เพิ่มวิธีการทดสอบในคลาสทดสอบ Junit รหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> // ทดสอบคำสั่งค้นหา (ผู้ใช้ที่เกี่ยวข้อง) และรายละเอียดการสั่งซื้อ @Test โมฆะสาธารณะ TestFindOrdOrdOrdOrderDetailResultMap () // สร้างพร็อกซีออบเจ็กต์คำสั่งซื้อ OC OC = SQLSession.getMapper (ordersCustommapper.class); // รายการเมธอด Mapper <orderDetail> list = oc.finderDerDorderDetailResultMap (); System.out.println (รายการ); sqlsession.close (); } </span>
3.6 สรุป
MyBatis ใช้คอลเลกชันของ ResultMap เพื่อแมปหลายระเบียนของแบบสอบถามที่เกี่ยวข้องลงในคุณสมบัติการรวบรวมรายการ การใช้งานโดยใช้ ResultType: รายละเอียดการสั่งซื้อแผนที่เป็น orderdetails ในคำสั่งซื้อซึ่งจะต้องดำเนินการด้วยตัวเองใช้การสำรวจแบบวนซ้ำสองครั้งลบระเบียนที่ซ้ำกันและรายละเอียดการสั่งซื้อใน orderdetails
4. คำถามหลายต่อหลายครั้ง
4.1 ข้อกำหนด: สอบถามผู้ใช้และข้อมูลผลิตภัณฑ์ที่ผู้ใช้ซื้อ
4.2 ไอเดียการทำแผนที่
แมปข้อมูลผู้ใช้ลงในผู้ใช้เพิ่มรายการแอตทริบิวต์รายการคำสั่งซื้อ <dermer> orderlist ในคลาสผู้ใช้เพื่อทำแผนที่คำสั่งซื้อ; เพิ่มรายการคุณลักษณะรายการรายละเอียดการสั่งซื้อ <OrderDetail> orderDetials ในคำสั่งซื้อแผนที่รายละเอียดการสั่งซื้อไปยัง orderDetials; เพิ่มแอตทริบิวต์รายการใน OrderDetail เพื่อแมปรายการที่สอดคล้องกับรายละเอียดการสั่งซื้อในรายการ
4.3 OrdersCustommapper.xml เพิ่มรหัสต่อไปนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> <!-ผลลัพธ์สำหรับการสอบถามข้อมูลผลิตภัณฑ์ที่ผู้ใช้ซื้อ-> <resultMap type = "com.mybatis.entity.User" user "user" property = "username"/> <result column = "sex" property = "sex"/> <result column = "address" property = "address"/> <!-คำสั่งซื้อข้อมูลผู้ใช้สอดคล้องกับคำสั่งซื้อหลายครั้งโดยใช้การทำแผนที่คอลเลกชัน-> <property = "orderlist" ordype = "com.mybatis.entity.orders" property = "userId"/> <result column = "number" คุณสมบัติ = "number"/> <result column = "createTime" คุณสมบัติ = "createTime"/> <result column = "note" property = "note"/> <result column = "note"/> <result column = "note" OFType = "com.mybatis.entity.orderDetail"> <id column = "orderDetail_id" คุณสมบัติ = "id"/> <result column = "items_id" คุณสมบัติ = "itementId"/> <result column = "items_num" property = "ittemsNum/> < column = "itemsName"/> <result column = "itemname"/> <result column = "items" javatype = "com.mybatis.entity.items"> <id column = "items_id" คุณสมบัติ = "id"/> <results = "items_name property = "รายละเอียด"/> <result column = "items_price" คุณสมบัติ = "ราคา"/> </sorcial> </collection> </collection> </resultmap> <!-หากต้องการสอบถามข้อมูลผลิตภัณฑ์ที่ผู้ใช้และผู้ใช้ใช้ resulamap-> <select id = "FinduserAndItemSultMap" t2.sex, t2.address, t3.id orderdetail_id, t3.items_id, t3.items_num, t3.orders_id, t4.itemsname items_name, t4.detail items_detail, t4. price items_price t3.orders_id = t1.id และ t3.items_id = t4.id </select> </span>
4.4 เพิ่มวิธีการต่อไปนี้ใน ordercustommapper.java:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> / ** สอบถามข้อมูลผลิตภัณฑ์ที่ผู้ใช้และผู้ใช้ซื้อ* / รายการสาธารณะ <ผู้ใช้> FindUNANDITEMSRESULTMAP (); </span>
4.5 เพิ่มวิธีการทดสอบในการทดสอบ Junit รหัสมีดังนี้:
<span style = "Font-Family: Comic Sans MS; Font-Size: 18PX;"> // สอบถามข้อมูลของผลิตภัณฑ์ที่ซื้อโดยผู้ใช้และผู้ใช้ @Test Public Void TestFindusERAndItemSresultMap () {SQLSession SQLSession = SQLSession // สร้างพร็อกซีออบเจ็กต์สั่งซื้อ OCTOMPAPPER OC = SQLSESSION.GETMAPPER (OrdersCustommApper.Class); // รายการเมธอดแม็พโทร <ผู้ใช้> list = oc.finduseranditemsresultmap (); System.out.println (รายการ); sqlsession.close (); } </span> 4.6 สรุปผลลัพธ์
ผลการแข่งขัน:
ฟังก์ชั่น: แมปผลลัพธ์การสืบค้นเป็น pojo ตามชื่อคอลัมน์ SQL ชื่อแอตทริบิวต์ชื่อความสอดคล้อง
โอกาส: การแสดงผลทั่วไปของบันทึกโดยละเอียดเช่นเมื่อผู้ใช้ซื้อรายละเอียดผลิตภัณฑ์และแสดงข้อมูลการสืบค้นที่เกี่ยวข้องทั้งหมดในหน้าคุณสามารถใช้ผลลัพธ์โดยตรงเพื่อแมปแต่ละระเบียนลงใน pojo และสำรวจรายการ (pojo ในรายการ) ในหน้า front-end
MAP ผลลัพธ์:
การใช้งาน: การเชื่อมโยงและคอลเลกชันเพื่อให้เสร็จสิ้นการทำแผนที่ขั้นสูงแบบหนึ่งต่อหนึ่งและหนึ่งต่อหลายครั้ง (มีข้อกำหนดการทำแผนที่พิเศษสำหรับผลลัพธ์)
สมาคม:
ฟังก์ชั่น: แมปข้อมูลการสืบค้นที่เกี่ยวข้องลงในวัตถุ POJO
โอกาส: เพื่ออำนวยความสะดวกในการสอบถามข้อมูลที่เกี่ยวข้องคุณสามารถใช้การเชื่อมโยงเพื่อทำแผนที่ข้อมูลคำสั่งซื้อที่เกี่ยวข้องลงในแอตทริบิวต์ POJO ของวัตถุผู้ใช้เช่น: คำสั่งค้นหาและข้อมูลผู้ใช้ที่เกี่ยวข้อง
การใช้ ResultType ไม่สามารถแมปผลลัพธ์การสืบค้นกับแอตทริบิวต์ POJO ของวัตถุ POJO เลือกว่าจะใช้ ResultType หรือผลลัพธ์ตามความต้องการของการสำรวจการค้นหาชุดผลลัพธ์
ของสะสม:
ฟังก์ชั่น: แมปข้อมูลการสืบค้นที่เกี่ยวข้องลงในรายการรวบรวมรายการ
โอกาส: เพื่ออำนวยความสะดวกในการสอบถามข้อมูลการเชื่อมโยงการสำรวจคุณสามารถใช้คอลเลกชันเพื่อแมปข้อมูลการเชื่อมโยงกับรายการรวบรวมรายการ ตัวอย่างเช่น: การสอบถามโมดูลขอบเขตการอนุญาตผู้ใช้และเมนูภายใต้โมดูลคุณสามารถใช้คอลเลกชันเพื่อแมปรายการโมดูลเพื่อแมปคุณลักษณะรายการเมนูของวัตถุโมดูล จุดประสงค์ของสิ่งนี้คือเพื่ออำนวยความสะดวกในการสอบถามการสอบถามชุดผลลัพธ์แบบสอบถาม
หากคุณใช้ ResultType คุณไม่สามารถแมปผลลัพธ์การสืบค้นไปยังรายการรวบรวมรายการ
ข้างต้นคือการทำแผนที่ขั้นสูงใน MyBatis ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!