OR
orm-mysql-usage
Build MySQL queries, perform CRUD operations, and manage transactions using @axiosleo/orm-mysql. Use when writing database queries, building where conditions, inserting/updating/deleting rows, managing transactions, or working with the ORM query builder in this project.
Install
mkdir -p .claude/skills/orm-mysql-usage && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/13425" && unzip -o skill.zip -d .claude/skills/orm-mysql-usage && rm skill.zipInstalls to .claude/skills/orm-mysql-usage
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Build MySQL queries, perform CRUD operations, and manage transactions using @axiosleo/orm-mysql. Use when writing database queries, building where conditions, inserting/updating/deleting rows, managing transactions, or working with the ORM query builder in this project.270 chars✓ has a “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
About this skill
@axiosleo/orm-mysql Usage Guide
Installation
npm install @axiosleo/orm-mysql
Setup
Create a Connection
const { createClient, QueryHandler } = require("@axiosleo/orm-mysql");
const conn = createClient({
host: "localhost",
port: 3306,
user: "root",
password: "password",
database: "my_db",
});
const db = new QueryHandler(conn);
Create a Connection Pool (recommended for production)
const { createPool, QueryHandler } = require("@axiosleo/orm-mysql");
const pool = createPool({
host: "localhost",
port: 3306,
user: "root",
password: "password",
database: "my_db",
connectionLimit: 10,
});
const db = new QueryHandler(pool);
Using MySQLClient
const { MySQLClient } = require("@axiosleo/orm-mysql");
const client = new MySQLClient({
host: "localhost",
port: 3306,
user: "root",
password: "password",
database: "my_db",
}, null, "pool"); // "default" | "promise" | "pool"
const rows = await client.table("users").select();
await client.close();
Class Hierarchy
QueryCondition -- where clauses (where, whereIn, whereLike, whereBetween...)
└── Query -- query building (table, attr, join, orderBy, limit, page...)
└── QueryOperator -- execution (select, find, insert, update, delete...)
└── TransactionOperator -- adds append() for row locking
QueryHandlerwraps a connection/pool and createsQueryOperatorvia.table(name)TransactionHandlerwraps a promise connection and createsTransactionOperatorvia.table(name)
Quick Start
const db = new QueryHandler(conn);
// SELECT
const users = await db.table("users")
.where("age", ">", 18)
.orderBy("name", "asc")
.limit(10)
.select("id", "name", "age");
// INSERT
await db.table("users").insert({ name: "Joe", age: 25 });
// UPDATE
await db.table("users").where("id", 1).update({ age: 26 });
// DELETE
await db.table("users").where("id", 1).delete();
// COUNT
const total = await db.table("users").where("age", ">", 18).count();
// IMPORTANT: for paginated lists, reuse the SAME builder for count() and select() -- see pagination.md
// FIND single row
const user = await db.table("users").where("id", 1).find();
Dry Run with notExec()
Call notExec() before any CRUD method to get a Builder object with .sql and .values instead of executing:
const builder = await db.table("users")
.where("age", ">", 18)
.notExec()
.select("id", "name");
console.log(builder.sql); // "SELECT `id`, `name` FROM `users` WHERE `age` > ?"
console.log(builder.values); // [18]
Reference Files
| Scenario | File |
|---|---|
| Building queries (table, join, orderBy, limit, groupBy, attr) | query-building.md |
| Where conditions (where, whereIn, whereLike, whereBetween...) | where-conditions.md |
| CRUD operations (select, find, count, insert, update, delete, incrBy, upsertRow) | crud-operations.md |
| Pagination (reuse the same builder for count() and select(), avoid duplicated where clauses) | pagination.md |
| Transactions (beginTransaction, commit, rollback, FOR UPDATE) | transactions.md |
Hooks
Register pre/post hooks for query operations:
const { Hook } = require("@axiosleo/orm-mysql");
Hook.pre(async (options) => {
console.log("Before:", options.operator, options.tables);
}, { table: "users", opt: "insert" });
Hook.post(async (options, result) => {
console.log("After:", result);
}, { table: "users", opt: "insert" });
Schema Helpers
const exists = await db.existTable("users");
const dbExists = await db.existDatabase("my_db");
const fields = await db.getTableFields("my_db", "users", "COLUMN_NAME", "DATA_TYPE");
Raw SQL
const result = await db.query({ sql: "SELECT * FROM users WHERE id = ?", values: [1] });