Ancien problème mais je voulais intervenir. Je suis d'accord avec @leonbloy, ibatis fournit des fonctionnalités pour éviter ce que vous essayez de faire. Le lien ibatis pour dynamic queries devrait vous aider à le comprendre.
Voici un exemple simple que je l'ai utilisé:
avoir une méthode pour passer vos arguments comme un dictionnaire
public IList<ITraceLogRecord> GetTraceLogRecords(string systemType, string plantName, int? deviceId, DateTime startTime, DateTime endTime, string logDescription, string loggerName, List<int> traceLevelIds)
{
IDictionary<string, object> traceQueryParameters = new Dictionary<string, object>();
traceQueryParameters.Add("deviceId", deviceId);
traceQueryParameters.Add("startTime", startTime);
traceQueryParameters.Add("endTime", endTime);
traceQueryParameters.Add("logDescription", logDescription);
traceQueryParameters.Add("loggerName", loggerName);
traceQueryParameters.Add("traceLevelIds", traceLevelIds);
return DataSources.GetDbConnectionName(systemType, plantName).QueryForList<ITraceLogRecord>("SelectTraceLogRecords", traceQueryParameters);
}
Créer votre instruction select et vérifiez si les entrées sont nulles pour savoir si les inclure dans votre clause where:
<select id="SelectTraceLogRecords" parameterClass="System.Collections.IDictionary" resultMap="TraceLogRecordMap">
SELECT TraceLevelId, Trace, DeviceId, LoggerName, CreatedTimeStamp, ThreadId
FROM Trace
<dynamic prepend="WHERE">
<isNotNull prepend="AND" property="deviceId">
DeviceId = #deviceId#
</isNotNull>
<isNotNull prepend="AND" property="startTime">
CreatedTimeStamp >= #startTime#
</isNotNull>
<isNotNull prepend="AND" property="endTime">
<![CDATA[CreatedTimeStamp <= #endTime#]]>
</isNotNull>
<isNotNull prepend="AND" property="logDescription">
Trace LIKE #logDescription#
</isNotNull>
<isNotNull prepend="AND" property="loggerName">
LoggerName LIKE #loggerName#
</isNotNull>
<isNotNull prepend="AND" property="traceLevelIds">
<iterate property="traceLevelIds" open="(" close=")" conjunction="OR">
TraceLevelId = #traceLevelIds[]#
</iterate>
</isNotNull>
</dynamic>
</select>
Puis-je savoir comment passer la chaîne à I batis et gérer son jeu de résultats. J'ai essayé avec ci-dessus instruction, mais pas sûr comment passer la chaîne de requête et gérer le jeu de résultats –