- Camada de Apresentação: corresponde à fachada e ao cardápio do restaurante — a interface direta com o cliente.
- Camada de Lógica de Negócio: equivale ao cozinheiro, que prepara os pratos seguindo as regras estabelecidas.
- Camada de Serviço: funciona como o garçom, intermediando a comunicação entre o cliente e a cozinha.
- Camada de Acesso a Dados: semelhante à despensa ou geladeira, responsável por armazenar e recuperar os insumos.
- Camada de Integração: como os fornecedores externos, lidando com sistemas de terceiros.
- Camada de Segurança: análoga à segurança do restaurante, protegendo dados e acessos.
- 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.