Recomiendeme algun tutorial de spring y hibernate

Que tal, espero puedan pasarme alguna liga con algun tutorial, o alguna liga con algun proyecto, lo que estoy buscando es lo basico, altas, bajas mod, etc.
Saludos y gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

sitios oficiales

Los sitios oficiales de Spring y Hibernate tienen una documentación muy completa con ejemplos y todo.

realmente puedo optimizar

realmente puedo optimizar codigo utilizando spring??
Aun no logro aterrizar esta idea.

Imagen de Shadonwk

Hola west140, todo depende de

Hola west140, todo depende de lo que necesitas realizar, por ejemplo recien estube en un proyecto donde pretendian implementar spring hibernate etc. pero no sabian ni que hacia cada cosa.

El proyecto tiene un servidor linux dedicado para la BD, tambien un servidor windows dedicado para la aplicación, y el proyecto en si es muy pequeño, tanto que no vale la pena usar spring, mas sí hibernate.

Lo que te recomiendo es leer revisar tutoriales, los de SpringHispano estan geniales... para hibernate estoy pronto a hacer una aplicación que llevara Hibernate para la persistencia, java para el back, y talvez JSF 2.0 o Flex para el front.

Resumiendo, antes de intentar hacer algun proyecto, primero informate bien para que sirve cada cosa, una vez que tengas la teoria, ahora sí manos a la obra.. elige la arquitectura y con gusto te ayudamos...

Saludos
@FlexJRL

Imagen de ezamudio

Optimizar? no

Pues no se trata mucho de optimizar código, sino de escribir menos código.

Spring lo que hace, de manera muy general, es implementar varios patrones de diseño y ofrece varias clases que ya tienen hecha mucha de la talacha que siempre termina uno programando, para que ya no la tengas que volver a hacer, sino que solamente extiendas una clase de Spring y le pongas el código que necesitas. Algunos ejemplos:

Siempre tienes que estar creando componentes y conectándolos entre ellos, no? Tienes un DataSource que debes configurar de alguna forma y luego varios DAO's que usan ese dataSource y tal vez un transaction manager, y a veces uno de esos DAO's necesita de otro de los DAO's para algunas cosas. Cómo los unes? Si lo haces por código, debes instanciar los objetos (tal vez tuviste que implementar el patrón Singleton en cada DAO) y pasarles como propiedades los objetos que necesitan (el DataSource, otros DAO's, algunos parámetros, etc). Con Spring, defines todos esos componentes en un application context y ahí se conectan unos con otros; al final solamente necesitas obtener un objeto principal que ya vendrá conectado a los otros. Y a veces ni eso porque para algunos ambientes, Spring incluso puede conectar algunos de esos objetos del application context con otros componentes que se encuentran fuera (como páginas en una aplicación de JSF y cosas así).

Otro ejemplo: Siempre que usas JDBC, tienes el ciclo típico para una consulta donde por ejemplo obtienes una conexión de un DataSource, creas un PreparedStatement, le pasas parámetros, ejecutas el query, obtienes un ResultSet y lo recorres, y al final tienes que cerrar la conexión (con un try-catch-finally para que siempre cierres la conexión etc). Los registros tal vez los vas procesando conforme los lees pero a veces solamente los conviertes en mapas o en instancias de algún bean y los metes a un arreglo que devuelves al final. Todo eso ya está en Spring y solamente tienes que usar una clase SimpleJdbcTemplate:

List<Map<String, Object>> rows = miSimpleJdbcTemplate.queryForList("SELECT a,b,c FROM tabla WHERE p1=? AND p2=?", v1,v2);

Esa línea ejecuta el query con los valores que le pasas como parámetros, con una conexión del DataSource con el cual fue creado el SimpleJdbcTemplate. Cada registro obtenido lo convertirá en un mapa con llaves a, b y c, y te va a devolver una lista con los mapas. Al final cerrará la conexión, siempre. Y si ocurre cualquier problema, te arrojará una excepción en tiempo de ejecución. Es otra cosa que hace Spring: todas las excepciones que maneja son de tiempo de ejecución, de modo que si no quieres, no tienes que usar try-catch si es que no te toca manejar la excepción en el código que estás haciendo.

Otro ejemplo: si usas hibernate, normalmente necesitas tener a la mano la SessionFactory y siempre tienes que estar manejando las cosas con try-catch-finally o al menos try-finally y al final siempre acordarte de cerrar la sesión, o a veces recibir una sesión ya abierta como parámetro en un método y dejarla abierta porque van a hacer otra cosa. Spring ofrece algunas clases para facilitar la programación de DAOs con Hibernate (y el uso más directo de Hibernate en frameworks web también). Puedes hacer un DAO que NUNCA cierra sesiones por código, y luego lo envuelves en un proxy con un HibernateInterceptor, y eso hará que siempre se cierre la sesión al final.

Para operaciones que son transaccionales, puedes simplemente tener un método en tu DAO que quieres volver transaccional; en código, lo único que haces es anotar el método con @Transactional. Ese componente lo tendrás definido en un application context en el cual vas a agregar un transaction manager de Spring (que es una abstracción que debajo puede ser un transaction manager sobre un dataSource de JDBC o puede ser un proxy para un transaction manager de JTA), y entonces dinámicamente se creará un proxy que envuelve tu componente y que ejecutará tu método anotado dentro de la transacción correspondiente; si tu método arroja una excepción de tiempo de ejecución, se hará rollback a la transacción, pero si termina de manera normal, se hace commit.

En fin, esas son solamente algunas de las cosas que Spring te ofrece, hay muchas más.