Integração do MyBatis com Spring Boot: Arquitetura de Acesso a Dados na Prática

  1. Camada de Apresentação: corresponde à fachada e ao cardápio do restaurante — a interface direta com o cliente.
  2. Camada de Lógica de Negócio: equivale ao cozinheiro, que prepara os pratos seguindo as regras estabelecidas.
  3. Camada de Serviço: funciona como o garçom, intermediando a comunicação entre o cliente e a cozinha.
  4. Camada de Acesso a Dados: semelhante à despensa ou geladeira, responsável por armazenar e recuperar os insumos.
  5. Camada de Integração: como os fornecedores externos, lidando com sistemas de terceiros.
  6. Camada de Segurança: análoga à segurança do restaurante, protegendo dados e acessos.
  7. Camada de Configuração: define as políticas operacionais e parâmetros do sistema.

O MyBatis atua especificamente na camada de acesso a dados, sendo responsável por interagir com o banco de dados — executando consultas, inserções, atualizações e exclusões. Outras tecnologias equivalentes incluem Hibernate e JPA.

Preparação do Banco de Dados

Antes de iniciar, precisamos criar nossa base de dados e a tabela correspnodente. Utilizando uma ferramenta como o Navicat ou DBeaver, crie um banco de dados e insira alguns registros de teste.

Comando SQL para criação da tabela:

CREATE DATABASE mybatis_demo;

USE mybatis_demo;

CREATE TABLE account (
    id INT PRIMARY KEY AUTO_INCREMENT,
    full_name VARCHAR(100) NOT NULL,
    user_age INT,
    gender VARCHAR(10),
    creation_date VARCHAR(50)
);

INSERT INTO account (full_name, user_age, gender, creation_date)
VALUES ('João Silva', 28, 'M', '2024-01-15');

INSERT INTO account (full_name, user_age, gender, creation_date)
VALUES ('Maria Santos', 34, 'F', '2024-01-16');

Criação do Projeto Spring Boot com MyBatis

No IntelliJ IDEA, crie um novo projeto Spring Boot. Certifique-se de selecionar as seguintes dependências:

  • Spring Web
  • MyBatis Framework
  • MySQL Driver

Estrutura de Pacotes

Organize o projeto com a seguinte estrutura de pacotes:

com.exemplo.mybatis/
├── controller/
├── domain/
├── mapper/
├── service/
└── resources/
    └── mapper/

O funcionamento de cada pacote pode ser compreendido da seguinte forma:

  • controller: recebe as requisições HTTP e define as respostas, atuando como o ponto de entrada da aplicação.
  • domain: contém as classes de entidade que representam os dados retornados pelo banco.
  • mapper: responsável pelo mapeamento objeto-relacional, convertendo os dados brutos do banco em objetos utilizáveis pela aplicação.
  • service: contém a lógica de negócio, processando os dados antes de enviá-los ao controlador.

Código de Implementação

Classe de Entidade (domain/Account.java)

package com.exemplo.mybatis.domain;

public class Account {
    private Integer accountId;
    private String fullName;
    private Integer userAge;
    private String gender;
    private String creationDate;

    public Integer getAccountId() {
        return accountId;
    }

    public void setAccountId(Integer accountId) {
        this.accountId = accountId;
    }

    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getCreationDate() {
        return creationDate;
    }

    public void setCreationDate(String creationDate) {
        this.creationDate = creationDate;
    }
}

Interface Mapper (mapper/AccountMapper.java)

package com.exemplo.mybatis.mapper;

import com.exemplo.mybatis.domain.Account;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

@Mapper
public interface AccountMapper {
    List<Account> fetchAllAccounts();
}

Camada de Serviço (service/AccountService.java)

package com.exemplo.mybatis.service;

import com.exemplo.mybatis.domain.Account;
import com.exemplo.mybatis.mapper.AccountMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class AccountService {

    @Autowired
    private AccountMapper accountMapper;

    public List<Account> retrieveAllAccounts() {
        return accountMapper.fetchAllAccounts();
    }
}

Controlador (controller/AccountController.java)

package com.exemplo.mybatis.controller;

import com.exemplo.mybatis.domain.Account;
import com.exemplo.mybatis.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
public class AccountController {

    @Autowired
    private AccountService accountService;

    @GetMapping("/accounts")
    public List<Account> listAccounts() {
        return accountService.retrieveAllAccounts();
    }
}

Arquivo de Mapeamento XML (resources/mapper/AccountMapper.xml)

<?xml version="1.0" encoding="UTF-8"?>


<mapper namespace="com.exemplo.mybatis.mapper.AccountMapper">
    <resultMap id="AccountResultMap" type="com.exemplo.mybatis.domain.Account">
        <id     property="accountId"      column="id"            />
        <result property="fullName"       column="full_name"     />
        <result property="userAge"        column="user_age"       />
        <result property="gender"        column="gender"        />
        <result property="creationDate"  column="creation_date" />
    </resultMap>

    <select id="fetchAllAccounts" resultMap="AccountResultMap">
        SELECT * FROM account
    </select>
</mapper>

Configuração de Conexão com o Banco de Dados

No arquivo application.properties, configure os parâmetros de conexão:

spring.application.name=mybatis-demo

spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_demo
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

# Descomente a linha abaixo para habilitar logs SQL no console
# mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

Após executar a aplicação, acesse o endpoint http://localhost:8080/accounts no navegador. O retorno em formato JSON com os dados da tabela indica que a configuração foi bem-sucedida.

Tags: MyBatis Spring Boot java MySQL ORM

Publicado em 7-15 03:55