TSts-grm

驱动接入与 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 },
)

驱动的六个选择

驱动构造参数说明
SqliteDriverbetter-sqlite3 实例本地开发/测试最顺手
PostgresDriverpg.Pool生产首选
MySqlDrivermysql2/promise poolMySQL 8
OracleDriver / Oracle12DrivierOraclePooloracledbOracle 12c 及以下用后者
SqlServerDriver / SqlServer2012DriverSqlServerPoolSQL Server(2012 走专门一版)

各驱动对分页、锁、日期等的差异见「方言差异」页。

SqlClientOptions 速览

选项默认作用
strategyUPPER_SNAKE_CASE_DATABASE_NAMING_STRATEGY表/列/中间表命名策略(「命名策略」页)
defaultBatchSize / defaultListBatchSize128 / 16关联批加载 IN 上限(主/集合方向)
maxJoinFetchDepth5join 取形最大嵌套深度(0~10)
maxJoinFetchOffset0批加载退化为 join 的偏移阈值
sqlLogger{ pretty: false, parameter: "PLACEHOLDER" }SQL 日志格式(「SQL 日志与追踪」页)
filterManager / entityManager过滤器 / 模型发现(「模式创建与实体管理器」页)
isUnorderedPaginationDisabledfalse无序分页是否禁用
executorCreator恒等事务执行器包装点

构建时对非法值直接抛错(如 defaultBatchSize < 2maxJoinFetchDepth 越界)。

示例工作区里的 client

示例工作区的 infra/sql-client.ts(只读)是上面接线方式的一份"已替你完成"样本。因此在示例中直接使用 sqlClient 即可,无需重复创建客户端;查看该文件(点开工作区 tab)可对照真实接线写法。

下一步

client 手里的第一件事是怎么命名表与列——下一节命名策略。