# 511 Frameworks Micronaut Jdbc

> Use when you need programmatic JDBC in Micronaut — pooled DataSource, parameterized SQL, io.micronaut.transaction.annotation.Transactional, batching, and domain exception translation. This should trigger for requests such as Review JDBC or SQL data access in a Micronaut project; Improve transactions and parameter binding for Micronaut JDBC; Translate SQLException to domain exceptions or stream large result sets; Fix self-invocation bypassing @Transactional in Micronaut. Part of cursor-rules-java project

- Skill: `majiayu000/511-frameworks-micronaut-jdbc` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds add majiayu000/511-frameworks-micronaut-jdbc`
- Raw SKILL.md: https://api.skillmd.com/api/skills/majiayu000/511-frameworks-micronaut-jdbc/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- License: Apache-2.0
- Author: majiayu000 (https://skillmd.com/u/majiayu000)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/majiayu000/511-frameworks-micronaut-jdbc

---

# Micronaut JDBC — programmatic SQL

Apply programmatic JDBC patterns in Micronaut with safe SQL and clear transactions.

**What is covered in this Skill?**

- Injected javax.sql.DataSource (Hikari-backed with micronaut-jdbc-hikari) and try-with-resources for Connection / PreparedStatement
- PreparedStatement with bind parameters — never string concatenation
- Mapping ResultSet rows to Java records (dedicated mapRow method)
- Safe single-row queries with Optional<T>; never assume rs.next() succeeds
- SQLException translation to domain exceptions (catch-translate-rethrow)
- Streaming large result sets with setFetchSize to avoid OOM
- Batch updates with addBatch / executeBatch for bulk inserts
- @Transactional service boundaries and TransactionDefinition.Propagation (e.g. REQUIRES_NEW for independent commits)
- Self-invocation pitfall: call transactional collaborators through injected beans, not this.method()
- SQL text blocks for multi-line SQL (upserts, dialect-specific clauses)
- When to prefer Micronaut Data (`@512`) vs raw JDBC

**Scope:** Apply recommendations based on the reference rules and good/bad code examples.

## Constraints

Compile before JDBC refactors; verify after changes.

- **MANDATORY**: Run `./mvnw compile` or `mvn compile` before applying any change
- **PREREQUISITE**: Project must compile before applying JDBC improvements
- **SAFETY**: If compilation fails, stop immediately
- **BLOCKING CONDITION**: Compilation errors must be resolved by the user before proceeding
- **VERIFY**: Run `./mvnw clean verify` or `mvn clean verify` after applying improvements
- **BEFORE APPLYING**: Read the reference for detailed rules and examples

## When to use this skill

- Review JDBC or SQL data access in a Micronaut project
- Improve transactions and parameter binding for Micronaut JDBC
- Translate SQLException to domain exceptions or stream large result sets
- Fix self-invocation bypassing @Transactional in Micronaut

## Workflow

1. **Read reference and assess project context**

Read `references/511-frameworks-micronaut-jdbc.md` and inspect the current project setup before proposing changes.

2. **Gather scope and decide target improvements**

Identify requested outcomes, constraints, and the minimum safe set of changes to apply.

3. **Apply framework-aligned changes**

Implement or refactor configuration/code following the reference patterns and project conventions.

4. **Run verification and report results**

Execute appropriate build/tests and summarize what changed, what was verified, and any follow-up actions.

## Reference

For detailed guidance, examples, and constraints, see [references/511-frameworks-micronaut-jdbc.md](references/511-frameworks-micronaut-jdbc.md).

