es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué usarías DSL.param() en insertInto().values() con JOOQ?

Soy un traductor español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.
Soy nuevo en JOOQ y estoy tratando de ponerme al día en una base de código existente (desafortunadamente, el desarrollador responsable de este código en particular ya no está con nosotros).

El código de inserción se ve algo como esto (simplificado):

public class User {

<pre><code>public static Table<?> table = DSL.table("user");

public static Field<String> firstName = DSL.field(DSL.name(table.getName(), "first_name"), String.class);
public static Field<String> lastName = DSL.field(DSL.name(table.getName(), "last_name"), String.class);
</code></pre>

}

private class UserDto {

<pre><code>private String firstName;
private String lastName;

// getters, setters, etc.
</code></pre>

}

public class UserWriter {

<pre><code>private final DefaultDSLContext dslContext;

public UserWriter(DefaultDSLContext dslContext) {
    this.dslContext = dslContext;
}

public void create(UserDto user) {

    dslContext.insertInto(User.table, User.firstName, User.lastName)
        .values(
            DSL.param(User.firstName.getName(), user.getFirstName()),
            DSL.param(User.lastName.getName(), user.getLastName()),
        )
        .execute();
}
</code></pre>

}

¿Por qué usar DSL.param () en values () cuando se pueden usar simplemente los valores reales?

java
dslContext.insertInto(User.table, User.firstName, User.lastName)
.values(user.getFirstName(), user.getLastName())
.execute();

¿Es esto simplemente innecesariamente verboso o me estoy perdiendo algo?

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El uso de DSL.param() en el método values() en lugar de pasar simplemente los valores reales proporciona seguridad adicional y ayuda a prevenir ataques de inyección SQL. Al pasar los parámetros como DSL.param(), JOOQ los trata como variables de enlace y garantiza que estén correctamente escapados antes de ser ejecutados en la declaración SQL. Esto asegura que los valores sean tratados como datos y no como parte de la sintaxis SQL y ayuda a prevenir que los usuarios malintencionados inyecten sus propios comandos SQL. Por lo tanto, es una práctica recomendable utilizar DSL.param() en lugar de simplemente pasar los valores reales en el método values().

Comments are closed.