He usado mybatis recientemente. He usado ibatis antes. En general, es similar, pero todavía encontré muchos problemas. Lo grabaré de nuevo.
Por ejemplo, la diferencia entre usar #{} y $ {} transmisión de parámetros,
Use # para pasar el parámetro, y el análisis de la instrucción SQL agregará "", por ejemplo, seleccione * de la tabla donde name = # {name}, el nombre aprobado es Xiao Li, entonces la última impresión es
Seleccione * de la tabla donde nombre = 'Xiao Li', se analizará como una cadena. Esto es obviamente mejor que $. El pase de parámetros #{} puede evitar la inyección de SQL. Si el parámetro que pasa es una sola cotización ', entonces si usa $ {}, este método informará un error.
Otro escenario es que si desea realizar una clasificación dinámica, como Order By Column, asegúrese de usar $ {} en este momento, porque si usa #{}, entonces el impreso será
Seleccione * de la tabla orden por 'nombre', esto es inútil,
En la actualidad, si puede usar #, no use $.
Diferencia entre # y $ en mybatis
1. # Trate todos los datos entrantes como una cadena y agregue cotizaciones dobles a los datos entrantes automáticamente. Por ejemplo: ordene por #user_id #, si el valor pasado es 111, entonces el valor al analizar a SQL es ordenar por "111". Si el valor se pasó IS ID, el analizado en SQL se ordena por "ID".
2. $ Muestra los datos aprobados directamente y los genera en SQL. Por ejemplo: orden por $ user_id $, si el valor pasado es 111, entonces el valor cuando se analiza en SQL es ordenado por User_ID. Si el valor pasado en IS ID, el analizado en SQL es orden por ID.
3. El método # puede evitar enormemente la inyección de SQL.
4. El método $ no puede evitar la inyección de SQL.
5. El método $ se usa generalmente para pasar en objetos de base de datos, como pasar los nombres de las tabla.
6. Generalmente, si puede usar #, no use $.
Al usar el orden por parámetros dinámicos al clasificar MyBatis, debe prestar atención a usar $ en lugar de #
Reemplazo de cuerdas
Por defecto, el uso de la sintaxis de formato #{} hace que MyBatis cree una propiedad de declaración preprocesada y establezca un valor seguro con ella como fondo (como?). Esto es seguro y rápido, y a veces solo desea insertar una cadena que no cambie directamente en la instrucción SQL. Por ejemplo, como pedido, puede usarlo así:
Orden por $ {columnName}
Aquí MyBatis no modificará ni escapará de las cuerdas.
IMPORTANTE: No es seguro aceptar la salida de contenido del usuario y proporcionarla a una cadena sin cambios en la declaración. Esto puede conducir a posibles ataques de inyección SQL, por lo que no debe permitir que los usuarios ingresen a estos campos, o generalmente escapen y los revisen usted mismo.
Un breve resumen de la diferencia entre $ y # en mybatis
No hace mucho, alguien vino a nuestra empresa para una entrevista. Nuestro gerente hizo esta pregunta. Solo tenía un poco de comprensión, así que fui a Baidu.
De hecho, la diferencia es muy simple. Lo entenderás con un ejemplo. Escriba una oración SQL-FOR Ejemplo: Seleccione * de user_role donde user_code = "100";
En esta oración, debe escribirse como select * de $ {tableName} donde user_code = #{UserCode}
Por lo tanto, el personaje $ se escribe directamente en SQL, mientras que el personaje # se deletreará con SQL en forma de una cadena.