Guía completa de MyBatisPlus: características y operaciones fundamentales

Introducción a MyBatisPlus

MyBatisPlus (comúnmante abreviado como MP) es una extensión poderosa construida sobre el framework MyBatis. Su objetivo principal es eliminar código repetitivo y acelerar el desarrollo de aplicaciones que interactúan con bases de datos relacionales.

Características principales

  • Integración transparente: Amplía las funcionalidades de MyBatis sin modificar el comportamiento existente del proyecto.
  • Operaciones CRUD automáticas: Proporciona un Mapper genérico que permite realizar operaciones básicas sin escribir sentencias SQL.
  • Consultas con Lambda: Facilita la construcción de condiciones evitando errores por nombres de columnas incorrectos.
  • Generación automática de claves primarias.
  • Plugin de paginación integrado.

Configuración inicial del proyecto

Para incorporar MyBatisPlus en una aplicación Spring Boot, se siguen estos pasos esenciales:

  1. Agregar la dependencia correspondiente en el archivo de configuración del proyecto.
  2. Definir la configuración de fuente de datos y opciones de registro en el archivo application.yml.
  3. Crear interfaces Mapper que hereden de BaseMapper.
  4. Configurar el escaneo de paquetes de mappers en la clase principal.

Dependencia de MyBatisPlus

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3</version>
</dependency>

Archivo de configuración application.yml

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

Definición del Mapper

public interface ClienteMapper extends BaseMapper<Cliente> {

}

Operaciones CRUD con MyBatisPlus

La siguiente tabla compara las operaciones estándar proporcionadas por MP con enfoques manuales:

Operación Método de MyBatisPlus
Crear registro int insert(T entidad)
Eliminar por ID int deleteById(Serializable id)
Actualizar registro int updateById(T entidad)
Buscar por ID T selectById(Serializable id)
Listar todos List<T> selectList(Wrapper wrapper)
Consulta paginada IPage<T> selectPage(IPage page, Wrapper wrapper)

Ejemplo: Insertar un nuevo cliente

@Test
public void crearCliente() {
    Cliente nuevoCliente = new Cliente();
    nuevoCliente.setNombre("María García");
    nuevoCliente.setEmail("maria@ejemplo.com");
    nuevoCliente.setTelefono("555-1234");
    nuevoCliente.setEdad(28);
    clienteMapper.insert(nuevoCliente);
}

Ejemplo: Eliminar un registro

@Test
public void eliminarCliente() {
    clienteMapper.deleteById(1025L);
}

Ejemplo: Actualizar datos

@Test
public void modificarCliente() {
    Cliente clienteModificado = new Cliente();
    clienteModificado.setId(42L);
    clienteModificado.setNombre("Carlos Ruiz");
    clienteMapper.updateById(clienteModificado);
}

Ejemplo: Obtener todos los registros

@Test
public void listarClientes() {
    List<Cliente> lista = clienteMapper.selectList(null);
    lista.forEach(System.out::println);
}

Ejemplo: Consulta con condiciones

@Test
public void buscarPorCriterios() {
    QueryWrapper<Cliente> criterio = new QueryWrapper<>();
    criterio.ge("edad", 25);
    criterio.eq("activo", true);
    List<Cliente> resultados = clienteMapper.selectList(criterio);
    System.out.println("Clientes encontrados: " + resultados.size());
}

Implementación de paginación

Para habilitar la funcionalidad de paginación en MyBatisPlus, es necesario registrar un interceptor que modifique dinámicamente las consultas SQL.

Configuración del interceptor de paginación

@Configuration
public class ConfiguracionPaginacion {

    @Bean
    public MybatisPlusInterceptor interceptorPaginacion() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        PaginationInnerInterceptor paginador = new PaginationInnerInterceptor();
        paginador.setMaxLimit(500L);
        interceptor.addInnerInterceptor(paginador);
        return interceptor;
    }
}

Realizando una consulta paginada

@Test
public void paginarClientes() {
    // Página 2 con 10 elementos por página
    Page<Cliente> pagina = new Page<>(2, 10);

    Page<Cliente> resultado = clienteMapper.selectPage(pagina, null);

    System.out.println("Total de registros: " + resultado.getTotal());
    System.out.println("Páginas totales: " + resultado.getPages());
    System.out.println("Página actual: " + resultado.getCurrent());

    List<Cliente> elementos = resultado.getRecords();
    elementos.forEach(cliente ->
        System.out.println(cliente.getNombre() + " - " + cliente.getEmail())
    );
}

El interceptor de paginación intercepta la ejecución de selectPage y automáticamente agrega la cláusula LIMIT a la consulta SQL, además de realizar un conteo del total de registros cuando es necesario.

Etiquetas: MyBatisPlus MyBatis SpringBoot java ORM

Publicado el 7-6 00:51