การเขียนโปรแกรมในการทำงานของอินเทอร์เฟซ
โดยทั่วไปเมื่อเราสร้างคลาสที่แมปอินเทอร์เฟซ SQL มันมักจะมีลักษณะเช่นนี้:
Public Static Void TestBasicQuery (ID int) {SQLSESSION SESSION = MyBatisutils.getSqlSession (); ลอง { / * * david.mybatis.demo.ivisitoroperation.basicQuery ที่นี่จะต้องสอดคล้องกับเนมสเปซในการกำหนดค่าในรูปด้านล่าง * / ผู้เยี่ยมชมผู้เยี่ยมชม = (ผู้เข้าชม) เซสชัน SESSECTONE ("David.MyBatis.demo.ivisitoroperation.basicQuery" ID); mybatisutils.closesession (เซสชัน); System.out.println (ผู้เยี่ยมชม); } catch (exception e) {// todo: จัดการข้อยกเว้น}}<!-ที่นี่เนมสเปซสอดคล้องกับพารามิเตอร์สตริงที่คุณผ่าน-> <mapper namespace = "david.mybatis.demo.ivisitoroperation"> <!-ที่นี่ผลลัพธ์ที่สอดคล้องกับนามแฝงที่คุณระบุไว้ใน node typealias-isid islias สถานะ> 0 สั่งซื้อตาม ID </select> </mapper>
ด้วยวิธีนี้หากชื่อของทั้งสองฝ่ายไม่สอดคล้องกันในระหว่างกระบวนการพัฒนาจริงข้อยกเว้นจะเกิดขึ้น เพื่อหลีกเลี่ยงสถานการณ์ดังกล่าวเราสามารถใช้วิธีการเชื่อมต่อเพื่อดำเนินการที่สอดคล้องกัน มาแก้ไขบทความนี้ด้านล่าง
ก่อนอื่นเราสร้างคลาส IVIsitoperation ใหม่ภายใต้ชื่อแพ็คเกจ David.mybatis.demo ซึ่งระบุว่าอินเทอร์เฟซของวิธีฐานข้อมูลทั้งหมดจะดำเนินการในอนาคตดังแสดงด้านล่าง:
แพ็คเกจ david.mybatis.demo; นำเข้า java.util.list; นำเข้า david.mybatis.model.pagenateargs; นำเข้า david.mybatis.model.visitor; อินเตอร์เฟสสาธารณะ ivisitoroperation { /** แบบสอบถามพื้นฐาน* / ผู้เยี่ยมชมสาธารณะ sqlsession session = myBatisutils.getSqlSession (); ลอง {ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); ผู้เข้าชม = voperation.basicQuery (id); mybatisutils.closesession (เซสชัน); System.out.println (ผู้เยี่ยมชม); } catch (exception e) {// todo: จัดการข้อยกเว้น}}สิ่งนี้เสร็จสิ้นดังนั้นเราไม่ต้องกังวลเกี่ยวกับความไม่ตรงกันที่อาจเป็นผลมาจากชื่อวิธีการเขียนด้วยตนเอง
การดำเนินการ crud
ต่อไปนี้จะอธิบายการสร้างการดำเนินงาน CRUD และ GetList ตามการดำเนินการตารางเดียว เพื่อสร้างข้อมูลการทดสอบบางอย่างก่อนอื่นให้รับวิธีเพิ่ม
ดำเนินการต่อเพื่อเพิ่มเพิ่มลบอัปเดตการสืบค้นและวิธีการเชื่อมต่อของ GetList ในคลาสอินเตอร์เฟส IVISitorOperation ล่าสุดดังที่แสดงด้านล่าง:
/** แบบสอบถามพื้นฐาน*/ ผู้เยี่ยมชมสาธารณะ BasicQuery (ID int); /** เพิ่มผู้เข้าชม*/ INT สาธารณะเพิ่ม (ผู้เยี่ยมชมผู้เยี่ยมชม); /** ลบผู้เยี่ยมชม*/ การลบ INT สาธารณะ (ID int); /** อัปเดตผู้เข้าชม*/ การอัปเดต INT สาธารณะ (ผู้เยี่ยมชมผู้เยี่ยมชม); /** ผู้เยี่ยมชมแบบสอบถาม*/ Query ผู้เยี่ยมชมสาธารณะ (ID int); / * * รายการผู้เยี่ยมชมแบบสอบถาม */ รายการสาธารณะ <ผู้เยี่ยมชม> getList ();
สำหรับการดำเนินการ CRUD ที่สอดคล้องกันการแทรกการอัปเดตลบและเลือกโหนดตามลำดับภายใต้โหนด <Mapper> ของ Visitormapper.xml สำหรับรายละเอียดการกำหนดค่าโดยละเอียดโปรดดูเว็บไซต์ทางการ http://mybatis.github.io/mybatis-3/sqlmap-xml.html
การกำหนดค่าในตัวอย่างนี้มีดังนี้: ใช้ #{parameter_name} เพื่อส่งผ่านพารามิเตอร์และแน่นอนคุณยังสามารถใช้ $ {parameter_name} โดยตรง
ในวิธีก่อน MyBatis จะแปลงเป็นรูปแบบพารามิเตอร์เช่นแทรกลงในค่าตาราง (ชื่อ) (#{ชื่อ}) => แทรกลงในตาราง (ชื่อ) ค่า (?) (ในกรณีของ MySQL)
ด้วยวิธีหลัง MyBatis จะผ่านพารามิเตอร์โดยไม่ต้องดำเนินการใด ๆ เช่นแทรกลงในตาราง (ชื่อ) ค่า ($ {name}) => แทรกลงในตาราง (ชื่อ) ค่า ([ค่าที่คุณผ่าน]), ผ่าน aa, นี่คือ aa, ผ่าน 'aa', ที่นี่คือ 'aa'
<? xml version = "1.0" การเข้ารหัส = "utf-8"?> <! doctype mapper สาธารณะ "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd namespace = "david.mybatis.demo.ivisitoroperation"> <!-useGeneratedKeys = "true" หมายถึงการใช้ลำดับการเจริญเติบโตของตนเอง keyProperty = "id" ระบุว่าคอลัมน์การเจริญเติบโตของตัวเอง MASTER RESVOLSMAP ในแบบสอบถาม ประเภทการส่งคืนที่กำหนดเองเป็นตัวเลือกที่ดีที่สุดสำหรับการส่งคืนประเภทที่ซับซ้อนและยังเป็นอาวุธที่ทรงพลังที่สุดใน mybatis-> <แทรก id = "เพิ่ม" พารามิเตอร์ "parameterType =" ผู้เยี่ยมชม "useGeneratedKeys =" true "keyProperty =" ID "> แทรกลงในผู้เยี่ยมชม (ชื่ออีเมลสถานะ </insert> <delete id = "ลบ" parameterType = "int"> ลบจากผู้เยี่ยมชมที่สถานะ> 0 และ id =#{id} </ลบ> <อัปเดต id = "อัปเดต" parameterType = "ผู้เยี่ยมชม" </update> <select id = "query" parameterType = "int" resultType = "ผู้เยี่ยมชม"> เลือกรหัส, ชื่อ, อีเมล, สถานะ, createTime จากผู้เยี่ยมชมที่ id =#{id} และสถานะ> 0 ลำดับโดย id </select> <select id = "basicQuery" < /select> <select id = "getList" resultmap = "visitorrs"> <รวม refid = "getlistsql" /> < /select> <resultmap type = "ผู้เยี่ยมชม" id = "เยี่ยมชม"> <id column = "id" property = "id" /> < column = "createTime" คุณสมบัติ = "createTime"/> </resultmap> <sql id = "getlistsql"> เลือก * จากผู้เข้าชมที่สถานะ> 0 </sql> </ mapper>สิ่งหนึ่งที่ควรทราบที่นี่คือ ID ในโหนดการทำงานจะต้องสอดคล้องกับชื่ออินเตอร์เฟสในคำจำกัดความอินเตอร์เฟสและประเภทพารามิเตอร์จะต้องสอดคล้องกับมันด้วย ตัวอย่างเช่นอินเทอร์เฟซคือเพิ่ม (ผู้เยี่ยมชมผู้เยี่ยมชม) จากนั้นเมื่อกำหนดค่าโหนดแทรก id = "เพิ่ม" และ parameterType = "ผู้เยี่ยมชม"
มิฉะนั้นจะมีการรายงานข้อยกเว้นที่สอดคล้องกัน ตัวอย่างเช่นหากโหนด ID ไม่สอดคล้องกับชื่ออินเตอร์เฟสข้อยกเว้นต่อไปนี้จะปรากฏขึ้น:
คุณสามารถสังเกตได้ว่าเมื่อได้รับรายการในไฟล์การกำหนดค่า Visitormapper.xml คุณจะใช้ ResultMap เมื่อใช้ ResultMap คุณสามารถระบุแผนที่คำสั่ง SQL ของคุณเองได้เนื่องจากบางครั้งคุณไม่ต้องการคอลัมน์จำนวนมากดังนั้นคุณไม่จำเป็นต้องกำหนดค่าแผนที่จำนวนมากเมื่อกำหนดค่าการทำแผนที่หรือคอลัมน์ของคุณได้รับการระบุว่าคุณไม่สามารถใช้งานได้ นอกจากนี้คุณยังสามารถควบคุมได้ว่าจะแมปโดยการกำหนดค่า <การตั้งค่า> ค่าแอตทริบิวต์ภายใต้ <การกำหนดค่า> โหนดเพื่อควบคุมว่าจะแมปกับการตั้งชื่ออูฐใน Javabean ดังนี้
<การตั้งค่า> <การตั้งค่าชื่อ = "mapunderscoretoCamelCase" value = "false" /> < /settings>
สำหรับการกำหนดค่าอื่น ๆ ที่แก้ไข Mapper คุณสามารถดูได้ที่ http://mybatis.github.io/mybatis-3/configuration.html#settings
สำหรับคลาส Mapper ของผู้เข้าชมมีดังนี้:
<mapper namespace = "david.mybatis.demo.ivisitoroperation"> <sql id = "getlistsql"> เลือกรหัสเป็นผู้เยี่ยมชม _id, ชื่อ, อีเมล, สถานะ, createTime จากผู้เข้าชมที่สถานะ> 0 </sql> ไปที่นี่คือทรัพย์สิน ฟิลด์ในนั้นจะต้องเหมือนกับคุณสมบัติที่คุณกำหนดไว้ในเอนทิตี นี่เป็นตัวพิมพ์ใหญ่ที่ละเอียดอ่อนมิฉะนั้นตัวตั้งค่าเริ่มต้นจะไม่พบคุณสมบัติที่เกี่ยวข้องเมื่อกำหนดค่าให้กับคุณสมบัติ คุณสามารถลองใช้คุณสมบัติคอลัมน์ที่สอดคล้องกับชื่อของชุดผลลัพธ์ที่ส่งคืนโดยคำสั่ง Query หากมีการกำหนดนามแฝงให้กับฟิลด์ที่สอดคล้องกันเช่น ID กลายเป็น Visitor_id ชื่อคอลัมน์ที่สอดคล้องกันจะต้องสอดคล้องกับ -> <resultmap type = "ผู้เยี่ยมชม" id = "Visitorrs"> <id column = "visitor_id" คุณสมบัติ = "id" /> <results column = "name" column = "createTime" property = "createTime"/> </resultmap> </mapper>
ที่นี่คุณจะสังเกตเห็นว่ามีโหนด <SQL> โหนด สิ่งนี้ใช้ในการสกัดคำสั่ง SQL สาธารณะหรือฟิลด์เพื่อนำกลับมาใช้ใหม่ในที่อื่น สำหรับคำแนะนำโดยละเอียดอื่น ๆ โปรดดูที่ http://mybatis.github.io/mybatis-3/sqlmap-xml.html
ส่วนที่เหลือคือการดำเนินการเดียวกับตอนนี้ คุณสามารถสร้างคลาส Demorun ในโปรแกรมสาธิตเพื่อจัดเก็บวิธีการทดสอบที่หลากหลายดังนี้:
แพ็คเกจ david.mybatis.demo; นำเข้า java.util.arrays; นำเข้า java.util.list; นำเข้า org.apache.ibatis.session.sqlsession; นำเข้า david.mybatis.model.basicqueryargs นำเข้า david.mybatis.model.model.model.model david.mybatis.model.pagenateargs; นำเข้า david.mybatis.model.visitor; นำเข้า david.mybatis.model.website; Demorun ชั้นเรียนสาธารณะ ลอง { / * * david.mybatis.demo.ivisitoroperation.basicQuery ที่นี่จะต้องสอดคล้องกับเนมสเปซในการกำหนดค่าในรูปด้านล่าง * / ผู้เยี่ยมชมผู้เยี่ยมชม = (ผู้เข้าชม) เซสชัน SESSECTONE ("David.MyBatis.demo.ivisitoroperation.basicQuery" ID); mybatisutils.closesession (เซสชัน); System.out.println (ผู้เยี่ยมชม); } catch (exception e) {// todo: จัดการข้อยกเว้น e.printstacktrace (); }} โมฆะสาธารณะคงที่ testBasicQueryByInterfaceway (ID int) {SQLSession Session = MyBatisUtils.getSqlSession (); ลอง {ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); ผู้เข้าชม = voperation.basicQuery (id); mybatisutils.closesession (เซสชัน); System.out.println (ผู้เยี่ยมชม); } catch (exception e) {// todo: จัดการข้อยกเว้น e.printstacktrace (); }} /** เพิ่มระเบียนผู้เข้าชมในแบทช์* / โมฆะสาธารณะคงที่ addVisitors () {SQLSession Session = MyBatisUtils.getSqlSession (); รายการ <ผู้เยี่ยมชม> ผู้เยี่ยมชม = arrays.aslist (ผู้เยี่ยมชมใหม่ [] {ผู้เยี่ยมชมใหม่ ("mongoDb", "[email protected]"), ผู้เยี่ยมชมใหม่ ("redis", "[email protected]") ผู้เยี่ยมชมใหม่ ("memcached", "[email protected]" ผู้เข้าชม ("hbase", "[email protected]"), ผู้เข้าชมใหม่ ("bigtable", "[email protected]"), ผู้เยี่ยมชมใหม่ ("hive", "[email protected]"), ผู้เยี่ยมชมใหม่ ("Mapreduce", "[email protected]") สำหรับ (ผู้เยี่ยมชมผู้เยี่ยมชม: ผู้เยี่ยมชม) {addVisitor (ผู้เยี่ยมชมเซสชัน); } mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.list, ผู้เยี่ยมชม.size ()); } /** เพิ่มข้อมูลผู้เข้าชม* / @suppresswarnings ("ไม่ได้ใช้") โมฆะคงที่ส่วนตัว addVisitor (ผู้เยี่ยมชมผู้เยี่ยมชมเซสชัน SQLSession) {ถ้า (เซสชัน == null) เซสชัน = myBatisutils.getSqlSession (); ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); int recordCount = voperation.add (ผู้เยี่ยมชม); session.commit (); if (เซสชัน == null) myBatisutils.losesession (เซสชัน); mybatisutils.showmessages (crud_enum.add, recordcount); } /** โอเวอร์โหลดเพิ่มผู้เข้าชม* / โมฆะสาธารณะคงที่ addVisitor (ผู้เยี่ยมชมผู้เยี่ยมชม) {addVisitor (ผู้เยี่ยมชม, null); } /** ลบข้อมูลผู้เข้าชม* / โมฆะคงที่สาธารณะ deleteVisitor (ID int) {SQLSession Session = MyBatisutils.getSqlSession (); ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); int recordCount = vOperation.delete (id); session.commit (); mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.delete, recordcount); } /** อัปเดตข้อมูลผู้เข้าชม* / โมฆะคงที่สาธารณะ updateVisitor (ID int) {SQLSession Session = MyBatisUtils.getSqlSession (); ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); ผู้เข้าชม = voperation.Query (ID); System.out.println ("วัตถุต้นฉบับ:" + ผู้เยี่ยมชม); ชื่อสตริง = visitor.getName (); if (name.contains ("อัปเดต"))) {ผู้เยี่ยมชม. setName (name.substring (0, name.indexof ("อัปเดต")))); } else {visitor.setName (ชื่อ + "อัปเดต"); } int recordCount = vOperation.Update (ผู้เยี่ยมชม); session.commit (); mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.update, recordcount); System.out.println ("อัปเดตวัตถุ:" + ผู้เยี่ยมชม); } /** ข้อมูลผู้เยี่ยมชมแบบสอบถาม* / โมฆะสาธารณะคงที่ QueryVisitor (ID int) {SQLSession Session = MyBatisutils.getSqlSession (); ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); ผู้เข้าชม = voperation.Query (ID); mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.query, 1); System.out.println (ผู้เยี่ยมชม); } /** สอบถามรายชื่อผู้เข้าชม* / โมฆะสาธารณะคงที่ queryVisitorList () {sqlsession session = myBatisutils.getSqlSession (); ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); รายการ <ผู้เยี่ยมชม> ผู้เยี่ยมชม = voperation.getList (); สำหรับ (ผู้เยี่ยมชมผู้เยี่ยมชม: ผู้เยี่ยมชม) {System.out.println (ผู้เยี่ยมชม); } mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.list, ผู้เยี่ยมชม.size ()); - คลาส Demorun ใช้ตารางเดี่ยวที่เรียบง่ายและการสาธิตเสร็จสมบูรณ์