2017-06-05 5 views
0

Mein Mapper xml ist so.foreach für mybatis gibt Null Ergebnisse zurück

<mapper namespace="EmployeeDaoMapper"> 
<resultMap id="employeeResultMap" type="Employee"> 
    <result property="employeeName" column="name"/> 
    <result property="employeeId" column="employee_id"/> 
</resultMap> 


<select id="getEmployees" parameterType="list" resultMap="employeeResultMap"> 
<!--<select id="getEmployees" resultType="Employee">--> 
    SELECT 
    <foreach item="item" index="index" collection="list" separator="," > 
     #{item} 
    </foreach> 
    FROM employees 
    WHERE LOWER (name) LIKE LOWER(#{searchQuery} +'%') OR 
    LOWER(login) LIKE LOWER(#{searchQuery} +'%') OR 
    LOWER(employee_id) LIKE LOWER(#{searchQuery} + '%') 
    LIMIT #{resultsLimit} 

</select> 

EmployeeMapper Schnittstelle

List<Employee> getEmployees(@Param("searchQuery") String searchQuery, @Param("resultsLimit") int 
     resultsLimit, @Param("list") List<String> attributes); 

Abfrage gibt Liste von null.

Anstelle von foreach, wenn ich direkt Spaltennamen hinzufügen, dann funktioniert es gut.

Ich bin mir nicht sicher, welchen Fehler ich mache. Ich habe die Abfrage überprüft, sie erstellt die Abfrage korrekt und kann die Ergebnisse nicht abrufen.

Antwort

2

Versuchen Sie, # {item} auf $ {item} zu ändern. Mit # {item} teilen Sie MyBatis mit, dass eine vorbereitete Anweisungsparametermarkierung vorhanden sein sollte, die für eine Auswahlspaltenliste ungültig ist. Wenn Sie $ {item} verwenden, schreibt MyBatis die Zeichenfolge direkt in SQL.

+0

Worth vorgesehen sind, zu erwähnen, dass dies ein Merkmal von neuerer Version von Mybatis ist. +1 obwohl. –

0

Ich stimme Jeff Butler zu.

würde ich ändern parameterType="list"-parameterType="map" hinzufügen, wie benannte Parameter über eine Karte