PD: Hay dos formas de pasar múltiples parámetros en Ibatis3: una es usar java.map, y el otro es usar javabean.
Cuando solo se pasa un parámetro al archivo xxxmapper.xml, simplemente puede usar "_parameter" para recibir los parámetros pasados en xxxmapper.java y sustituirlos en la consulta, por ejemplo:
(1) Lo siguiente se define en el archivo xxxmapper.java:
Lista <String> selectAllairPortCode (mapeo boolean);
(2) En este momento, puede usar "_parameter" para recibir este parámetro en el archivo xxxmapper.xml correspondiente:
<select id = "selectAllairPortCode" dentType = "java.lang.string" parametertype = "java.lang.boolean"> seleccione Salida_Airport desde usr_air_line union selectArvival_airport desde usr_air_line <if "if" _ parameter == true "> union select rel_deParTure_airport desde usr_line unione union_arport USR_AIR_LINE UNIONELECLEL_Arrival_airport desde USR_AIR_LINE UNIONELECTREL_ARRIVAL_AIRPORT DESDE USR_AIR_LINE UNIONELECTREL_AIRPORT DESDE USR_AIR_LINE UNIONELECLEL_ARRIVAL_AIRPORT DESDE USR_AIR_LINE </if> </select>
Sin embargo, si se pasan múltiples parámetros en el archivo xxxmapper.java, el formulario anterior no se puede usar para recibir parámetros. En este momento, hay dos soluciones para resolver este problema:
Pase una colección MAP <String, Object> en el archivo XML, y luego los diversos parámetros en la colección de mapas se pueden usar normalmente en el archivo XML.
Los ejemplos específicos son los siguientes:
(1) Lo siguiente se define en el archivo xxxmapper.java:
List <irineline> findall (map <string, object> parms);
(2) Pase los parámetros para mapear en la clase de implementación específica definida anteriormente:
Lista pública <A Airline> findall (página de PageInfo, aerolínea de la aerolínea) {Hashmap <String, Object> Params = new HashMap <String, Object> (); Params.put ("Page", Page); Params.put ("Aerolínea", Aerolínea); return AirLineMapper.Findall (params);}(3) En este momento, el archivo xxxmapper.xml correspondiente utiliza "java.util.map" para recibir esta colección de mapas:
<sql id = "sqlfileders"> <bind name = "fileDers" value = "#{'id': 'id', 'departureAirport': 'Departure_airport', 'relDePartureAirport': 'REL_DEPARTURE_AIRPORT', 'LLECLEAIRPORT': 'ARRIVA L_airport ',' RelarrivicaAirport ':' rel_arrival_airport ',' popStatus ':' pop_status ',' status ':' status ',' creador ':' creador ',' createTime ':' create_time '} " /> <<bind name = "javapropertys" value = "#{'id': 'id', 'salto_airport': 'deficureAirport', 'rel_departure_airport': 'reldepartureAirport', 'arrival_airport:' arrrem iSalairport ',' Rel_arrival_airport ':' Relarrivalairport ',' 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 #{airline.departureAirport}</if><if test="airline.arrivalAirport != null">and ARRIVAL_AIRPORT=#{airline.arrivalAirport}</if><if test="airline.relDepartureAirport != null">and REL_DEPARTURE_AIRPORT =#{airline.relDepartureAirport}</if><if test = "Airline.RelArRivalairPort! = NULL"> y REL_ARRIVA_AIRPORT = #{airline.RelArRivalairPort} </if> <if test = "airline.popStatus! = null"> y pop_status = #{airline.popStatus} </if> <if test = "airine.status! = null"> #{airline.status} </if> </where> <if test = "page.sortname! = null"> <include refid = "sqlfileders"/> <bind name = "orderfield" value = " #this.fileders [page.sortname]"/> orden por $ {orderfield} $ {page.sortorder} </if> <! [CDATA [) ]]>#{page.to} <! [cdata [) x donde x.numbers> =]]>#{page.from} </select>Nota: El ejemplo anterior implementa datos de consulta de paginación. Podemos encontrar que usar los parámetros de mapa para pasar no es bueno, porque esto hace posible que solo haya un parámetro de mapa en la interfaz. Cuando otros lo mantienen, no están seguros de qué parámetros pasar a este mapa.
2. Resuelva el problema agregando anotación @param a los parámetros:
(1) Agregue la anotación de @param a los parámetros en el método del archivo xxxmapper.java. Los valores en esta anotación corresponden al nombre del parámetro utilizado en el archivo XML:
Airlines selectEffectiveArline (@param ("departureAirport") String DepartmentPortport,@param ("Lirlairport") Cadena LlevairPort,@Param ("Estado") BigDecimal Status);(2) En este momento, los lugares correspondientes en el archivo xxxmapper.xml se pueden usar normalmente en la anotación @param:
<select id = "selectEffectiveArline" resultMap = "BaseSultMap" parametertype = "java.util.map"> select <incluido refid = "base_column_list" /> fromusr_air_line <where> <if test = "departureairport! = null"> departure_airport = #{departureeirport if <if <if test! NULL "> y ARRILLE_AIRPORT = #{ArriveAlArport} </if> <if test =" status! = null "> y status = #{status} </if> </where> </select>Nota: Cabe señalar que los parámetros en el juicio de la condición if se escriben de manera diferente a los de las declaraciones SQL. Las variables en el juicio if no se agregan #{}
A continuación le presentaré dos métodos para pasar múltiples parámetros a través de mybatis
El mapa pasa múltiples parámetros
Parametertype puede ser un alias o un nombre totalmente calificado, MAP o java.util.map, los cuales están bien.
<select id = "selectblogbymap" parametertype = "map" dentType = "blog"> select t.id, t.title, t.content desde el blog t donde t.title = #{h_title} y t.content = #{h_content} </select> public void testelectBymap () {sqlsession session = session = sqlSessionFactory.opensession (); Map <string, object> param = new HashMap <String, Object> (); param.put ("h_title", "oracle"); param.put ("h_content", "secuencia de usuario"); Blog Blog = (Blog) Session.Selectone ("cn.enjoylife.blogmapper.selectblogbymap", param); session.close (); System.out.println ("Título del blog:"+Blog.gettitle ()); } Pasar múltiples parámetros a través de Javabean
<select id = "selectblogbybean" parametertype = "blog" dentType = "blog"> select t.id, t.title, t.content de blog twheret.title = #{title} y t.content = #{content} </select> public void testSelectBean () {sqlSession session = sqlSessionsession.ApSession (); Blog blog = nuevo blog (); Blog.settitle ("Oracle"); Blog.setContent ("¡Use secuencia!"); Blog NewBlog = (Blog) Session.Selectone ("cn.enjoylife.blogmapper.selectblogbybean", blog); session.close (); System.out.println ("Nuevo ID de blog:"+newBlog.getID ()); }