PS: มีสองวิธีในการผ่านพารามิเตอร์หลายตัวใน iBatis3: หนึ่งคือการใช้ java.map และอีกอย่างคือการใช้ Javabean
เมื่อมีเพียงพารามิเตอร์เดียวเท่านั้นที่ส่งผ่านไปยังไฟล์ xxxmapper.xml คุณสามารถใช้ "_parameter" เพื่อรับพารามิเตอร์ที่ส่งผ่านใน xxxmapper.java และแทนที่พวกเขาลงในแบบสอบถามเช่น:
(1) ต่อไปนี้ถูกกำหนดไว้ในไฟล์ xxxmapper.java:
รายการ <String> SELECTALLAIRPORTCODE (การแมปบูลีน);
(2) ในเวลานี้คุณสามารถใช้ "_Parameter" เพื่อรับพารามิเตอร์นี้ในไฟล์ xxxmapper.xml ที่สอดคล้องกัน:
<select id = "selectallairportcode" resultType = "java.lang.string" parameterType = "java.lang.boolean"> เลือก uspecture_airport จาก usr_air_line union selectarrival_airport จาก usr_air_line <if test = "_ parameter == True usr_air_line Unionelectrel_arrival_airport จาก USR_AIR_LINE Unionelectrel_arrival_airport จาก USR_AIR_LINE Unionelectrel_Airport จาก USR_AIR_LINE Unionelectrel_arrival_Airport จาก USR_AIR_LINE </if>
อย่างไรก็ตามหากมีการส่งพารามิเตอร์หลายพารามิเตอร์ในไฟล์ xxxmapper.java แบบฟอร์มข้างต้นไม่สามารถใช้พารามิเตอร์ได้ ในเวลานี้มีสองวิธีแก้ปัญหานี้:
ส่งผ่านแผนที่ <สตริงวัตถุ> คอลเลกชันไปยังไฟล์ XML จากนั้นพารามิเตอร์ต่าง ๆ ในคอลเลกชันแผนที่สามารถใช้งานได้ตามปกติในไฟล์ XML
ตัวอย่างเฉพาะมีดังนี้:
(1) ต่อไปนี้ถูกกำหนดไว้ในไฟล์ xxxmapper.java:
รายการ <Airline> findall (แผนที่ <สตริงวัตถุ> parms);
(2) พารามิเตอร์ผ่านไปยังแผนที่ในคลาสการใช้งานเฉพาะที่กำหนดไว้ข้างต้น:
รายการสาธารณะ <Airline> findall (หน้า PageInfo, สายการบินสายการบิน) {hashmap <สตริง, วัตถุ> params = new hashmap <string, object> (); params.put ("หน้า", หน้า); params.put ("สายการบิน", สายการบิน);(3) ในเวลานี้ไฟล์ xxxmapper.xml ที่เกี่ยวข้องใช้ "java.util.map" เพื่อรับคอลเลกชันแผนที่นี้:
<sql id = "sqlfileders"> <bind name = "fileders" value = "#{'id': 'id', 'uspectureairport': 'Departure_airport', 'reldepartureairport': 'rel_departure_airport' l_airport ',' relarrivalairport ':' rel_arrival_airport ',' popstatus ':' pop_status ',' สถานะ ':' สถานะ ',' ผู้สร้าง ':' ผู้สร้าง ',' createTime ':' create_time '} " /> <bind name = "javapropertys" value = "#{'id': 'id', 'use quite_airport': 'uspectureairport', 'rel_departure_airport': iValairport ',' rel_arrival_airport ':' relarrivalairport ',' pop_status ':' popstatus ',' สถานะ ':' สถานะ ',' ผู้สร้าง ':' ผู้สร้าง ',' create_time ':' createTime '} parameterType = "java.util.map"> <! [cdata [เลือก x.* จาก (เลือก z.*, หมายเลข rownum จาก (]> select <รวม refid = "base_column_list" /> fromusr_air_line <here> #{Airline.departureairport} </ถ้า> <ถ้า test = "Airline.arrivalAirport! = null"> และ arrival_airport = #{Airline.arrivalAirport} </ถ้า> <ถ้าทดสอบ = = #{Airline.RelDepArtureairport} </ถ้า> <ถ้าทดสอบ = "Airline.Relarrivalairport! = null"> และ rel_arrival_airport = #{airline.relarrivalairport} </if> <if test = "airline.popstatus! #{Airline.popstatus} </if> <ถ้า test = "Airline.status! = null"> และ status = #{Airline.status} </ถ้า> </โดยที่> <ถ้า test = "page.sortname! = null"> <รวม refid = "sqlfileders"/> /> สั่งซื้อโดย $ {orderfield} $ {page.sortorder} </if> <! [cdata [) z โดยที่ rownum <]]>#{page.to} <! [cdata [) x โดยที่ x.numbers> =]>#{page.from}หมายเหตุ: ตัวอย่างข้างต้นใช้ข้อมูลการสืบค้นการปนเปื้อน เราสามารถค้นหาได้ว่าการใช้ MAP เพื่อส่งพารามิเตอร์ไม่ดีเพราะสิ่งนี้ทำให้เป็นไปได้ว่ามีพารามิเตอร์แผนที่เดียวในอินเทอร์เฟซ เมื่อคนอื่นยังคงรักษาไว้พวกเขาไม่แน่ใจว่าพารามิเตอร์ใดที่จะส่งผ่านไปยังแผนที่นี้
2. แก้ปัญหาโดยการเพิ่มคำอธิบายประกอบ @param ลงในพารามิเตอร์:
(1) เพิ่มคำอธิบายประกอบ @param ลงในพารามิเตอร์ในวิธีการของไฟล์ xxxmapper.java ค่าในคำอธิบายประกอบนี้สอดคล้องกับชื่อพารามิเตอร์ที่ใช้ในไฟล์ XML:
สายการบิน SelectEffectiveAirline (@param ("Departureairport") String DepartmentAirport,@param ("archariArport") archport arrivalairport,@param ("สถานะ") สถานะ BigDecimal);(2) ในเวลานี้สถานที่ที่สอดคล้องกันในไฟล์ XXXMApper.xml สามารถใช้งานได้ตามปกติในคำอธิบายประกอบ @Param:
<select id = "selectEffectiveAirline" resultmap = "baseresultmap" parameterType = "java.util.map"> เลือก <รวม refid = "base_column_list" /> fromusr_air_line <โดยที่ test = "uspecturaiR null "> และ arrival_airport = #{arrivalairport} </if> <ถ้า test =" สถานะ! = null "> และ status = #{สถานะ} </if> </where> </select>หมายเหตุ: ควรสังเกตว่าพารามิเตอร์ในการตัดสินเงื่อนไข IF นั้นแตกต่างจากที่อยู่ในคำสั่ง SQL ตัวแปรในการตัดสินหากไม่ได้เพิ่ม #{}
ด้านล่างนี้ฉันจะแนะนำให้คุณรู้จักสองวิธีในการผ่านพารามิเตอร์หลายตัวผ่าน mybatis
แผนที่ผ่านพารามิเตอร์หลายตัว
ParameterType อาจเป็นนามแฝงหรือชื่อที่ผ่านการรับรองอย่างสมบูรณ์แผนที่หรือ java.util.map ซึ่งทั้งสองอย่างนั้นก็โอเค
<select id = "selectblogbymap" parameterType = "แผนที่" resultType = "blog"> เลือก t.id, t.title, t.content จากบล็อก t โดยที่ t.title = #{h_title} และ t.content = #{h_content} sqlsessionfactory.opensession (); แผนที่ <string, Object> param = new hashmap <string, object> (); param.put ("h_title", "Oracle"); param.put ("h_content", "ลำดับผู้ใช้"); บล็อกบล็อก = (บล็อก) เซสชัน SESSECTONE ("CN.ENJOYLIFE.BLOGMAPPER.SELECTBLOGBYMAP", param); session.close (); System.out.println ("บล็อกชื่อ:"+blog.getTitle ()); - ผ่านพารามิเตอร์หลายตัวผ่าน Javabean
<select id = "selectblogbybean" parameterType = "blog" resultType = "blog"> เลือก t.id, t.title, t.content จากบล็อก twheret.title = #{title} และ t.content = #{content} บล็อกบล็อก = บล็อกใหม่ (); blog.settitle ("Oracle"); blog.setContent ("ใช้ลำดับ!"); บล็อก newBlog = (บล็อก) เซสชัน SESSECTONE ("CN.ENJOYLIFE.BLOGMAPPER.SELECTBLOGBYBEAN", บล็อก); session.close (); System.out.println ("รหัสบล็อกใหม่:"+newblog.getId ()); -