Consulta combinada dinámica de múltiples condiciones y consulta difusa de Ibatis
En primer lugar, utilicé la siguiente condición al comienzo de la pregunta para la consulta difusa: seleccionar * del usuario donde el nombre es como % # valor # %, pero no pude hacer nada. Parece que se informó un error. Más tarde encontré una solución en Internet, que consiste en utilizar $ en lugar de #.
& gtEscribe: Como %$value$% es suficiente
& gtAl mismo tiempo, encontré otro método, pero lo intenté durante mucho tiempo, pero simplemente no funcionó. trabajar . El método es: me gusta% | #valor# ||%. Los resultados de la consulta son en realidad todos. Más tarde, alguien en Internet dijo que este método de escritura es el método de escritura de Oracle.
& gtSi es mysql, debería escribirse como: nombre como concat(%#value:varchar#%), pero no lo he probado. Hay una manera que funcionará de todos modos.
Probé el primer método con éxito, pero aún no he probado el último. Los amigos interesados pueden probarlo.
El segundo gran problema es que estaba pensando en este problema al comienzo de la consulta de combinación de múltiples condiciones. No puedo escribir una configuración SQL para cada consulta. Ya era demasiado tarde para consultar alguna literatura y descubrió que los ejemplos de mapeo dinámico originales proporcionados por IBATIS eran los siguientes:
& lt!
Consulta dinámica utilizando declaraciones de empalme seguras en ibatis
En comparación con JDBC, una de las ventajas de ibatis es la seguridad y la eficiencia.
En los comentarios se incluye texto explicativo.
& gt
& ltselect id= clase de parámetro selectAllProducts = Mapa de resultados del producto = Resultado del producto & gt;
Seleccionar anotación de identificación del producto
& ltPrefijo dinámico = DONDE & gt
& lt! IsNotNull determina si el parámetro tiene un tipo entero>
& ltisNotNull property = id & gt
& lt! IsGreaterThan determina si el parámetro es mayor que pareValue isGreaterEquals es mayor o igual que>;
& ltisGreaterThan prepend = and property = id pareValue = & gt;
id = #id#
& lt/isGreaterThan>
& lt/isNotNull>
& lt! IsNotEmpty determina que la cadena no está vacía isEmpty puede determinar que la cadena está vacía>
& ltisNotEmpty prepend = and property = note & gt;
& lt! La consulta difusa no puede utilizar # #.
¿Estás preparando el informe ahora? Insertar parámetro $ es un reemplazo de texto>;
Notas como %$note$%
& lt/isNotEmpty>
& lt/dynamic & gt;
& lt/select & gt;
Pasar parámetros a través del mapeo
& ltselect id = selectall productos clase de parámetro = Java util HashMap result map = resultado del producto>
Seleccione la anotación de identificación del producto
& ltPrefijo dinámico = DONDE>
& lt! IsPropertyAvailable determina si la propiedad es válida>
& ltis propiedad disponible property = id & gt;
& ltisNotNull property = id & gt
& lt! IsLessThan determina si el parámetro es menor que pareValue isLessEquals o menor o igual que>;
& ltisless que prepend = and property = id pareValue = & gt;
id = #id #
& lt/es menor que & gt;
& lt/isNotNull & gt;
& lt/es propiedad disponible & gt;
& lt/ dinámico & gt;
& lt/select & gt;
& lt! Varias propiedades comunes
& ltisPropertyAvailable & gt propiedades están presentes.
& ltisNotPropertyAvailable & gtLa propiedad no existe.
& ltisNull & gtEl valor del atributo está vacío.
& ltisEmpty & gtJudge set size
& ltisEqual & gtCompetent
& ltisNotEqual & gtNot igual
& ltisGreaterThan & gt Greater than. ..
& ltisGreaterEqual & gtMayor que o igual
& ltisLessThan & gtMenos que
& ltisLessEqual & gtMenos que o igual
El La siguiente es una cita de un artículo. Puede consultar ml.
La guía de desarrollo de iBatis nos dice que cuando el atributo de nombre del objeto Persona no está vacío, la configuración para habilitar la condición de consulta de nombre en el archivo de mapeo persona xml es
& ltselect id = getPersonsByName resultado clase = uni Persona>
Seleccione id como id nombre como nombre contraseña como contraseña de persona
<dynamic prefix=WHERE>
& ltisNotNull prepend = AND propiedad = nombre & gt;
(nombre similar a #nombre#)
& lt/isNotNull & gt;
& lt/ dinámico & gt;
& lt/select & gt;
& ltselect id = getPersonsByName resultado clase = uni Persona & gt;seleccione id como id nombre como nombre contraseña como contraseña de persona <antepuesto dinámico =DONDE><isNotNull anteponer=Y propiedad = nombre>(nombre como # nombre #)</isNotNull></dynamic>? </select>
Luego use el siguiente código para llamar
Persona persona = nueva persona();
Nombre de la colección de personal (UNMIN);
lista lista = consulta sqlMap forlist(getPersonsByName persona);
Persona persona = nueva persona();? Nombre de la asamblea de personal (UNMIN);? list list = sqlMap query forlist(getPersonsByName person);
El efecto de ejecución se convierte en una declaración SQL.
seleccione * del nombre de la persona, como uni
seleccione * del nombre de la persona, como uni
Esta es en realidad una consulta de coincidencia exacta, escrita con el signo igual abajo Las oraciones son consistentes.
select * from name = staff at uni
select * from name = staff at uni
La razón por la que necesitamos usar el predicado similar es porque generalmente quiero Implementar consultas difusas. Por ejemplo, el nombre comienza con uni o el registro que contiene uni es el siguiente.
seleccione * de personas cuyos nombres sean similares a % unim;
seleccione * de personas cuyos nombres sean similares a % unmi
seleccione * de personas cuyos nombres son similares a %unmi%.
seleccione * de personas cuyos nombres sean similares a unim %; seleccione * de personas cuyos nombres sean similares a % unmiselect * de personas cuyos nombres sean similares a %unmi%.
Es decir, ¿cómo debería expresarse la semántica similar anterior en persona xml? Una vez lo di por sentado y traté de poner
(nombre como #nombre#)? (nombre como %#name#%)? O (nombre como %#name#%) no se puede informar por separado.
excepción de Java SQL: parámetro no válido en la llamada JDBC: índice de parámetro fuera de rango:
y
excepción de Java SQL: inesperado en la declaración [seleccione ID] Etiqueta : % 1
Entonces, ¿cuál es la ortografía correcta? Hay dos formas de encontrar la respuesta en línea: Cómo usar LIKE en una consulta.
Simplemente reemplace el # de arriba con $ (nombre como %#name#%), es decir (nombre como %$name$%).
Está escrito en forma de cadena de concatenación || (nombre como% || #nombre# ||%).
Pero no se puede escribir como (nombre como% ||$nombre$||%), no puede estar equivocado.
Java SQL SQLException: Columna no encontrada: declaración [select id
En resumen, la configuración de la consulta difusa con like en iBatis es la siguiente (dos métodos).
& ltselect id = getPersonsByName result class = uni Person>
Seleccione id como id nombre como nombre contraseña como contraseña de persona
& ltdynamic Prepend = WHERE & gt
& ltisNotNull prepend = AND propiedad = nombre & gt;
(nombre similar a %$name$%)
& lt! (Nombre como % | | #Name# | | %)& gt;
& lt/isNotNull & gt;
& lt/dynamic & gt;
</select>
<select id = getPersonsByName result class = uni Person>
Seleccione id como id nombre como nombre contraseña como contraseña de persona
p>& ltdynamic prepend = WHERE & gt
& ltisNotNull prepend = AND propiedad = nombre & gt;
(nombre similar a %$name$%) p>
<! (Nombre como % | | #Name# | | %)& gt;
& lt/isNotNull & gt;
& lt/dynamic & gt;& lt/select & gt ;
No sé si lo has notado con atención, pero esta también es una pregunta que tuve cuando estaba ordenando el texto anterior.
¿Por qué no escribir (nombre como % | | $Name$||%)? ¿Cuál es la diferencia entre # y $?
Además, estaba escrito muy claramente en la UNMIN. ¿Por qué siempre aparece uni en mayúscula cuando se informan errores?
Lishi Xinzhi/Article/program/Oracle/201311/16940