Introducción
MyBatis es un marco de trabajo de persistencia de datos muy ligero que usa mapeadores, a diferencia de otros marcos que usan repositorios. Vamos a crear un proyecto con Spring Boot y MyBatis.
Tabla en Base de datos
Necesitamos una tabla con información que recuperar en nuestro entorno MySQL. Una vez instalado el sistema gestor de bases de datos de tipo MySQL, creamos una base de datos (“world”, por ejemplo) y una tabla llamada “myentity”. Esta tabla tendrá una primera columna INT llamada “id” autoincremental como clave principal, y después otra columna de tipo VARCHAR llamada “myString”. Insertamos varios registros desde nuestro cliente. Podemos usar cualquiera: phpMyAdmin, MySQL Workbench, etc.
Proyecto Spring Boot
Vamos a https://start.spring.io/ y generamos un nuevo proyecto con las dependencias de Web, MySQL y MyBatis. Descargamos el fichero, lo descomprimimos y lo importamos como proyecto Maven en Eclipse.
Componentes Java
En primer lugar neesitamos un bean básico que se corresponderá con la tabla en base de datos:
MyEntity.java
package com.luisgomezcaballero.springmybatis; public class MyEntity { private Integer id; private String myString; public MyEntity() { super(); } public MyEntity(Integer id, String myString) { super(); this.id = id; this.myString = myString; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getMyString() { return myString; } public void setMyString(String myString) { this.myString = myString; } @Override public String toString() { return "MyEntity [id=" + id + ", myString=" + myString + "]"; } }
Después, necesitamos un mapeador para este bean. Es, simplemente, una interfaz anotada donde definiremos los métodos que vamos a usar:
MyEntityMapper.java
package com.luisgomezcaballero.springmybatis; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @Mapper public interface MyEntityMapper { @Select("select * from myentity") List<MyEntity> findAll(); }
Ahora crearemos un controlador para poder hacer una llamada a nuestro método de recuperación de registros:
MyController.java
package com.luisgomezcaballero.springmybatis; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @Autowired private MyEntityMapper myEntityMapper; public MyController() { } @RequestMapping(value = "/findAll", method = RequestMethod.GET) public List<MyEntity> findAll() { return myEntityMapper.findAll(); } }
Importante para que todo funcione correctamente es el fichero de configuración de la aplicación y las anotaciones especiales en la clase principal:
application.properties
server.port=8001 spring.datasource.url=jdbc:mysql://localhost:3306/world spring.datasource.username=root spring.datasource.password=root spring.datasource.testWhileIdle=true spring.datasource.validationQuery=select 1
SpringmybatisApplication.java
package com.luisgomezcaballero.springmybatis; import org.apache.ibatis.type.MappedTypes; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @MappedTypes(MyEntity.class) @MapperScan("com.luisgomezcaballero.springmybatis") @SpringBootApplication public class SpringmybatisApplication { public static void main(String[] args) { SpringApplication.run(SpringmybatisApplication.class, args); } }
Demostración
Arrancamos la aplicacación “Run As/Java Application” sobre la clase principal. Después, vamos a http://localhost:8001/findAll y veremos un JSON con toda la información de nuestra tabla.
Repositorio
El proyecto con este código puede encontrarse en https://github.com/luisgomezcaballero/springmybatis.
So, what do you think ?