Persistência de Dados em Java: Explorando MyBatis e MyBatis-Plus

No desenvolvimento de camadas de persistência em Java, o MyBatis se destaca pela flexibilidade e pelo controle granular sobre o SQL. Por outro lado, o MyBatis-Plus surge como uma extensão poderosa, focada em produtividade e na redução de código repetitivo (boilerplate). Este artigo analisa as características fundamentais, casos de uso e exemplos práticos de ambas as tecnologias.

1. O Núcleo do MyBatis: Controle e Flexibilidade

O MyBatis é um framework ORM (Object-Relational Mapping) de baixo acoplamento que permite aos desenvolvedores gerenciar SQL manualmente, evitando a complexidade de abstrações excessivas. Sua principal vantagem é a separação entre a lógica de banco de dados e o código Java.

Características Principais

  • SQL Dinâmico: Utilização de tags XML como <if> e <where> para construir queries complexas em tempo de execução.
  • Mapeamento Direto: Conversão precisa de registros do banco para POJOs (Plain Old Java Objects).
  • Performance: Ideal para cenários onde a otimização de consultas é crítica e o uso de recursos do banco de dados deve ser específico.

Exemplo de Implementação Manual

Em vez de depender de geração automática, definimos o mapeametno em um arquivo XML:

<!-- AccountMapper.xml -->
<mapper namespace="br.com.sistema.repository.AccountMapper">
    <select id="findAccountByOwner" resultType="Account">
        SELECT id, owner_name, balance 
        FROM tb_accounts 
        WHERE owner_name LIKE CONCAT('%', #{name}, '%')
    </select>
</mapper>

A interface Java correspondente:

public interface AccountMapper {
    List<Account> findAccountByOwner(@Param("name") String name);
}

2. Evolução com MyBatis-Plus

O MyBatis-Plus (MP) mantém a essência do MyBatis, mas adiciona funcionalidades que automatizam operações comuns de CRUD, eliminando a necessidade de escrever SQL para tarefas triviais.

Funcionalidades de Produtividade

  • BaseMapper: Uma interface genérica que já contém métodos como insert, deleteById, update e selectList.
  • Wrappers de Consulta: Construção de filtros utilizando Fluent API, reduzindo erros de sintaxe em strings.
  • Gerador de Código: Ferramenta para criar automaticamente entidades, mappers e serviços a partir do esquema do banco.

Exemplo com Abstração do MyBatis-Plus

Definição da entidade com anotações de mapeamento:

@Data
@TableName("tb_products")
public class Product {
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    private String sku;
    private Double price;
}

A interface herda as funcionalidades base:

public interface ProductMapper extends BaseMapper<Product> {
    // Métodos CRUD básicos já estão disponíveis
}

Uso prático com LambdaQueryWrapper para maior segurança de tipos:

List<Product> cheapProducts = productMapper.selectList(
    new LambdaQueryWrapper<Product>()
        .le(Product::getPrice, 50.0)
        .orderByDesc(Product::getSku)
);

3. Comparativo Técnico

Atributo MyBatis Tradicional MyBatis-Plus
Conifguração de SQL Manual via XML ou Annotations Automática para CRUD; Manual para casos complexos
Velocidade de Setup Moderada Alta (Ready-to-use)
Curva de Aprendizado Requer domínio de SQL e sintaxe XML Intuitivo para desenvolvedores Java
Flexibilidade Total Total (híbrido)

4. Recursos Avançados do MyBatis-Plus

Preenchimento Automático de Campos

Comum para auditoria (data de criação e modificação):

@Component
public class AuditFieldHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createdAt", LocalDateTime.class, LocalDateTime.now());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());
    }
}

Suporte a Multi-tenancy

O MyBatis-Plus facilita o isolamento de dados por inquilino (tenant) através de interceptores que injetam automaticamente a cláusula WHERE tenant_id = ? em todas as consultas realizadas pela aplicação.

5. Critérios de Escolha

A decisão entre usar MyBatis puro ou sua versão Plus depende da natureza do projeto:

  • MyBatis Puro: Recomendado para sistemas legados com DBAs rigorosos, queries extremamente complexas com múltiplas junções ou quando o controle absoluto do plano de execução SQL é mandatório.
  • MyBatis-Plus: Ideal para novos projetos, microserviços e aplicações Rapid Application Development (RAD). É a escolha certa quando a maioria das operações são CRUDs simples, mas você ainda quer a porta aberta para escrever SQL manual quando necessário.

Em resumo, o MyBatis-Plus não substitui o MyBatis, ele o potencializa. Ao adotar o MP, você ganha agilidade sem perder a capacidade de otimização de baixo nível que tornou o MyBatis um padrão na indústria Java.

Tags: MyBatis MyBatis-Plus java spring-boot ORM

Publicado em 7-6 20:38