Usando Lambdas
En esta breve entrada explicare como mejorar el ejemplo anterior, con el uso de lambdas.
Como siempre el código fuente de este ejemplo lo tenéis en: https://github.com/chuchip/jdbc_jpa_tomcat
Las lambdas, son un mecanismo introducido en Java 8, pero que realmente en el mundo de la programación no es nuevo.
Gracias a las lambdas se puede entre otras cosas, evitar, en gran medida el uso de las clases auxiliares. Tenéis muchos manuales en la web, solo preguntarle a google, que lo sabe ‘casi’ todo ;-), pero os aconsejo que le echéis un vistazo al siguiente enlace:
Yo, lo que os voy a dar un ejemplo de como usar lambda, para mejorar el uso de Swing Data JDBC. ¡¡Vamos a ello!!.
En nuestra clase anterior teníamos el siguiente código:
public class JdbcEjemplo {
.....
public List<Usuario> findAllUsernames() {
return jdbc.queryForObject(
"select login,nombre from usuario ",
new usuarioListaRowMapper() );
}
private class usuarioListaRowMapper implements RowMapper<List<Usuario>> {
@Override
public List<Usuario> mapRow(ResultSet rs, int rowNum) throws SQLException {
ArrayList<Usuario> listaUsuarios = new ArrayList();
do
{
listaUsuarios.add(new Usuario(rs.getString("login"),
rs.getString("nombre")));
} while (rs.next());
return listaUsuarios;
}
}
}
Ahora vamos a ver como usar una expresion lambda de tal manera que no tengamos que crear la clase usuarioListaRowMapper y, ademas nuestro código quede mucho mas limpio.
public List<Usuario> findAllUsernames() {
return jdbc.query(
"select login,nombre from usuario ",
(rs, rowNum) -> new Usuario(rs.getString("login"),rs.getString("nombre"))
);
}
¿ Sorprendido ?. Sí, gracias al uso de expresiones lambda hemos dejado nuestro código anterior en solo esas lineas. Y por supuesto no es necesario tener la clase **usuarioListaRowMapper **
Lo que hemos hecho es cambiar la llamada a la función queryForObject por la llamada a la función query que esta definida de tal manera
<T> List<T> query(String sql, RowMapper<T> rowMapper) throws DataAccessException;
Es decir espera una sentencia SQL y un clase que implemente la interfaz funcional RowMapper (que es una interfaz funcional esta explicado en la página anteriormente referenciada)
Pues bien, hemos creado esa clase a través de la expresión lambda, y nos hemos ahorrado un montón de código y dejado todo mucho más limpio.
Chicos, aprender a usar expresiones lambda. ¡¡ Mejoraran vuestro código !!