If you can't read please download the document
Upload
ruben-aguilera
View
2.337
Download
0
Embed Size (px)
DESCRIPTION
Son las transparencias que utilicé para el evento Codemotion 2013.
Citation preview
2. Quin soy yo? Consultor Senior en Autentia. 10 aos en este mundillo. Aprendiz permanente, maestro ocasional. 3. Dnde trabajo?Por compartir todo lo que sabemos. Gestionamos conocimiento interno pblicamente: Sin comercialesAdictosAlTrabajo.com< 25 personas.> 10 aos.> 1.300 Tutoriales.> 24 MM descargas. 4. Cmo trabajo? 5. MybatisEs un framework de persistencia disponible para Java y .NET.No se trata de un ORM.Mapea sentencias SQL con objetos Java a travs de interfaces definidas en XML o con anotaciones.Se integra con Spring y Maven.Cache declarativa.Previene el tmido SQL Inyection y no nos tenemos que preocupar de las conexiones. 6. Mybatis vs Hibernate vs JDBC Ahorramos un 95% de cdigo con respecto a JDBC ya que el mapeo de objetos se puede inferir. Hibernate tiene una fuerte curva de aprendizaje y su funcionamiento no es natural. Con Hibernate perdemos el control de las sentencias que realmente se estn ejecutando, hace magia. Hibernate generalmente no se utiliza adecudamente y no se adapta bien a base de datos impuestas. Mybatis ahorra mucho cdigo, no es complejo, mantiene un control total y trae cache por defecto. 7. SQLMapConfig.xml 8. Cdigo de ejemplo String resource = "SQLMapConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); sqlMapper = new SqlSessionFactoryBuilder().build(reader); SqlSession session = sqlSessionFactory.openSession(); try { BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101); } finally { session.close(); } select * from Blog where id = #{id} 9. Utilizndolo con Maven y SpringAadir al menos estas dependencias a nuestro proyecto. org.mybatismybatis3.2.3org.mybatismybatis-spring1.2.1 10. Utilizndolo con Maven y Spring Aadimos un datasource a nuestro applicationContext. Aadimos tambin un transaction manager. 11. Utilizndolo con Maven y SpringCreamos un SQLSessionFactory donde indicamos la localizacin de los mappers.xml y el datasource. 12. Utilizndolo con Maven y Spring El siguiente bean nos ahorra tener que crear un bean por cada mapper que queramos declarar. En caso contrario, esta declaracin por cada mapper: 13. Utilizndolo con Maven y SpringCreamos la interfaz con los mtodos necesarios. package com.autentia.dao; import org.springframework.stereotype.Repository; import com.autentia.model.Tutorial; public interface TutorialesMapper { public Tutorial getById(Integer idTutorial); public List getByCategoriaValoracion(@Param(categoria) String categoria, @Param(valoracion) Integer valoracion); } 14. Utilizndolo con Maven y SpringCreamos el mapper que implementa la interfaz. select id_tutorial, titulo, categoria, valoracion from tutoriales where id_tutorial = #{id_tutorial} 15. Utilizndolo con Maven y Spring Creamos un test para probarlo.@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:/applicationContext.xml"}) public class TutorialesMapperTest { @Resource private TutorialesMapper tutorialesMapper;}@Test public void shouldGetTutorialById() { Long idTutorial = 1L; Tutorial tutorial = tutorialesMapper.getById(idTutorial); assertNotNull(tutorial); } 16. Operaciones bsicasInsert SELECT nextval('seq_id_tutorial') insert into tutoriales (id_tutorial, titulo, categoria, valoracion) values (#{idTutorial}, #{titulo}, #{categoria}, #{valoracion}) 17. Operaciones bsicasUpdate update tutoriales set titulo = #{titulo}, categoria = #{categoria}, valoracion = #{valoracion} where id_tutorial = #{idTutorial} 18. Operaciones bsicasDelete delete from tutoriales where id_tutorial = #{idTutorial} 19. Tcnicas bsicas en los mappersPaso de N parmetros public List getByCategoriaValoracion(@Param(categoria) String categoria, @Param(valoracion) Integer valoracion); public List getByCategoriaValoracion(Map datos); 20. Tcnicas bsicas en los mappersReutilizacin de cdigo SQL. select id_tutorial, titulo, categoria, valoracion from tutoriales where id_tutorial = #{id_tutorial} 21. Tcnicas bsicas en los mappersAadimos cache Esta declaracin por defecto cachea todas las sentencias SELECT y hace que se vace para las sentencias INSERT, DELETE y UPDATE. Tambin se puede asociar con otros gestores de cache como osCache, ehCache o con uno propio. 22. Tcnicas bsicas en los mappersSustitucin de cadenas SELECT * FROM tutoriales ORDER BY ${column}En ocasiones nos interesa pasar una parmetro como cadena y que Mybatis no lo convierta en un ? del PreparedStatement. Cuidado! Aqu si que podemos estar incurriendo en el tmido SQL inyection. 23. Tcnicas bsicas en los mappersLlamadas a procedimientos almacenadosPara el caso de Oracle statementType="CALLABLE" { CALL getTotalCityStateId( #{stateId, mode=IN, jdbcType=INTEGER}, #{total, mode=OUT, jdbcType=INTEGER})} Para el caso de PostgreSQL SELECT * FROM sumar(#{a},#{b}); 24. Tcnicas bsicas en los mappersSQL dinmicas categoria = #{categoria} AND valoracion = #{valoracion} 25. Tcnicas bsicas en los mappersMapeo con relacin 1 a N (Lado del 1) 26. Tcnicas bsicas en los mappersMapeo con relacin 1 a N (Lado del N) resultMap="com.autentia.dao.TutorialesMapper.tutorialResult" 27. Time to Demohttps://github.com/raguilera82/demo-mybatis