PS: Il existe deux façons de passer plusieurs paramètres dans Ibatis3: l'un consiste à utiliser java.map, et l'autre est d'utiliser JavaBean.
Lorsqu'un seul paramètre est transmis au fichier xxxmapper.xml, vous pouvez simplement utiliser "_Parameter" pour recevoir les paramètres passés dans xxxmapper.java et les remplacer dans la requête, par exemple:
(1) Les éléments suivants sont définis dans le fichier xxxmapper.java:
List <string> selectAlArportCode (booléen mapping);
(2) À l'heure actuelle, vous pouvez utiliser "_Parameter" pour recevoir ce paramètre dans le fichier xxxmapper.xml correspondant:
<select id = "selectAlArportCode" resultType = "java.lang.string" ParameterType = "java.lang.boolean"> Sélectionnez Départ_airport dans USR_Air_line Union Selectarrival_airport From USR_Air_Line <if test = "_ Paramètre == true"> select de la protection_Arport USR_AIR_LINE UNIONELECTREL_ARRIVAL_Airport de USR_AIL_LINE Unionelectrel_arrival_airport à partir de USR_AIL_LINE UNIONECTEL_AIRPORT D'USR_AIL_LINE UnionElectrel_arrival_airport à partir de USR_AR_LINE </ if> </ Select>
Cependant, si plusieurs paramètres sont passés dans le fichier xxxmapper.java, le formulaire ci-dessus ne peut pas être utilisé pour recevoir des paramètres. Pour le moment, il existe deux solutions pour résoudre ce problème:
Passez une collection Map <String, Object> dans le fichier XML, puis les différents paramètres de la collection de cartes peuvent être utilisés normalement dans le fichier XML.
Des exemples spécifiques sont les suivants:
(1) Les éléments suivants sont définis dans le fichier xxxmapper.java:
List <Airline> findall (map <string, object> parms);
(2) passer des paramètres pour mapper dans la classe d'implémentation spécifique définie ci-dessus:
public List <Airline> FindAll (page PageInfo, Airline Airline) {Hashmap <String, Object> Params = new HashMap <String, Object> (); params.put ("page", page); params.put ("Airline", Airline); return Airlinematter.Findall (params);}(3) À l'heure actuelle, le fichier xxxmapper.xml correspondant utilise "java.util.map" pour recevoir cette collection de cartes:
<sql id = "sqlfileders"> <bind name = "fileders" value = "# {'id': 'id', 'DepartUreAirport': 'Departture_airport', 'redepartureAirport': 'rel_departture_airport', 'ArrivalArport': 'Arriva L_airport ',' realarrivalArport ':' rel_arrival_airport ',' popstatus ':' pop_status ',' status ':' status ',' Creator ':' Creator ',' CreateTime ':' Create_time '} " /> <bind name = "javapropertys" value = "# {'id': 'id', 'Departture_airport': 'DepartUreAirport', 'rel_departure_airport': 'reldepartureairport', 'arrival_airport': 'arrt ivalairport ',' rel_arrival_airport ':' realarrivalArport ',' pop_status ':' popstatus ',' status ':' status ',' Creator ':' Creator ',' Create_time ':' CreateTime '} "/> </ sql> <Select Id =" findall "resultMap =" BasereSultMap " ParameterType = "java.util.map"> <! [cdata [select x. * From (select z. *, Rownum Numbers from (]]> SELECT <inclure refid = "base_column_list" /> fromusr_air_line <Where> <if test = "Airline.DepartureArport! = Null"> Département_airport = # {Airline.DepartreAirport} </ if> <if test = "Airline.arrivalAirport! = NULL"> Et Arrival_airport = # {Airline.arrivalAirport} </ if> <if test = "Airline.RelDeparTureAirport! = Null"> et re_departture_airport = # {Airline. # {Airline.popstatus} </ if> <if test = "Airline.status! = Null"> et status = # {Airline.Status} </ if> </ Where> <if test = "Page.SortName! = Null"> <inclure refid = "sqlfileders" /> <bink named = "OrderField" Value = "# this.fileders [Page". /> Order par $ {OrderField} $ {page.sortOrder} </ if> <! [cdata [) z où rownum <]]> # {page.to} <! [cdata [) x où x.numbers> =]]> # {page.from} </lect>Remarque: L'exemple ci-dessus implémente les données de requête de pagination. Nous pouvons constater que l'utilisation de MAP pour passer les paramètres n'est pas bonne, car cela permet qu'il n'y ait qu'un seul paramètre MAP dans l'interface. Lorsque d'autres le maintiennent, ils ne sont pas sûrs des paramètres à passer dans cette carte.
2. Résolvez le problème en ajoutant une annotation @param aux paramètres:
(1) Ajouter une annotation @param aux paramètres dans la méthode du fichier xxxmapper.java. Les valeurs de cette annotation correspondent au nom du paramètre utilisé dans le fichier XML:
AIRLINES SELECTEFFECTIVEAIRLINE (@param ("DepartUreAirport") String DepartmentAirport, @ param ("ArrivalAirport") String ArrivalAirport, @ param ("statut") BigDecimal Status);(2) À l'heure actuelle, les lieux correspondants du fichier xxxmapper.xml peuvent être utilisés normalement dans l'annotation @param:
<select id = "selecEffectiveAirline" resultMap = "baseresultmap" ParameterType = "java.util.map"> SELECT <inclure refid = "base_column_list" /> fromusr_air_line <Where> <if test = départeairport! = null "> Département_airport = # {départiage null "> et arrival_airport = # {ArrivalAirport} </ if> <if test =" status! = null "> et status = # {status} </ if> </ where> </lect>Remarque: Il convient de noter que les paramètres du jugement de condition IF sont écrits différemment de ceux des instructions SQL. Les variables du jugement IF ne sont pas ajoutées # {}
Ci-dessous, je vous présenterai deux méthodes pour passer plusieurs paramètres via mybatis
La carte passe plusieurs paramètres
ParameterType peut être un alias ou un nom entièrement qualifié, map ou java.util.map, qui sont tous les deux OK.
<select id="selectBlogByMap" parameterType="map" resultType="Blog"> select t.ID, t.title, t.content FROM blog t where t.title = #{h_title} and t.content =#{h_content} </select> public void testSelectByMap() { SqlSession session = SqlSessionFactory.OpenSession (); Map <string, objet> param = new hashmap <string, objet> (); param.put ("h_title", "oracle"); param.put ("h_content", "séquence utilisateur"); Blog blog = (blog) session.selectone ("cn.enjoylife.blogmapper.selectblogbymap", param); session.close (); System.out.println ("Titre du blog:" + blog.getTitle ()); } Passer plusieurs paramètres via Javabean
<select id = "selectBlogByBean" ParameterType = "blog" resultType = "blog"> SELECT T.ID, T.TITLE, T.Content dans Blog Twheret.Title = # {Title} et T.Content = # {Content} </ Select> public Void TestSelectByBean () {SqlSession Session = SQLSSESSESSESSSACTORY.OPPENSESSE; Blog blog = nouveau blog (); blog.setTitle ("Oracle"); blog.setContent ("Utiliser la séquence!"); Blog newblog = (blog) session.selectone ("cn.enjoylife.blogmapper.selectblogbybean", blog); session.close (); System.out.println ("New Blog ID:" + newblog.getID ()); }