ملاحظة: هناك طريقتان لتمرير معلمات متعددة في IBATIS3: أحدهما هو استخدام java.map ، والآخر هو استخدام Javabean.
عندما يتم تمرير معلمة واحدة فقط إلى ملف xxxmapper.xml ، يمكنك ببساطة استخدام "_parameter" لتلقي المعلمات التي تم تمريرها في xxxmapper.java واستبدالها في الاستعلام ، على سبيل المثال:
(1) يتم تعريف ما يلي في ملف xxxmapper.java:
قائمة <Tring> SelectAllairportCode (رسم الخرائط المنطقية) ؛
(2) في هذا الوقت ، يمكنك استخدام "_parameter" لتلقي هذه المعلمة في ملف xxxmapper.xml المقابل:
<حدد ID = "selectallairportcode" resultType = "java.lang.string" parametertype = "java.lang.boolean" usr_air_line unionelectrel_arrival_airport من usr_air_line unilectrel_arrival_airport من usr_air_line unilectrel_airport من usr_air_line unilectrel_arrival_airport من usr_air_line </select> </select>
ومع ذلك ، إذا تم تمرير معلمات متعددة في ملف xxxmapper.java ، فلا يمكن استخدام النموذج أعلاه لتلقي المعلمات. في هذا الوقت ، هناك حلان لحل هذه المشكلة:
تمرير خريطة <سلسلة ، كائن> في ملف XML ، ثم يمكن استخدام المعلمات المختلفة في مجموعة MAP بشكل طبيعي في ملف XML.
أمثلة محددة هي كما يلي:
(1) يتم تعريف ما يلي في ملف xxxmapper.java:
قائمة <Iroline> findall (خريطة <سلسلة ، كائن> parms) ؛
(2) تمرير المعلمات إلى MAP في فئة التنفيذ المحددة المحددة أعلاه:
القائمة العامة <Iroline> findall (صفحة pageInfo ، خطوط الطيران) {hashmap <string ، object> params = new hashmap <string ، object> () ؛ params.put ("page" ، page) ؛ params.utp(3) في هذا الوقت ، يستخدم ملف xxxmapper.xml المقابل "java.util.map" لتلقي مجموعة الخريطة هذه:
<sql id = "sqlfileders"> <bind name = "fileders" value = "#{'id': 'id' ، 'everyureairport': 'everure_airport' ، 'reldepartureairport': 'rel_departure_airport' ، 'Arrivalairport': 'arriva l_airport '،' relarrivialairport ':' rel_arrival_airport '،' popstatus ':' pop_status '،' status ':' status '،' creator ':' creator '،' createTime ':' Create_time '} " /> <bind Name = "javapropertys" value = "#{'id': 'id' ، 'everure_airport': 'everyureairport' ، 'rel_departure_airport': 'reldepartureairport' ، 'enrival_airport': 'arr Ivalairport '،' rel_arrival_airport ':' relarrivialairport '،' pop_status ':' popstatus '، "الحالة": "الحالة" ، "Creator": "Creator" ، "Create_time": "CreateTime"} " /> </sql> <select id =" findall "resultmap =" baseresultmap " parametertype = "java.util.map"> <! #{eriline.departureairport} </if> <if test = "eriline.arrivialairport! = null"> و Arrival_airport = #{eriline.arrivalairport} </if> <test = "Airline.ReldepartureAirport! = null"> و rel_departure_airport. = #{eriline.reldepartureairport} </if> <if test = "eriline.relarrivivalport! = null"> و rel_arrival_airport = #{firline.RelarivalPort} </if> if test = "airline.popstatus! = null" #{eriline.popstatus} </fire> <if test = "eriline.status! = null"> و status = #{Airline.Status} </fort /> order by $ {orderfield} $ {page.sortorder} </if> <!ملاحظة: مثال أعلاه ينفذ بيانات استعلام ترقيم الصفحات. يمكننا أن نجد أن استخدام MAP لتمرير المعلمات ليس جيدًا ، لأنه يجعل من الممكن وجود معلمة خريطة واحدة فقط في الواجهة. عندما يحتفظ الآخرون بها ، فإنهم غير متأكدين من المعلمات التي يجب أن تنتقل إلى هذه الخريطة.
2. حل المشكلة عن طريق إضافة التعليق التوضيحي param إلى المعلمات:
(1) أضف التعليق التوضيحي param إلى المعلمات في طريقة ملف xxxmapper.java. تتوافق القيم في هذا التعليق التوضيحي مع اسم المعلمة المستخدم في ملف XML:
الخطوط الجوية SelectEffectiveAline (param ("keingureairport") string department ،@param ("ArvivalAirport") string Arrivalairport ،@param ("status") حالة BigDecimal) ؛(2) في هذا الوقت ، يمكن استخدام الأماكن المقابلة في ملف xxxmapper.xml بشكل طبيعي في التعليق التوضيحي param:
<select id = "selecteffectiveairline" resultmap = "baseresultmap" parametertype = "java.util.map"> حدد <تضمين refid = "base_column_list" /> fromusr_air_line <where> <if test = "everaveReairport! = null" NULL "> و ARVILS_AIRPORT = #{ARVIRVIRAIRPORT} </if> <if test =" status! = null "> و status = #{status} </if> </where> </select>ملاحظة: تجدر الإشارة إلى أن المعلمات في الحكم إذا كانت الحالة مكتوبة بشكل مختلف عن تلك الموجودة في عبارات SQL. تتم إضافة المتغيرات في الحكم إذا لم يتم إضافة #{}
أدناه سوف أقدم لكم طريقتين لتمرير معلمات متعددة من خلال MyBatis
تمر الخريطة معلمات متعددة
يمكن أن يكون ParameterType اسمًا اسمًا أو اسمًا مؤهلاً بالكامل أو خريطة أو java.util.map ، وكلاهما على ما يرام.
<حدد ID = "selectBlogByMap" parametertype = "map" resulttype = "blog"> حدد t.id ، t.title ، t.content from blog t where t.title = #{h_title} و t.content = #{h_content} </select> sqlsessionfactory.opensession () ؛ خريطة <string ، object> param = new hashmap <string ، Object> () ؛ param.put ("h_title" ، "oracle") ؛ param.put ("h_content" ، "تسلسل المستخدم") ؛ مدونة المدونة = (المدونة) session.selectone ("cn.enjoylife.blogmapper.selectblogbymap" ، param) ؛ session.close () ؛ System.out.println ("عنوان المدونة:"+blog.getTitle ()) ؛ } تمرير معلمات متعددة من خلال جافابان
<حدد ID = "selectBlogByBean" parametertype = "blog" resultType = "blog"> SELECT T.ID ، T.TITLE ، T.CONTENT من blog twheret.title = #{title} و t.content = #{content} </select> public void testselectbean () {sqlsession = sqlsession. مدونة المدونة = مدونة جديدة () ؛ blog.Settitle ("Oracle") ؛ blog.setContent ("استخدام التسلسل!") ؛ Blog NewBlog = (blog) session.selectone ("cn.enjoylife.blogmapper.selectblogbybean" ، blog) ؛ session.close () ؛ System.out.println ("معرف المدونة الجديد:"+newblog.getId ()) ؛ }