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 $.
Evitar la inyección de SQL
Nota: No escriba declaraciones SQL como SELECT * de t_stu donde s_name como '%$ name $%', que es extremadamente vulnerable a los ataques de inyección.
Los parámetros en el formato "$ {xxx}" participarán directamente en la compilación SQL, evitando así los ataques de inyección. Sin embargo, cuando se trata de nombres de tabla dinámicas y nombres de columnas, solo puede usar formatos de parámetros como "$ {xxx}".
Al escribir declaraciones de mapeo mybatis, intente usar el formato "#{xxx}". Si tiene que usar parámetros como "$ {xxx}", debe hacer un buen trabajo manualmente filtrado para evitar ataques de inyección SQL.
ejemplo
<sql id = "condición_where"> <isNotEmpty Property = "CompanyName" Prepend = "y"> T1.comPany_Name Like # CompanyName # </isnotempty> </sql>
El código Java es similar al original, pero no hay nada de malo en ello. Si cree que es problemático encapsular el juicio nulo y '%' en un solo método.
if (! StringUtil.isEmpty (this.comPanyName)) {table.setCompanyName ("%" + this.comPanyName + "%"); }Lo anterior es la breve discusión sobre la diferencia entre # y $ en MyBatis y el método para evitar la inyección de SQL. Espero que todos apoyen a Wulin.com más ~