ใช้แบบสอบถามร่วมหลายโต๊ะ
หรือสร้างคลาสเว็บไซต์ใหม่ภายใต้แพ็คเกจ David.mybatis.model เพื่อคงข้อมูลและเขียนวิธี ToString () ที่เกี่ยวข้องเพื่ออำนวยความสะดวกในการใช้โปรแกรมทดสอบ
แพ็คเกจ david.mybatis.model; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; เว็บไซต์ระดับสาธารณะ {ID ส่วนตัว ID; ชื่อสตริงส่วนตัว; ผู้เยี่ยมชม INT ส่วนตัว; สถานะ int ส่วนตัว; วันที่ส่วนตัว createTime; ผู้เยี่ยมชมส่วนตัว เว็บไซต์สาธารณะ () {// TODO ที่สร้างขึ้นอัตโนมัติ createTime createTime = วันที่ใหม่ (); ผู้เยี่ยมชม = ผู้เข้าชมใหม่ (); } เว็บไซต์สาธารณะ (ชื่อสตริง, int VisitorId) {this.name = name; this.visitorid = visitorid; ผู้เยี่ยมชม = ผู้เข้าชมใหม่ (); สถานะ = 1; createTime = date ใหม่ (); } สาธารณะ int getId () {return id; } โมฆะสาธารณะ setId (int id) {this.id = id; } ผู้เยี่ยมชมสาธารณะ getVisitor () {ผู้เข้าชมส่งคืน; } โมฆะสาธารณะ setVisitor (ผู้เยี่ยมชมผู้เยี่ยมชม) {this.visitor = ผู้เยี่ยมชม; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } public int getStatus () {สถานะการส่งคืน; } โมฆะสาธารณะ setStatus (สถานะ int) {this.status = สถานะ; } วันที่สาธารณะ getCreateTime () {return createTime; } โมฆะสาธารณะ setCreateTime (วันที่ createTime) {this.createTime = createTime; } public int getVisitorId () {int id = 0; if (ผู้เยี่ยมชม == null) id = visitorId; else id = visitor.getId (); return id; } โมฆะสาธารณะ setVisitorId (Int VisitorId) {this.visitorId = VisitorId; } @Override Public String ToString () {StringBuilder SB = ใหม่ StringBuilder (String.format ("เว็บไซต์ => {id: %d, ชื่อ: %s, createTime: %s}/r/n", id, ชื่อ, simpledateFormat ใหม่ ("yyyy-mm-dd hh: mm: mm) if (ผู้เยี่ยมชม! = null) sb.append (string.format ("ผู้เยี่ยมชม => %s", ผู้เข้าชม. toString ())); ส่งคืน sb.toString (); -สร้างอินเทอร์เฟซการดำเนินการที่สอดคล้องกันภายใต้ david.mybatis.demo:
แพ็คเกจ david.mybatis.demo; นำเข้า java.util.list; นำเข้า david.mybatis.model.website; อินเทอร์เฟซสาธารณะ iwebsiteoperation {Public Int Add (เว็บไซต์); Public Int Delete (int id); การอัปเดต INT สาธารณะ (เว็บไซต์เว็บไซต์); แบบสอบถามเว็บไซต์สาธารณะ (ID int); รายชื่อสาธารณะ <werywiteal> getList (); -สร้างไฟล์การแมป websitemapper.xml ใหม่ในโฟลเดอร์ Mapper และอ้างอิงไฟล์ก่อนหน้านี้เพื่อเพิ่มลบแก้ไขและตรวจสอบการกำหนดค่าการทำงานของตารางเดี่ยวเพื่อให้คุณสามารถสร้างข้อมูลการทดสอบบางส่วน ดังนี้
<? 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.iwebsiteoperation"> <sql id = "getlistsql"> เลือก id, ชื่อ, ผู้เยี่ยมชม, สถานะ, createTime จากเว็บไซต์ที่สถานะ> 0 </sql> <insert id = "add" parametertype = "เว็บไซต์" createTime) ค่า ( #{name}, #{visitorId}, #{สถานะ}, #{createTime}) </insert> <ลบ id = "ลบ" parameterType = "int"> ลบเว็บไซต์ที่สถานะ> 0 และ id = #{id} id =#{id} </update> <select id = "query" parameterType = "int" resultmap = "websiters"> เลือกเว็บไซต์ site.id siteid, เว็บไซต์ชื่อ sitename, ผู้เยี่ยมชม. ผู้เยี่ยมชม, ผู้เยี่ยมชม wite.status> 0 และ wite.id =#{id} < /select> <resultmap type = "เว็บไซต์" id = "websiters"> <id column = "siteid" คุณสมบัติ = "id" /> <result column = "sitename" คุณสมบัติ = name " /> javatype = "ผู้เยี่ยมชม" resultmap = "visitorrs" /> < /resultmap> <resultmap type = "ผู้เยี่ยมชม" id = "Visitorrs"> <id column = "VisitorId" คุณสมบัติ = "id" /> <result column = "Visitorname" refid = "getlistsql"/> </select> </mapper>สิ่งที่เราพูดถึงส่วนใหญ่ในวันนี้คือการค้นหา ตอนนี้เราต้องการสอบถามเว็บไซต์และนำข้อมูลผู้เข้าชมที่เกี่ยวข้องเข้าด้วยกัน ทำอย่างไร? คุณสามารถอ้างถึงการสืบค้นในการกำหนดค่าและเขียน SQL สำหรับการสืบค้นตารางลิงค์
สิ่งสำคัญที่ควรทราบที่นี่คือคุณสมบัติทั้งสองของ ID และชื่อในเอนทิตีของเว็บไซต์และเอนทิตีเยี่ยมชมนั้นเหมือนกัน ดังนั้นเพื่อหลีกเลี่ยงข้อผิดพลาดในการแมปให้แสดงรายการผลลัพธ์การสืบค้นที่เกี่ยวข้องกับนามแฝงที่แตกต่างกันเพื่อให้สามารถหลีกเลี่ยงได้เมื่อมีผลผูกพัน
ฉันจะได้อะไรถ้าฉันกำหนดค่ามันเหมือนต่อไปนี้?
<select id = "query" parameterType = "int" resultmap = "websiters"> เลือกเว็บไซต์. id, sitename ชื่อ sitename, ผู้เยี่ยมชม. ผู้เยี่ยมชม, ผู้เยี่ยมชม. wite.id =#{id} < /select> <resultmap type = "เว็บไซต์" id = "websiters"> <id column = "id" คุณสมบัติ = "id" /> <result column = "sitename" property = "name" /> <result column = "siteStatus" คุณสมบัติ " resultmap = "visitorrs" /> < /resultmap> <resultmap type = "ผู้เยี่ยมชม" id = "Visitorrs"> <id column = "id" คุณสมบัติ = "id" /> <result column = "visitorname" property = "name" /> < /resultsmap> คุณสังเกตเห็นหรือไม่ว่า ID ของผู้เข้าชมได้กลายเป็น 2 ในความเป็นจริงมันแมปรหัสเว็บไซต์ตามค่าเริ่มต้นเนื่องจากผลลัพธ์ของคำสั่ง SQL การสืบค้นทั้งคู่กลายเป็น 2 คนบางคนอาจถามว่าทำไมมันไม่ใช่ 4 เพราะมันตรงกับหนึ่งโดยค่าเริ่มต้น หากคุณเปลี่ยนสถานที่ของเว็บไซต์และเยี่ยมชมคุณจะพบว่าผลลัพธ์มีการเปลี่ยนแปลงอย่างน่าอัศจรรย์อีกครั้ง
ดังนั้นคุณต้องให้นามแฝงเพื่อหลีกเลี่ยงสถานการณ์นี้ดังนั้นคุณจะพบว่ามีความจริงเพียงข้อเดียวเท่านั้นซึ่งเป็นสิ่งต่อไปนี้:
คุณจะเห็นได้ว่าวิธีการประมวลผลแบบหลายตารางผลลัพธ์นั้นเหมือนกับของตารางเดียว มันไม่มีอะไรมากไปกว่าการแสดงชื่อของแอตทริบิวต์ Javabean คุณจะเห็นว่ามี MAP ผลลัพธ์อื่นในแผนกต้อนรับในโหนด <resultmap> ของเว็บไซต์ มันแสดงถึงเอนทิตีที่ต้องแมปโดยนิติบุคคลการเยี่ยมชม คุณสามารถใช้วิธีการต่อไปนี้เพื่อสร้างความสัมพันธ์
<Association Property = "ผู้เยี่ยมชม" Javatype = "ผู้เยี่ยมชม" resultMap = "Visitorrs" />>>>>>>
ผู้เข้าชมคือชื่อฟิลด์เยี่ยมชมในเว็บไซต์ของเว็บไซต์ ชื่อจะต้องสอดคล้องกัน มิฉะนั้นข้อยกเว้นของไม่มี getter สำหรับทรัพย์สินชื่อ 'xxx' ใน 'Class David.mybatis.model.website' จะถูกโยนลงไป สิ่งนี้ได้รับการอธิบายในบทก่อนหน้า แน่นอนถ้าคุณคิดว่ามันไม่ได้ที่จะไม่ทำรังนกการทำรังก็เป็นเพราะความจริงที่ว่าการกำหนดค่านี้สามารถใช้ที่อื่นได้มันจะถูกสกัดซึ่งเป็นแนวคิดที่เป็นนามธรรม ใช้ ID และผลลัพธ์ใน <resultmap> เพื่อค้นหาความแตกต่างที่สอดคล้องกันจากเว็บไซต์ทางการ: http://mybatis.github.io/mybatis-3/sqlmap-xml.html#result_maps
ด้วยวิธีนี้การสืบค้นข้อต่อแบบหลายโต๊ะง่าย ๆ จะออกมา หากมีค่าธรรมเนียมทางธุรกิจแบบสอบถามที่ซับซ้อนมากขึ้นการแก้ไขบางอย่างจะทำขึ้นอยู่กับสิ่งนี้
ตรรกะเอฟเฟกต์การแบ่งหน้า
สิ่งที่เราต้องการพูดคุยคือปัญหาการพลิกผันที่เรามักพบในปัญหาทางธุรกิจ เมื่อพัฒนาโครงการเว็บเรามักจะใช้การแสดงรายการ โดยทั่วไปเราใช้การควบคุมรายการที่ใช้กันทั่วไปเช่น DataTables (โดยส่วนตัวแล้วฉันรู้สึกดีมาก) และการควบคุมตารางที่ห่อหุ้มภายใต้ UI ง่าย ๆ
แนวคิด: เพื่อให้ได้ผลของการเพจในการควบคุมเหล่านี้เรามักจะผ่านพารามิเตอร์ 2 สิ่งแรกคือการแสดงดัชนีของหน้าปัจจุบัน (โดยปกติจะเริ่มต้นจาก 0) ที่สองคือการแสดงจำนวนระเบียนธุรกิจที่แสดงในหน้าปัจจุบันจากนั้นส่งผ่านพารามิเตอร์ที่เกี่ยวข้องไปยังรายการ <t> getList (pagenateargs args) เมื่อใช้การเพจในฐานข้อมูลในที่สุดเราสามารถใช้คำหลัก จำกัด (สำหรับ MySQL) สำหรับการเพจ หากเป็น Oracle หรือ SQL Server พวกเขาทั้งหมดมีฟังก์ชั่น Rownum ของตัวเองที่จะใช้
ในการแก้ไขแนวคิดข้างต้นก่อนอื่นเราจำเป็นต้องสร้างคลาสพารามิเตอร์หน้าใหม่ชื่อ PagenateArgs ภายใต้ demo.mybatis.model เช่นเคยและคลาส enum ที่ชื่อ SortDirectionEnum ซึ่งมีหน้าดัชนีหน้าปัจจุบัน (pagestart = pageindex*pagesize) เนื่องจากการใช้คำหลักขีด จำกัด คือการเป็นตัวแทน [หมายเลขเริ่มต้น จำกัด (ไม่รวม) ใช้รายการสองสามรายการ], ฟิลด์การเรียงลำดับ orderfieldstr, ทิศทางการเรียงลำดับ OrderDirectionSTR ดังนั้นการสร้างที่เฉพาะเจาะจงมีดังนี้:
แพ็คเกจ David.mybatis.model;
/ * * คลาสพารามิเตอร์ PAGINATE */คลาสสาธารณะ PAGENATEARGS {Private Int PageIndex; หน้า int ส่วนตัว; Private Int Pagestart; สตริงส่วนตัว orderfieldstr; สตริงส่วนตัว orderdirectionStr; PAGENATEARGS สาธารณะ () {// TODO Auto-Generated Constructor Stub} PAGENATEARGS สาธารณะ (int PageIndex, Int PageSize, String OrderFieldSt, String OrderDirectionStr) this.pageize = pageSize; this.orderfieldstr = orderfieldstr; this.orderDirectionStr = orderDirectionStr; Pagestart = PageIndex * Pagesize; } สาธารณะ int getPageIndex () {return pageindex; } public int getPagestart () {return pagestart; } public int getPagesize () {กลับ pageSize; } สตริงสาธารณะ orderfieldstr () {return orderfieldstr; } สตริงสาธารณะ getOrderDirectionStr () {return orderDirectionStr; }} แพ็คเกจ david.mybatis.model;/ * * เรียงลำดับ enum */public enum sortDirectionEnum {/ * * จากน้อยไปมาก */asc,/ * * ลงมา */desc}หลังจากทำตามขั้นตอนข้างต้นเสร็จแล้วเรายังคงเพิ่มวิธีการสาธารณะรายการ <ผู้เข้าชม> getListByPagenate (pagenateargs args) ในคลาสอินเตอร์เฟส ivisitoroperation ในบทก่อนหน้านี้เรามีวิธี getList อยู่แล้ว การปนเปื้อนนี้เป็นเพียงการเปลี่ยนแปลงเล็กน้อยตามสิ่งนี้ หลังจากที่คลาสอินเตอร์เฟส ivisitoroperation เปลี่ยนไปมันเป็นดังนี้:
แพ็คเกจ david.mybatis.demo; นำเข้า java.util.list; นำเข้า david.mybatis.model.pagenateargs; นำเข้า david.mybatis.model.visitor; นำเข้า david.mybatis.model.visitorwith; /** เพิ่มผู้เข้าชม*/ INT สาธารณะเพิ่ม (ผู้เยี่ยมชมผู้เยี่ยมชม); /** ลบผู้เยี่ยมชม*/ การลบ INT สาธารณะ (ID int); /** อัปเดตผู้เข้าชม*/ การอัปเดต INT สาธารณะ (ผู้เยี่ยมชมผู้เยี่ยมชม); /** ผู้เยี่ยมชมแบบสอบถาม*/ Query ผู้เยี่ยมชมสาธารณะ (ID int); / * * รายการสอบถาม */ รายการสาธารณะ <ผู้เยี่ยมชม> getList (); / * * รายการข้อความค้นหาการแบ่งหน้า */ รายการสาธารณะ <ผู้เยี่ยมชม> getListByPagenate (pagenateargs args); -
ต่อไปเราต้องเริ่มเปลี่ยนไฟล์การกำหนดค่า Visitormapper.xml ของเราเพิ่ม <Select> ID Node ID ใหม่และประเภทพารามิเตอร์เพื่อกำหนดค่าตามบทก่อนหน้า ID ใหม่ที่เพิ่มเข้ามาที่นี่คือ getlistbypagenate หลังการกำหนดค่าสิ่งต่อไปนี้
<? 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" ระบุว่าคอลัมน์การขยายตัวของตัวเอง parameterType = "ผู้เยี่ยมชม" useGeneratedKeys = "true" keyProperty = "id"> แทรกลงในผู้เยี่ยมชม (ชื่อ, อีเมล, สถานะ, createTime) ค่า ( #{ชื่อ}, #{อีเมล}, #{สถานะ}, #{createTime}) #{id} </delete> <update id = "update" parameterType = "ผู้เยี่ยมชม"> อัปเดตชื่อผู้เยี่ยมชมชื่อ =#{ชื่อ}, email =#{อีเมล}, สถานะ =#{สถานะ} โดยที่ id =#{id} และสถานะ> 0; </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> <sql id = "getlistsql"> เลือก * จากผู้เยี่ยมชมที่สถานะ> 0 </sql> <! orderbysql ถูกสกัดตัวอย่างเช่นนำกลับมาใช้ใหม่ในภายหลัง-> <resultmap type = "ผู้เยี่ยมชม" id = "visitorrs"> <id column = "id" property = "id" /> <result column = "name" คุณสมบัติ = "name" /> <result column = "อีเมล" id = "getListBypagenate" พารามิเตอร์ therType = "pagenateargs" resultType = "ผู้เยี่ยมชม"> เลือก * จาก (<รวม refid = "getListSql" /> <รวม refid = "orderbysql" />>) t <! test = "pagestart> -1 และ pagesize> -1"> ขีด จำกัด #{pagestart}, #{pagesize} </if> </select> <sql id = "orderbysql"> สั่งซื้อโดย $ {orderfieldstr} $ {orderdirectionstr}คุณจะพบการกำหนดค่าที่คล้ายกันในรูปด้านล่าง แอตทริบิวต์ฟิลด์ที่นี่ทั้งหมดสอดคล้องกับชื่อแอตทริบิวต์ในคลาสพารามิเตอร์ pagenateargs
<ถ้า test = "pagestart> -1 และ pagesize> -1"> จำกัด #{pagestart}, #{pagesize} </if>สร้างวิธีการทดสอบในคลาส Demorun:
/** พารามิเตอร์การแบ่งหน้า*/โมฆะสาธารณะคงที่ QueryVisitorListWithPagenate (int PageIndex, int pagesize, String orderfield, String orderdire) {pagenateargs args = ใหม่ pagenateargs sqlsession session = myBatisutils.getSqlSession (); ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); รายการ <ผู้เยี่ยมชม> ผู้เยี่ยมชม = voperation.getListByPagenate (args); สำหรับ (ผู้เยี่ยมชมผู้เยี่ยมชม: ผู้เยี่ยมชม) {System.out.println (ผู้เยี่ยมชม); } mybatisutils.closesession (เซสชัน); mybatisutils.showmessages (crud_enum.list, ผู้เยี่ยมชม.size ());}Demorun.QueryVisitorListWithPagenate (0, 100, "ID", SortDirectionEnum.desc.toString ());
หลังจากทำงานแล้วผลการทดสอบจะถูกจัดเรียงตามลำดับย้อนกลับใน ID มี 14 ระเบียนในตารางผู้เยี่ยมชม
สมมติว่าเราใช้ 5 ชิ้นในหน้า 2 และดำเนินการข้อมูล 6-10 ชิ้นต่อไปนี้ดังนั้นเพียงแค่ผ่านพารามิเตอร์
Demorun.QueryVisitorListWithPagenate (1, 5, "ID", SortDirectionEnum.desc.toString ());
ผลลัพธ์มีดังนี้:
นี่คือตรรกะการเพจที่ฉันได้นำไปใช้ด้วยตัวเอง ~^0^ สิ่งที่คุณต้องทราบที่นี่คือฉันไม่ได้ตัดสินใด ๆ ในฟิลด์ OrderFieldStr ที่นี่ ในทางทฤษฎีมีความจำเป็นที่จะต้องจัดการกับมันเพื่อป้องกันไม่ให้ชื่อคอลัมน์ผิดผ่านเข้ามาอย่างไรก็ตามควรมีการห่อหุ้มแบบสำเร็จรูปบนอินเทอร์เน็ตในขณะนี้ดังนั้นคุณสามารถไปที่ Google ได้ นี่เป็นเพียงวิธีแสดงวิธีใช้ Mybatis Paging
หลังจากทำสิ่งนี้ให้เสร็จสมบูรณ์เพราะมันเป็น MySQL มันไม่มี ID ลำดับ rownum ของตัวเองในผลลัพธ์การสืบค้น ดังนั้นจึงอาจไม่ชัดเจนเมื่อตรวจสอบข้อมูลการทดสอบ หากคุณไม่ต้องรีบเราสามารถทำเองเพื่อทำอาหารและเสื้อผ้าและเปลี่ยนวิธีการข้างต้น ที่นี่ฉันจะสร้างเอนทิตีที่เหมือนกันอย่างสมบูรณ์ในแพ็คเกจโมเดลและนำ ID rownum เพิ่มเติมที่ส่งคืนโดยการคงอยู่ของพารามิเตอร์ rownum ดังต่อไปนี้:
แพ็คเกจ david.mybatis.model; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; ผู้เยี่ยมชมชั้นเรียนสาธารณะ {ID int ส่วนตัว; ชื่อสตริงส่วนตัว; อีเมลสตริงส่วนตัว สถานะ int ส่วนตัว; วันที่ส่วนตัว createTime; ส่วนตัว int rownum; Public VisitorWithRn () {// TODO TODO ที่สร้างขึ้นใหม่ createTime createTime = วันที่ใหม่ (); } Public VisitorWithRN (ชื่อสตริง, อีเมลสตริง) {this.name = name; this.email = อีเมล; this.setstatus (1); this.createTime = วันที่ใหม่ (); } สาธารณะ int getId () {return id; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setEmail (อีเมลสตริง) {this.email = อีเมล; } สตริงสาธารณะ getEmail () {ส่งคืนอีเมล; } วันที่สาธารณะ getCreateTime () {return createTime; } public int getStatus () {สถานะการส่งคืน; } โมฆะสาธารณะ setStatus (สถานะ int) {this.status = สถานะ; } public int getrownum () {return rownum; } โมฆะสาธารณะ setrownum (int rownum) {this.rownum = rownum; } @Override สตริงสาธารณะ toString () {// toDo วิธีการที่สร้างขึ้นอัตโนมัติ stub return สตริงฟอร์แดน ("{rownum: %d, id: %d, ชื่อ: %s, createTime: %s}", id, id, ชื่อ, ใหม่ -ใน ivisitoroperation สร้างวิธีการใหม่ที่เรียกว่ารายการสาธารณะ <ผู้เยี่ยมชม Withrn> getListByPagenateWithRn (pagenateargs args) ในทำนองเดียวกันเราจำเป็นต้องกำหนดค่าโหนด <Select> ที่สอดคล้องกันและสคริปต์ใน VisitorMapper ความแตกต่างเพียงอย่างเดียวที่นี่คือเราต้องแก้ไขสคริปต์ SQL ดังนี้:
<? 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" ระบุว่าคอลัมน์การขยายตัวของตัวเอง parameterType = "ผู้เยี่ยมชม" useGeneratedKeys = "true" keyProperty = "id"> แทรกลงในผู้เยี่ยมชม (ชื่อ, อีเมล, สถานะ, createTime) ค่า ( #{ชื่อ}, #{อีเมล}, #{สถานะ}, #{createTime}) #{id} </delete> <update id = "update" parameterType = "ผู้เยี่ยมชม"> อัปเดตชื่อผู้เยี่ยมชมชื่อ =#{ชื่อ}, email =#{อีเมล}, สถานะ =#{สถานะ} โดยที่ id =#{id} และสถานะ> 0; </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> <sql id = "getlistsql"> เลือก * จากผู้เยี่ยมชมที่สถานะ> 0 < /sql> คอลัมน์ = "อีเมล" คุณสมบัติ = "อีเมล" /> <result column = "สถานะ" คุณสมบัติ = "สถานะ" /> <result column = "createTime" คุณสมบัติ = "createTime" /> < /resultmap> <select id = "getListByPagenate" parameterType = "pagenateargs" refid = "orderbysql"/>) t <!- #{} หมายถึงเอาต์พุตพารามิเตอร์, $ {} หมายถึงเอาต์พุตโดยตรงไม่ได้ดำเนินการหลบหนีใด ๆ ถ่ายโอนด้วยตัวเอง-> <ถ้าทดสอบ = "pagestart> -1 และ pagesize> -1"> จำกัด #{pagestart}, #{หน้า id = "orderbysql"> สั่งซื้อโดย $ {orderfieldstr} $ {orderdirectionstr} < /sql> <!-วิธีการเขียนสคริปต์ SQL ด้วย rownum-> <resultmap type = "VisitorWithRn" id = "VisitorWithRnrs"> property = "email" /> <result column = "สถานะ" คุณสมบัติ = "สถานะ" /> <result column = "createTime" คุณสมบัติ = "createTime" /> <result column = "Rownum" property = "Rownum" /> < /resultmap> <select id = "getListByPagenateWithRn" ไม่ดำเนินการหลบหนีใด ๆ ถ่ายโอนด้วยตัวเอง-> เลือก t.rownum, t.id, t.name, t.email, t.status, t.createTime จาก (<รวม refid = "getlistsqlcontainsrn" /> <รวม refid = "orderbysql" #{pagesize} </if> </select> <sql id = "getlistsqlcontainsrn"> เลือก @rownum: = @rownum+1 rownum, result.id, result.name, result.email, result.status สิ่งต่อไปที่เหลือคือการเพิ่มวิธีการทดสอบภายใต้ Demorun ในตอนนี้ดังนั้นฉันจะไม่ติดแผนที่ที่นี่ หลังจากเสร็จสิ้นคุณจะเห็นว่าข้อมูล 6-10 ชิ้นตอนนี้จะกลายเป็นดังนี้