2017-11-24 2 views
0

Ich muss eine Select-Abfrage mit vielen Parametern in MyBatis, ich möchte die Standard-Mapper XML-Dateistruktur verwenden und fügen Sie ein "UPPER (column_name) =?" zu der Ergebnis-konvertierten Abfrage. Wie kann ich ? HierMyBatis, UPPER in einer WHERE-Bedingung

ist meine where-Klausel

<sql id="My_Select"> 
    <where> 
     <foreach collection="oredCriteria" item="criteria" separator="or"> 
      <if test="criteria.valid"> 
       <trim prefix="(" prefixOverrides="and" suffix=")"> 
        <foreach collection="criteria.criteria" item="criterion"> 
         <choose> 
          <when test="criterion.noValue"> 
           and ${criterion.condition} 
          </when> 
          <when test="criterion.singleValue"> 
           and UPPER(${criterion.condition} #{criterion.value}) 
          </when> 
          <when test="criterion.betweenValue"> 
           and ${criterion.condition} #{criterion.value} 
           and 
           #{criterion.secondValue} 
          </when> 
          <when test="criterion.listValue"> 
           and ${criterion.condition} 
           <foreach close=")" collection="criterion.value" item="listItem" 
            open="(" separator=","> 
            #{listItem} 
           </foreach> 
          </when> 
         </choose> 
        </foreach> 
       </trim> 
      </if> 
     </foreach> 
    </where> 
</sql> 

und hier ist die komplette select-Anweisung:

<select id="mySelect" parameterType="myDataExample" 
    resultMap="myResultMap"> 
    select 
    <if test="distinct"> 
     distinct 
    </if> 
    <include refid="my_Column_List" /> 
    from istanza_metadato 
    <if test="_parameter != null"> 
     <include refid="My_Select" /> 
    </if> 
    <if test="orderByClause != null"> 
     order by ${orderByClause} 
    </if> 
</select> 

ich immer erhalten Fehler wie dieser

Der Fehler beim Einstellen von Parametern

...

WHERE (UPPER (id_metadato =?) Und UPPER (valore =))

Ich fühle mich in der Nähe der Lösung bin, aber ich einen Weg nicht finden kann. Danke an alle

+0

Sie sollten nicht "UPPER" einen Ausdruck, fügen Sie "obere" Funktion in Ihrem Kriterium. – Blank

+0

Könnten Sie bitte mit einem Beispiel erklären? – Fjordo

+0

'WHERE (UPPER (id_metadato) =? Und UPPER (valore) =?)' Wird funktionieren. – Blank

Antwort

0

Ich löste mein Problem, Spezifikationen wurden geändert und jetzt brauche ich nicht mehr das obere. Übrigens habe ich dieses Problem gelöst, indem ich die mybatis-ähnliche Abfragesprache in reine SQL-Sprache geändert habe.