นักพัฒนาส่วนใหญ่ที่ใช้ mybatis จะประสบปัญหาซึ่งก็คือการเขียน SQL จำนวนมากในไฟล์ XML นอกจากตรรกะธุรกิจพิเศษ SQL แล้วยังมี SQL จำนวนมากที่มีโครงสร้างที่คล้ายกัน ยิ่งไปกว่านั้นเมื่อโครงสร้างตารางฐานข้อมูลเปลี่ยนแปลงไปต้องมีการเปลี่ยนแปลงคลาส SQL ที่สอดคล้องกันทั้งหมดและคลาสเอนทิตี ผลกระทบของปริมาณงานและประสิทธิภาพนี้อาจเป็นอุปสรรคระหว่างการเพิ่มการลบการแก้ไขและการตรวจสอบโปรแกรมเมอร์และโปรแกรมเมอร์จริง ในเวลานี้ผู้ทำแผนที่ทั่วไปเข้ามาเป็น ...
Mapper Universal คืออะไร
General Mapper เป็นปลั๊กอินตาม mybatis เพื่อแก้ปัญหาการเพิ่มการลบการแก้ไขและการค้นหาตารางเดียว นักพัฒนาไม่จำเป็นต้องเขียน SQL หรือเพิ่มวิธีการใน DAO ตราบใดที่พวกเขาเขียนคลาสเอนทิตีได้ดีพวกเขาสามารถรองรับวิธีการที่สอดคล้องกันในการเพิ่มการลบการแก้ไขและการค้นหา
วิธีใช้
นำ MySQL เป็นตัวอย่างสมมติว่ามีตารางดังกล่าว:
สร้างตาราง `test_table` (` id` bigint (20) ไม่ใช่ null auto_increment, `name` varchar (255) ค่าเริ่มต้น '',` create_time 'datetime default Tureat null, `create_user_id` varchar (32) ค่าเริ่มต้น` update_time int (8) null เริ่มต้น, คีย์หลัก (`id`)) เครื่องยนต์ = innoDB auto_increment = 1 charset เริ่มต้น = utf8;
คีย์หลักคือ ID ซึ่งเพิ่มขึ้นด้วยตัวเอง นี่คือตารางเป็นตัวอย่างในการแนะนำวิธีการใช้สากลแม็พ
การพึ่งพา maven
<!-Mapper ทั่วไป-> <การพึ่งพา> <roupId> tk.mybatis </groupId> <ratifactid> Mapper </artifactid> <version> 3.3.9 </version>
การกำหนดค่า SpringMVC
<!-Mapper ทั่วไป-> <beanclass = "tk.mybatis.spring.mapper.mapperscannerconfigurer"> <portsname = "basepackage" value = "cn.com.bluemoon.bd.service.svice.svide.dao"/>> mappers = tk.mybatis.mapper.common.mapper </value> </property> </ebean>
โปรดทราบว่า tk.mybatis.spring.mapper.MapperScannerConfigure ใช้ที่นี่เพื่อแทนที่ mybatis org.mybatis.spring.mapper.MapperScannerConfigurer
พารามิเตอร์พร้อมใช้งาน:
ในกรณีส่วนใหญ่พารามิเตอร์เหล่านี้จะไม่ถูกใช้และคุณสามารถศึกษาด้วยตนเองหากคุณมีสถานการณ์พิเศษ
วิธีการเขียนเอนทิตี
โปรดจำไว้ว่าหลักการหนึ่ง: จำนวนฟิลด์ในคลาสเอนทิตี> = จำนวนฟิลด์ที่ต้องดำเนินการในตารางฐานข้อมูล โดยค่าเริ่มต้นฟิลด์ทั้งหมดในคลาสเอนทิตีจะดำเนินการเป็นฟิลด์ในตารางและหากมีฟิลด์เพิ่มเติมต้องเพิ่มคำอธิบายประกอบ @Transient
@Table (name = "test_table") คลาสสาธารณะ testTableVoimplements serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUID = 1L; @ID @GeneratedValue (generator = "JDBC") ID ยาวส่วนตัว; @Transient Private String userId; ชื่อสตริงส่วนตัว; การประทับเวลาส่วนตัว createTime; สตริงส่วนตัว createUserid; การประทับเวลาส่วนตัวอัปเดต; updateUserId สตริงส่วนตัว; Isdelete จำนวนเต็มส่วนตัว // omit get, set ... }ภาพประกอบ:
วิธีการเขียน dao
ในการเขียน MyBatis แบบดั้งเดิมอินเทอร์เฟซ DAO จะต้องเชื่อมโยงกับไฟล์ Mapper นั่นคือ SQL จะต้องเขียนเพื่อใช้วิธีการในอินเทอร์เฟซ DAO โดยทั่วไป Mapper, DAO เพียงแค่ต้องสืบทอดอินเทอร์เฟซทั่วไปเพื่อให้มีวิธีการที่หลากหลาย:
จะต้องระบุการสืบทอด Mapper ทั่วไป
อินเทอร์เฟซสาธารณะ testtabledaoextends Mapper <TestTableVo> {}เมื่อคุณสืบทอด Mapper แล้ว Mapper ที่สืบทอดมามีวิธีการทั่วไปทั้งหมดของ Mapper:
เลือก
วิธีการ: รายการ <t> เลือก (t Record);
หมายเหตุ: แบบสอบถามตามค่าแอตทริบิวต์ในเอนทิตีและใช้สัญญาณเท่ากันสำหรับเงื่อนไขการสืบค้น
วิธีการ: T SelectByPrimaryKey (คีย์วัตถุ);
หมายเหตุ: แบบสอบถามขึ้นอยู่กับฟิลด์คีย์หลัก พารามิเตอร์วิธีการจะต้องมีแอตทริบิวต์คีย์หลักที่สมบูรณ์ เงื่อนไขการสืบค้นใช้สัญญาณเท่ากัน
วิธีการ: รายการ <t> selectall ();
หมายเหตุ: การสืบค้นผลลัพธ์ทั้งหมดวิธีการเลือก (NULL) สามารถบรรลุเอฟเฟกต์เดียวกัน
วิธีการ: T SelectOne (T Record);
หมายเหตุ: การสืบค้นตามคุณสมบัติในเอนทิตีจะมีค่าส่งคืนเพียงหนึ่งค่าเท่านั้นและผลลัพธ์หลายรายการจะถูกโยนลงไป เงื่อนไขการสืบค้นใช้สัญญาณเท่ากัน
วิธีการ: int selectcount (t Record);
หมายเหตุ: สอบถามจำนวนแอตทริบิวต์ทั้งหมดในเอนทิตีและใช้เครื่องหมายเท่ากันสำหรับเงื่อนไขการสืบค้น
แทรก
วิธีการ: int insert (t Record);
หมายเหตุ: บันทึกเอนทิตีแอตทริบิวต์ NULL จะถูกบันทึกและค่าเริ่มต้นฐานข้อมูลจะไม่ถูกใช้
วิธีการ: int insertselective (t Record);
หมายเหตุ: บันทึกเอนทิตีแอตทริบิวต์ NULL จะไม่ถูกบันทึกและค่าเริ่มต้นฐานข้อมูลจะถูกใช้
อัปเดต
วิธีการ: IntupterpyByPrimaryKey (T Record);
หมายเหตุ: อัปเดตฟิลด์ทั้งหมดของเอนทิตีตามคีย์หลักค่า NULL จะได้รับการอัปเดต
วิธีการ: IntupterbyPrimaryKeySelective (T Record);
คำอธิบาย: อัปเดตค่าที่แอตทริบิวต์ไม่เป็นโมฆะตามคีย์หลัก
ลบ
วิธีการ: int delete (t Record);
หมายเหตุ: ลบตามแอตทริบิวต์เอนทิตีเป็นเงื่อนไขใช้สัญญาณเท่ากันสำหรับเงื่อนไขการสืบค้น
วิธีการ: int deleteByPrimaryKey (คีย์วัตถุ);
หมายเหตุ: ลบตามฟิลด์คีย์หลักพารามิเตอร์เมธอดจะต้องมีแอตทริบิวต์คีย์หลักที่สมบูรณ์
ตัวอย่างวิธีการ
วิธีการ: รายการ <t> selectByExample (ตัวอย่างวัตถุ);
Description: Query ตามเงื่อนไขตัวอย่าง
จุดสำคัญ: แบบสอบถามนี้รองรับคอลัมน์การสืบค้นผ่านคลาสตัวอย่างและระบุคอลัมน์แบบสอบถามผ่านวิธี SelectProperties
วิธีการ: int selectCountByExample (ตัวอย่างวัตถุ);
คำอธิบาย: สอบถามหมายเลขทั้งหมดตามเงื่อนไขตัวอย่าง
วิธีการ: intupertuptebyexample (@param ("บันทึก") t Record, @param ("ตัวอย่าง") ตัวอย่างวัตถุ);
คำอธิบาย: อัปเดตคุณสมบัติทั้งหมดที่มีอยู่ในบันทึกเอนทิตีตามเงื่อนไขตัวอย่างและค่า NULL จะได้รับการปรับปรุง
วิธีการ: intupterbyExamplesElective (@param ("บันทึก") t Record, @param ("ตัวอย่าง") ตัวอย่างวัตถุ);
คำอธิบาย: การอัปเดตบันทึกเอนทิตีตามเงื่อนไขตัวอย่างมีค่าคุณสมบัติที่ไม่เป็นโมฆะ
วิธีการ: int deleteByExample (ตัวอย่างวัตถุ);
คำอธิบาย: ลบข้อมูลตามเงื่อนไขตัวอย่าง
ใช้ในรหัส
ฉีด DAO ในการให้บริการและพร้อมใช้งาน
@autowiredPrivate testtabledao testtabledao;
ต่อไปนี้เป็นวิธีการเขียนทั่วไป:
ใหม่
testTablevo vo = new testTableVo (); // ละเว้นคุณสมบัติการตั้งค่าสำหรับ VO ... int แถว = testtabledao.insertSelective (VO);
ปรับปรุงใหม่
testTablevo vo = new testTablevo (); // ละเว้นคุณสมบัติการตั้งค่าสำหรับ vo ... int row = testtabledao.updateByBrimaryKeySelective (VO);
สอบถามซิงเกิ้ล
testTablevo vo = new testTableVo (); vo.setId (123L); testTablevo result = testtabledao.selectone (VO);
แบบสอบถามแบบมีเงื่อนไข
// สร้างตัวอย่างตัวอย่างตัวอย่าง = ตัวอย่างใหม่ (testTableVo.class); // สร้างเกณฑ์เกณฑ์เกณฑ์ criteria = example.createCriteria (); // เพิ่มเกณฑ์เงื่อนไขและ isdelete ", 0); และรายการ" testtabledao.selectByexample (ตัวอย่าง);
สรุป
หลักการของผู้ทำแผนที่ทั่วไปคือการได้รับข้อมูลของคลาสเอนทิตีผ่านการสะท้อนและสร้าง SQL ที่เกี่ยวข้อง ดังนั้นเราจำเป็นต้องรักษาคลาสเอนทิตีซึ่งให้ความสะดวกสบายอย่างมากสำหรับการรับมือกับความต้องการที่ซับซ้อนและเปลี่ยนแปลงได้ คำอธิบายข้างต้นเป็นเพียงการใช้งานง่าย ๆ ของ Mapper ทั่วไป ในโครงการจริงเราควรห่อหุ้มวิธีที่ใหญ่กว่าทั่วไปและใช้งานได้ดีกว่าตาม Mapper ทั่วไปตามธุรกิจ
ด้วยการกำหนดค่าสปริงบูต
หนอง
<!-mybatis-> <การพึ่งพา> <roupId> org.mybatis.spring.boot </groupId> <ratifactid> mybatis-spring-boot-starter </artifactid> <version> 1.3.1 </เวอร์ชัน> </การพึ่งพา> <! <ArtIfactId> Mapper-Spring-Boot-Starter </artifactId> <version> 1.1.4 </Sentual> </derness>
Application.properties การกำหนดค่า
#mapper#mapers comma mappper.mappers = tk.mybatis.mapper.common.mappermapper.not-empty = falsemapper.identity = mysql
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น