추신 : IBATIS3에는 여러 매개 변수를 전달하는 두 가지 방법이 있습니다. 하나는 java.map을 사용하고 다른 하나는 Javabean을 사용하는 것입니다.
하나의 매개 변수 만 xxxmapper.xml 파일로 전달되면 "_parameter"를 사용하여 xxxmapper.java에 전달 된 매개 변수를 받고 쿼리로 대체 할 수 있습니다.
(1) 다음은 xxxmapper.java 파일에 정의되어 있습니다.
List <string> selectallairportCode (부울 매핑);
(2) 현재 "_Parameter"를 사용하여 해당 xxxmapper.xml 파일 에서이 매개 변수를 수신 할 수 있습니다.
<select id = "selectAllAirportCode"resultType = "java.lang.string"parametertype = "java.lang.boolean"> usr_air_line unsin selectarriver_airport에서 usr_air_line에서 nextarriver_airport <_ parameter == true "> Usr_Air_Airport에서 usr_Airport에서 USR_AIRPORT에서 USR_AIRPORT _AIRPORT에서 select releparture_airport <usr_air_line에서 select select releparture_airport < USR_AIR_LINE USR_AIR_LINE USR_AIR_LINE UNIONELLECTREL_AIRPORT의 USR_AIR_LINE UNINELLINE의 UNIONELLINE_ARIVAL_AIRPORT에서 USR_AIR_LINE UnionElectrel_ARrival_airport의 UnionElectrel_arrival_airport에서 usr_air_line Unionelectrel_arrival_airport </if> </select>
그러나 여러 매개 변수가 xxxmapper.java 파일에 전달되면 위의 양식을 사용하여 매개 변수를 수신 할 수 없습니다. 현재이 문제를 해결하기위한 두 가지 솔루션이 있습니다.
<String, Object> Collection을 XML 파일로 전달 한 다음 맵 컬렉션의 다양한 매개 변수를 XML 파일에서 정상적으로 사용할 수 있습니다.
구체적인 예는 다음과 같습니다.
(1) 다음은 xxxmapper.java 파일에 정의되어 있습니다.
List <airline> findall (map <String, Object> Parms);
(2) 상기 정의 된 특정 구현 클래스에서 매핑 할 매개 변수를 전달합니다.
공개 목록 <airline> findall (pageinfo page, Airline Airline) {hashmap <string, 객체> 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', 'leaftureeairport': 'leaurture_airport', 'reldepartureeairport': 'rel_departure_airport', 'arrivalairport': 'Arriva l_airport ','relarrivalairport ':'rel_arrival_airport ','popstatus ':'pop_status ','status ':'status ','creator ':'creator ','createetime ':'create_time '} " /> <bind name = "javapropertys"value = "#{ 'id': 'id', 'leafture_airport': 'leaftureairport', 'rel_departure_airport': 'reldepartureairport', 'arrival_airport': 'arr ivalairport ','rel_arrival_airport ':'relarrivalairport ','pop_status ':'popstatus ','status ':'status ','creator ':'creator ','create_time ':'createTime '} " /> < /sql> < /sql> < /sql> < /sql> < /sql> < /sql> parametertype = "java.util.map"> <! #{airline.departureeairport} </if> <if test = "airline.arrivalairport! = null"> 및 arrival_airport = #{airline.arrivalairport} </if> <if test = "airline.reldepartureeairport! = nULL"> 및 REL_DEPARTURE_AIRPORT = #{airline.reldepartureairport} </if> <if test = "airline.rillarriverport! = null"> and rel_arrival_airport = {airline.rillarrivalairport} </if> <if test = "airline.popstatus! = null"> 및 pop_status = #{airpop_status = <airline.pop_status = # test = "airline.status! = null"> and status = #{airline.status} < /if> < /< /where> <page.sortName! = null "> <포함 refid ="sqlfileders " /> <bind name ="orderfield "value =" #this.fileders [page.fileders] " /> order reb reb reb reb reb re re re re inder re inder re refid ="sqlfileders " /> < $ {page.sortorder} </if> <! [cdata [) Z where rownum <]]>#{page.to} <!참고 : 위의 예는 Pagination Query 데이터를 구현합니다. 맵을 사용하여 매개 변수를 전달하는 것이 좋지 않다는 것을 알 수 있습니다. 이로 인해 인터페이스에 맵 매개 변수가 하나만있을 수 있기 때문입니다. 다른 사람들이 그것을 유지할 때 어떤 매개 변수 가이지도에 전달 해야하는지 잘 모르겠습니다.
2. 매개 변수에 @Param 주석을 추가하여 문제를 해결하십시오.
(1) xxxmapper.java 파일의 메소드에서 @param 주석을 매개 변수에 추가하십시오. 이 주석의 값은 XML 파일에 사용 된 매개 변수 이름에 해당합니다.
항공사 SelectEffectiveAirline (@Param ( "LeaurTureAirport") String DepartmentAirport,@param ( "arriverairport") String ArrivelAirport,@param ( "status") bigdecimal 상태);
(2) 현재 XXXMapper.xml 파일의 해당 장소는 @param 주석에서 정상적으로 사용할 수 있습니다.
<select id = "selectefectiveairline"resultmap = "baseResultMap"parameterType = "java.util.map"> select <include refid = "base_column_list" /> fromusr_air_line <where> <test = "bextureeairport! = null"> leveriture_airport = {if test = << /if> << /if>. null "> 및 arrival_airport = #{arrivalairport} </if> <if test ="status! = null "> 및 status = #{status} </if> </where> </select>참고 : IF 조건 판단의 매개 변수는 SQL 문의 매개 변수와 다르게 기록됩니다. IF 판단의 변수가 추가되지 않습니다 #{}
아래는 mybatis를 통해 여러 매개 변수를 전달하는 두 가지 방법을 소개합니다.
맵은 여러 매개 변수를 전달합니다
ParameterType는 별칭이거나 자격을 갖춘 이름,지도 또는 java.util.map 일 수 있으며 둘 다 괜찮습니다.
<select id = "selectBlogBymap"ParameterType = "map"resultType = "blog"> t.Id, t.title, t.content where t.title = #{h_title} 및 t.content = #{h_content} </select> public void testelectbymap () {sqls session = {sqls session = {sqls session = {h_content} </select = sqlsessionfactory.opensession (); map <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 ()); } Javabean을 통해 여러 매개 변수를 전달합니다
<select id = "selectBlogbybean"parametertype = "blog"resulttype = "blog"> blog t 블로그 블로그 = 새로운 블로그 (); Blog.SetTitle ( "Oracle"); blog.setContent ( "사용 시퀀스!"); Blog NewBlog = (Blog) Session.SelectOne ( "CN.enjoyLife.BlogMapper.SelectBlogbybean", Blog); session.close (); System.out.println ( "새 블로그 ID :"+newBlog.getId ()); }