Declaración preparada con dinámica donde la cláusula

Tengo una página de búsqueda con múltiples criterios de búsqueda.

Nombre de empleadoID de empleadoFecha de inscripciónDepartamento

etc

El usuario puede proporcionar uno o más criterios de búsqueda. Necesito consultar la base de datos para obtener los resultados de búsqueda.

Usando JDBC simple, hay dos opciones para lograr esto.

Prepare la consulta SQL agregando los criterios de búsqueda proporcionados por el usuario.

ex:

String selectClause = "SELECT * FROM EMPLOYEES WHERE ";
String whereClause = "";
if(StringUtils.isNotBlank(empName)){
    if(whereClause.length > 0){
        whereClause += " AND ";
    }
    selectQuery += " EMP_NAME = " + empName;
}
if(StringUtils.isNotBlank(empID)){
    if(whereClause.length > 0){
        whereClause += " AND ";
    }
    selectQuery += " EMP_ID = " + empID;
}
//... and so on ...
Utilizandopreparestatement

ex:

String query = "SELECT * FROM EMPLOYEES WHERE EMP_NAME = ? AND EMP_ID = ? DATE_OF_JOINING = ? AND DEPARTMENT = ?";

Estaresponder explica que al igual que el ex 1 anterior, el ex2 se puede modificar, algo como a continuación

String selectClause = "SELECT * FROM EMPLOYEES WHERE ";
String whereClause = "";
if(StringUtils.isNotBlank(empName)){
    if(whereClause.length > 0){
        whereClause += " AND ";
    }
    selectQuery += " EMP_NAME = ?";
}
if(StringUtils.isNotBlank(empID)){
    if(whereClause.length > 0){
        whereClause += " AND ";
    }
    selectQuery += " EMP_ID = ?";
}
//... and so on ...

Luego, con cuidado (teniendo en cuenta el índice de parámetros), la entrada debe establecerse en la declaración preparada. Esto no parece ser una solución muy ideal.

¿Hay una manera de hacerlo de una manera elegante (sin marcos ORM)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta