:::: MENU ::::

Spring MyBatis

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 ?