Me temo solución de Evgeny sólo parece funcionar porque hay un pequeño error en el ejemplo de código:
inString = "," + element;
Lo que significa that inString siempre contiene un único y último número (en lugar de una lista de números concatenados).
Esto debería ser en realidad
inString += "," + element;
Por desgracia, si no se corrige este error la base de datos de informes se inicia excepciones "número incorrecto" porque MyBatis conjuntos "1,2,3" como un parámetro de cadena y la base de datos simplemente intenta convertir esta cadena a un número:/
Por otro lado, la anotación @SelectProvider, como la describe Mohit, funciona bien. Solo se debe tener en cuenta que crea una nueva declaración cada vez que ejecutamos la consulta con diferentes parámetros dentro de la cláusula IN en lugar de reutilizar el PreparedStatement existente (ya que los parámetros dentro de la IN-Clause están codificados dentro del SQL en lugar de siendo establecido como los parámetros de la declaración preparada). Esto a veces puede provocar pérdidas de memoria en la base de datos (ya que el DB necesita almacenar más y más declaraciones preparadas y potencialmente no reutilizará los planes de ejecución existentes).
Se puede intentar mezclar @SelectProvider y custom typeHandler. De esta forma, uno puede usar @SelectProvider para crear una consulta con tantos marcadores de posición dentro de "IN (...)" como sea necesario y luego reemplazarlos todos en el Administrador de tipos personalizado. Sin embargo, se pone un poco complicado.
normal SQL requiere SQL dinámico para utilizar una variable que representa una lista de valores separados por comas –
@OMG Ponies: Mis disculpas, ¿no estoy seguro de lo que intentan decir? Si tuviera que tomar su sabiduría y aplicarla a este problema, ¿cómo se vería mi solución específicamente? – dirtyvagabond
Nunca he trabajado con iBatis, pero ¿puede crear la instrucción SQL como una cadena (incluidos los contenidos de las variables) antes de que ocurra algo más? Eso es todo lo que el SQL dinámico realmente es ... –