mybatis-patterns
Ajuda seu agente a trabalhar com o banco de dados MyBatis. Melhora o design de consultas, o uso de transações e a performance.
O que ela faz
Esta ferramenta ajuda a organizar e otimizar o código que interage com bancos de dados usando a tecnologia MyBatis. Ela garante que suas consultas sejam seguras, eficientes e fáceis de entender.
Quando usar
- ✓Ao escrever ou revisar como o programa acessa dados.
- ✓Ao decidir entre diferentes formas de escrever comandos para o banco de dados.
- ✓Ao tentar fazer o programa buscar dados mais rapidamente.
Exemplo do que pedir para a IA
“Como posso garantir que minhas consultas ao banco de dados com MyBatis sejam seguras contra ataques?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ela funciona analisando seu código que usa MyBatis para encontrar padrões comuns e sugerir melhorias. Isso inclui verificar como os dados são enviados e recebidos, e como as transações são gerenciadas.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill mybatis-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/mybatis-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões do MyBatis
Use o MyBatis quando o controle SQL e os mapeamentos explícitos forem importantes. Mantenha o SQL legível,
faça contratos de mapper pequenos e coloque transações de negócios na camada de serviço.
Combine essa habilidade com springboot-patterns para estrutura de aplicação,
database-migrations para alterações de esquema, postgres-patterns ou
mysql-patterns para SQL específico do motor, e security-review para entrada não confiável
e preocupações de controle de acesso.
Quando Ativar
- Adicionando ou revisando interfaces de mapper do MyBatis ou arquivos XML
- Escolhendo entre mappers XML, mappers de anotação e SQL gerado
- Projetando mapeamentos
resultMap, joins, coleções aninhadas ou projeções - Revisando SQL dinâmico, vinculação de parâmetros, paginação ou escritas em lote
- Depurando consultas N+1, instruções lentas, uso de conexão ou bugs de transação
- Integrando MyBatis-Spring ao Spring Boot ou a uma aplicação legada com prioridade em XML
Como Funciona
Use um mapper fino para operações de persistência e mantenha as regras de negócios em um serviço. Um fluxo típico é:
Controller / batch job -> Service (@Transactional) -> Mapper -> Database
- Registre os mappers uma vez, seja com
@Mapperem cada interface ou com@MapperScanpara um pacote. Não misture abordagens de registro casualmente. - Mantenha o
namespaceXML igual ao nome totalmente qualificado da interface do mapper. - Dê a cada instrução um
idestável e descritivo; trate os métodos do mapper como uma API de persistência que pode ser testada independentemente. - Retorne um DTO de domínio ou projeção para caminhos de leitura em vez de expor um mapa mutável grande quando a forma é conhecida.
- Mantenha as alterações de esquema em migrações. Não faça o startup do mapper criar ou alterar tabelas de produção silenciosamente.
Exemplos
@MapperScan("com.example.user.persistence")
@Configuration
class MyBatisConfig {
}
public interface UserMapper {
UserSummary findSummaryById(long userId);
}
<mapper namespace="com.example.user.persistence.UserMapper">
<select id="findSummaryById"
parameterType="long"
resultType="com.example.user.persistence.UserSummary">
SELECT id, display_name AS displayName, status
FROM users
WHERE id = #{userId}
</select>
</mapper>
Vinculação de Parâmetros e Segurança SQL
Use #{...} para valores. O MyBatis o vincula como um parâmetro de prepared-statement.
Trate ${...} como texto SQL bruto: ele é apropriado apenas para um valor selecionado
de uma lista de permissões fechada e de propriedade da aplicação, como um mapa de coluna de ordenação.
private static final Map<String, String> SORT_COLUMNS = createSortColumns();
private static Map<String, String> createSortColumns() {
Map<String, String> columns = new HashMap<>();
columns.put("name", "display_name");
columns.put("created", "created_at");
return Collections.unmodifiableMap(columns);
}
String sortColumn = SORT_COLUMNS.getOrDefault(request.sort(), "created_at");
String sortDirection = request.descending() ? "DESC" : "ASC";
// The mapper receives only an allowlisted identifier; user input is never
// passed directly to ${sortColumn} or ${sortDirection}.
<select id="findPage" resultType="com.example.user.persistence.UserSummary">
SELECT id AS id,
display_name AS displayName,
status AS status,
created_at AS createdAt
FROM users
WHERE tenant_id = #{tenantId}
ORDER BY ${sortColumn} ${sortDirection}
LIMIT #{limit}
</select>
Derive tenantId do principal autenticado ou de um contexto de tenant do lado do servidor,
nunca de um campo de requisição. Autentique o principal e verifique
se ele está autorizado para o tenant antes de invocar o mapper; mantenha o
predicado tenant_id em SQL como defesa em profundidade.
Se possível, evite ${} inteiramente selecionando entre instruções fixas ou usando
um construtor de consulta específico do banco de dados. Nunca interpole a entrada do usuário em
um nome de tabela, nome de coluna, ORDER BY, fragmento WHERE ou expressão SQL.
Para múltiplos parâmetros, use um objeto de requisição ou nomes explícitos de @Param:
List<UserSummary> findActive(
@Param("tenantId") long tenantId,
@Param("statuses") Set<UserStatus> statuses
);
Não use o elemento externo obsoleto parameterMap. Prefira mapeamentos de parâmetros
inline e jdbcType explícitos para valores anuláveis quando o driver JDBC
precisar.
XML, Tipos de Resultado e Mapas de Resultado
- Use
resultTypepara um mapeamento simples de um para um cujos rótulos de coluna já correspondem às propriedades de destino. - Use
resultMapquando aliases, manipuladores de tipo, objetos aninhados ou coleções precisarem de mapeamento explícito.
…
Perguntas frequentes
O que é MyBatis?
MyBatis é uma ferramenta que ajuda programas Java a se comunicarem com bancos de dados, permitindo escrever comandos SQL de forma mais organizada.
O que são 'mappers'?
Mappers são como tradutores entre o código do seu programa e os comandos SQL. Eles definem quais dados buscar e como apresentá-los.
Por que a segurança das consultas é importante?
Consultas inseguras podem permitir que pessoas mal-intencionadas acessem ou modifiquem seus dados. Esta ferramenta ajuda a prevenir isso.
Detalhes
Descrição original do autor
MyBatis and MyBatis-Spring patterns for mapper design, XML and annotation SQL, result mapping, dynamic SQL safety, transactions, batching, pagination, and query performance. Use when building or reviewing Java persistence code with MyBatis, Spring Boot, MyBatis-Spring, or MyBatis-based legacy applications.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #89
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail