Em projetos que utilizam o MyBatis, as anotações podem substituir os arquivos XML para mapeamento de consultas SQL, simplificando a configuração. No entanto, essa abordagem é mais adequada para consultas simples; para operações complexas, o uso de XML pode ser mais flexível e mantível.
A seguir, demonstra-se como implementar um mapper usando anotações em Java. A interface define métodos de acesso a dados com consultas SQL enline.
package com.example.mapeamento;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Update;
import org.apache.ibatis.annotations.Delete;
import com.example.modelo.Cliente;
public interface ClienteMapper {
@Select("SELECT * FROM clientes LIMIT #{offset}, #{quantidade}")
List<Cliente> listarComPaginacao(@Param("offset") int offset, @Param("quantidade") int quantidade);
@Select("SELECT * FROM clientes")
List<Cliente> listarTodos();
@Select("SELECT * FROM clientes WHERE id = #{identificador}")
Cliente buscarPorId(int identificador);
@Insert("INSERT INTO clientes (id, nome, email) VALUES (#{codigo}, #{nome}, #{enderecoEmail})")
int inserir(Cliente cliente);
@Update("UPDATE clientes SET nome = #{nomeNovo}, email = #{enderecoEmailNovo} WHERE id = #{codigo}")
int atualizar(Cliente cliente);
@Delete("DELETE FROM clientes WHERE id = #{identificador}")
int excluir(int identificador);
}
Configuração do MyBatis no arquivo XML deve apontar para a interface do mapper. Exemplo:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<properties resource="configuracoes-banco.properties" />
<typeAliases>
<package name="com.example.modelo" />
</typeAliases>
<environments default="desenvolvimento">
<environment id="desenvolvimento">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${usuario}" />
<property name="password" value="${senha}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.example.mapeamento.ClienteMapper" />
</mappers>
</configuration>
Para validar a implemenatção, testes unitários podem executar as operações CRRUD. Exemplo de código de teste:
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.example.mapeamento.ClienteMapper;
import com.example.modelo.Cliente;
import com.example.util.SessaoMyBatis;
public class TesteCliente {
@Test
public void testListagem() {
SqlSession sessao = SessaoMyBatis.obterSessao();
ClienteMapper mapeador = sessao.getMapper(ClienteMapper.class);
List<Cliente> lista = mapeador.listarTodos();
for (Cliente item : lista) {
System.out.println(item);
}
sessao.close();
}
@Test
public void testListagemComPaginacao() {
SqlSession sessao = SessaoMyBatis.obterSessao();
ClienteMapper mapeador = sessao.getMapper(ClienteMapper.class);
List<Cliente> paginados = mapeador.listarComPaginacao(0, 5);
for (Cliente item : paginados) {
System.out.println(item);
}
sessao.close();
}
@Test
public void testInsercao() {
SqlSession sessao = SessaoMyBatis.obterSessao();
ClienteMapper mapeador = sessao.getMapper(ClienteMapper.class);
Cliente novoCliente = new Cliente(101, "Ana Silva", "ana@email.com");
mapeador.inserir(novoCliente);
sessao.close();
}
@Test
public void testAtualizacao() {
SqlSession sessao = SessaoMyBatis.obterSessao();
ClienteMapper mapeador = sessao.getMapper(ClienteMapper.class);
Cliente clienteAtualizado = new Cliente(101, "Ana Pereira", "ana.pereira@email.com");
mapeador.atualizar(clienteAtualizado);
sessao.close();
}
@Test
public void testExclusao() {
SqlSession sessao = SessaoMyBatis.obterSessao();
ClienteMapper mapeador = sessao.getMapper(ClienteMapper.class);
mapeador.excluir(101);
sessao.close();
}
}