驱动接入与 SqlClient
@ts-grm/sql 的一切从 newSqlClient(driver, options) 开始。driver 决定方言与连接,options 调优执行行为:
// 在你的项目里(示例工作区已提供 client,见下)
import { newSqlClient, SqliteDriver, PostgresDriver } from '@ts-grm/sql'
import Database from 'better-sqlite3'
import { Pool } from 'pg'
// SQLite
const client = newSqlClient(new SqliteDriver(new Database('app.db')), {})
// PostgreSQL
const postgres = newSqlClient(
new PostgresDriver(new Pool({ connectionString: process.env.DATABASE_URL })),
{ strategy: spi.UPPER_SNAKE_CASE_DATABASE_NAMING_STRATEGY },
)
驱动的六个选择
| 驱动 | 构造参数 | 说明 |
|---|---|---|
SqliteDriver | better-sqlite3 实例 | 本地开发/测试最顺手 |
PostgresDriver | pg.Pool | 生产首选 |
MySqlDriver | mysql2/promise pool | MySQL 8 |
OracleDriver / Oracle12Drivier | OraclePool(oracledb) | Oracle 12c 及以下用后者 |
SqlServerDriver / SqlServer2012Driver | SqlServerPool | SQL Server(2012 走专门一版) |
各驱动对分页、锁、日期等的差异见「方言差异」页。
SqlClientOptions 速览
| 选项 | 默认 | 作用 |
|---|---|---|
strategy | UPPER_SNAKE_CASE_DATABASE_NAMING_STRATEGY | 表/列/中间表命名策略(「命名策略」页) |
defaultBatchSize / defaultListBatchSize | 128 / 16 | 关联批加载 IN 上限(主/集合方向) |
maxJoinFetchDepth | 5 | join 取形最大嵌套深度(0~10) |
maxJoinFetchOffset | 0 | 批加载退化为 join 的偏移阈值 |
sqlLogger | { pretty: false, parameter: "PLACEHOLDER" } | SQL 日志格式(「SQL 日志与追踪」页) |
filterManager / entityManager | — | 过滤器 / 模型发现(「模式创建与实体管理器」页) |
isUnorderedPaginationDisabled | false | 无序分页是否禁用 |
executorCreator | 恒等 | 事务执行器包装点 |
构建时对非法值直接抛错(如 defaultBatchSize < 2、maxJoinFetchDepth 越界)。
示例工作区里的 client
示例工作区的 infra/sql-client.ts(只读)是上面接线方式的一份"已替你完成"样本。因此在示例中直接使用 sqlClient 即可,无需重复创建客户端;查看该文件(点开工作区 tab)可对照真实接线写法。
下一步
client 手里的第一件事是怎么命名表与列——下一节命名策略。