PS:Ibatis3に複数のパラメーターを渡すには2つの方法があります。1つはjava.mapを使用することであり、もう1つはJavabeanを使用することです。
1つのパラメーターのみがxxxmapper.xmlファイルに渡された場合、「_parameter」を使用してxxxmapper.javaで渡されたパラメーターを受信してクエリに置き換えるだけです。
(1)以下はxxxmapper.javaファイルで定義されています。
List <String> SelectAllairPortCode(ブールマッピング);
(2)この時点で、「_Parameter」を使用して、対応するxxxmapper.xmlファイルでこのパラメーターを受信できます。
<選択ID = "SelectAllairPortCode" resultType = "Java.lang.String" parameterType = "java.lang.boolean"> usr_air_lineユニオンからselect leative_airport from usr_air_line <if test = "_ parameter == true"> select rel_departure_air_air_air_line_air_line_line_line_line_line_line_line_line USR_AIR_LINEのUSR_AIR_LINEELECRECTREL_ARRIVAL_ARRIVAL_ARRIVAL_ARRIVAL_ARRIVER_ARRIVER_ARIVERPORTは、USR_AIR_LINE_LINEELECLECTREL_ARRIVAR_ARIVERPORTのUSR_AIR_LINEELECRECTREL_AIRPORTからUSR_AIR_LINE </if> </select>
ただし、xxxmapper.javaファイルに複数のパラメーターが渡された場合、上記のフォームを使用してパラメーターを受信することはできません。現時点では、この問題を解決するための2つの解決策があります。
マップ<文字列、オブジェクト>コレクションをXMLファイルに渡すと、マップコレクションのさまざまなパラメーターをXMLファイルで正常に使用できます。
特定の例は次のとおりです。
(1)以下はxxxmapper.javaファイルで定義されています。
リスト<Airline> findall(Map <String、Object> Parms);
(2)上記の特定の実装クラスにマップするパラメーターを渡す:
パブリックリスト<Airline> findall(pageinfo page、airline airline){hashmap <string、object> params = new hashmap <string、object>(); params.put( "page"、page); params.put( "airline"、airline); return airlinemapper.findall(params);}(3)この時点で、対応するxxxmapper.xmlファイルは「java.util.map」を使用してこのマップコレクションを受け取ります。
<sql id = "sqlfileders"> <bind name = "fileders" value = "#{'id': 'id'、 'departeAirport': 'leate_airport'、 'reldepartureairport': 'rel_departure_airport'、 'riverinairport': 'arriva l_airport '、' rerrivalivalairport ':' rel_arrival_airport '、' popstatus ':' pop_status '、' status ':' status '、' creator ':' creator '、' createTime ':' create_time '} " /> <bind name = "javapropertys" value = "#{'id': 'id'、 'leatment_airport': 'departureairport'、 'rel_departure_airport': 'reldepartureairport'、 'arvial_airport': 'arr Ivalairport '、' rel_arrival_airport ':' rerrivalairairport '、' pop_status ':' popstatus '、' status ':' status '、' creator '、' creator '、' createTime '} parametertype = "java.util.map"> <![cdata [select x。* from(select z。*、from(] from []]> select <increct refid = "base_column_list" /> fromusr_air_line <where> <where> <"airline.departureairport!= null"> lowing_airport = null #{airline.departureAirport} </if> <if stest = "airline.arrivalairport!= null"> and arvel_airairport =#{airline.arrivalairport} </if> <> "airline.reldepartureairport!= null"> and lel_departure_airport =#{airline.reldepartureairport} </if> <if> <if test = "airline.relarrivalairport!= null"> and rel_arrival_airport = {airline.relarrivalairport} </if> <if> <test = "airline.popstatus!= null"> and pop_status = null "> #{airline.popstatus} </if> <if> if test = "airline.status!= null"> and status =#{airline.status} </if> </where> <if> <"page.sortname!= null"> null "> <includ refid =" sqlfileders " value = "#this.fileders [page.sortname]"/> older by $ {orderfield} $ {page.sortorder} </if> <![cdata [)z where rownum <]>#{page.to} <注:上記の例は、ページネーションクエリデータを実装しています。マップを使用してパラメーターを渡すことは良くないことがわかります。これにより、インターフェイスにマップパラメーターが1つしかない可能性があるためです。他の人がそれを維持しているとき、彼らはこのマップにどのパラメーターを渡すかわかりません。
2。@Param Annotationをパラメーターに追加して問題を解決します。
(1)xxxmapper.javaファイルのメソッドのパラメーターに@paramアノテーションを追加します。この注釈の値は、XMLファイルで使用されるパラメーター名に対応しています。
航空会社Selectefectiveairline(@param( "departureairport")String DepartmentAirport、@param( "ArvenyAirport")String ArvenyAirport、@param( "status")bigdecimal status);
(2)この時点で、XXXMApper.xmlファイルの対応する場所は、@Param Annotationで正常に使用できます。
<選択id = "selectefectiveairline" resultmap = "baseeresultmap" parametertype = "java.util.map"> select <increct refid = "base_column_list" /> fromusr_air_line <ここで> null "> and Arrive_airport =#{arvelairport} </if> <if test =" status!= null ">およびstatus =#{status} </if> </where> </select>注:IF条件判断のパラメーターは、SQLステートメントのパラメーターとは異なる方法で書かれていることに注意する必要があります。判断が追加されない場合の変数#{}
以下に、mybatisを通して複数のパラメーターを渡す2つの方法を紹介します
マップは複数のパラメーターを渡します
ParameterTypeは、エイリアスまたは完全な資格のある名前、MAPまたはjava.util.mapであり、どちらも問題ありません。
<選択ID = "SelectBlogByMap" parameterType = "Map" resultType = "blog"> Select T.Id、T.Title、T.Content from blog t from blog t.t.title =#{h_title}およびt.Content =#{h_content} < sqlsessionfactory.opensession(); map <string、object> param = new hashmap <string、object>(); param.put( "h_title"、 "oracle"); param.put( "h_content"、 "ユーザーシーケンス");ブログblog =(blog)session.selectone( "cn.enjoylife.blogmapper.selectblogbymap"、param); session.close(); System.out.println( "ブログタイトル:"+blog.getTitle()); } Javabeanに複数のパラメーターを渡します
<select id="selectBlogByBean" parameterType="Blog" resultType="Blog">select t.ID, t.title, t.content from blog twheret.title = #{title}and t.content =#{content} </select>public void testSelectByBean() { SqlSession session = sqlSessionFactory.openSession();ブログblog = new blog(); blog.settitle( "oracle"); blog.setContent( "Sequence!");ブログnewblog =(blog)session.selectone( "cn.enjoylife.blogmapper.selectblogbybean"、blog); session.close(); System.out.println( "新しいブログID:"+newBlog.getId()); }