What problem does it solve? Reactive Java code written against MariaDB Connector/R2DBC often fails because JDBC idioms do not carry over: queries never execute without a subscription, results are consume-once, and errors arrive as onError signals rather than thrown exceptions. This Skill prevents those traps when writing or reviewing R2DBC application code. ## Core Features & Use Cases - Correct connection and query patterns: Covers the r2dbc:mariadb:// URL scheme, ConnectionFactories.get(url), positional ? (0-indexed) and named :name placeholders, and the rule that nothing runs until the returned Publisher is subscribed. - Reactive transaction and error handling: Explains beginTransaction()/commitTransaction() returning Mono<Void> that must be subscribed, autocommit defaulting to true, and errors surfacing as typed R2dbcException subclasses via onError. - Bulk operations and pooling: Shows Statement.add() for batched parameter sets, returnGeneratedValues() for auto-generated ids, fetchSize() for cursor-based fetching, and r2dbc-pool for connection pooling. - Use Case: When asked to write a reactive repository class that inserts rows into MariaDB and reads back generated ids, produce code that binds parameters, queues sets with add(), subscribes the transaction Monos, and maps the consume-once Result exactly once. ## Quick Start Write a reactive Java method using MariaDB Connector/R2DBC that inserts a row into a table and returns the generated id.