一个轻量级的 SQLite ORM 工具包

server/2025/3/31 11:09:39/

一个轻量级的 SQLite ORM 工具包,专为 Node.js 应用程序设计【Alpha版

由来

在开发《Electron + Vite + Vue 桌面应用模板》时为了方便数据库操作延伸而来。

特性

  • 简单高效的数据库连接管理
  • 基于实体的表结构定义
  • 自动表创建和迁移
  • 类型安全的查询构建器
  • 通用仓储模式实现 CRUD 操作
  • 支持事务、索引和外键
  • 除 better-sqlite3 外零依赖
  • 完美适配 Electron 和 Node.js 应用

后期实现

  • 装饰器支持
  • 实体类字段优化
  • 初始化优化
  • 更多实现

安装

npm install quicklite better-sqlite3

需要 Node.js v14.21.1 或更高版本。本工具包使用 better-sqlite3 v11.8.1 (包含 SQLite 3.48.0)。

基本用法

数据库连接

import { DatabaseManager } from 'quicklite';// 在 Node.js 中
const dbManager = DatabaseManager.getInstance({dbPath: './myapp.db',enableWAL: true,enableForeignKeys: true
});// 在 Electron 中,通常在主进程中
import path from 'path';
import { app } from 'electron';const userDataPath = app.getPath('userData');
const dbPath = path.join(userDataPath, 'database/myapp.db');const dbManager = DatabaseManager.getInstance({dbPath,enableWAL: true,enableForeignKeys: true
});// 获取数据库实例
const db = dbManager.getDatabase();

定义实体模型

import { BaseEntity, TableInfo } from 'quicklite';class User extends BaseEntity {id!: number;username!: string;email!: string;age?: number;createdAt!: number;// 定义表名static getTableName(): string {return 'users';}// 定义表结构static getTableInfo(): TableInfo {return {columns: [{ name: 'id', type: 'INTEGER', primaryKey: true, autoIncrement: true },{ name: 'username', type: 'TEXT', notNull: true },{ name: 'email', type: 'TEXT', notNull: true, unique: true },{ name: 'age', type: 'INTEGER' },{ name: 'createdAt', type: 'INTEGER', notNull: true, default: 'CURRENT_TIMESTAMP' }],indexes: [{ name: 'idx_users_username', columns: ['username'] },{ name: 'idx_users_email', columns: ['email'] }]};}
}

数据库初始化和表创建

import { DbInitializer } from 'quicklite';// 获取数据库实例
const db = dbManager.getDatabase();// 初始化数据库,创建所有实体对应的表
const entities = [User, Post, Comment];
const initializer = new DbInitializer(db);
initializer.initializeTables(entities);

使用服务类进行CRUD操作

import { BaseService } from 'quicklite';// 创建连接实例,包装数据库对象
const connection = new DbConnection(db);// 创建服务类实例
const userService = new BaseService<User>(connection, User);// 插入新用户
const newUser = {username: 'john_doe',email: 'john@example.com',age: 30,createdAt: Date.now()
};const userId = userService.insert(newUser);// 通过ID获取用户
const user = userService.findById(userId);// 使用条件查询用户
const users = userService.find({where: { email: 'john@example.com' },orderBy: 'createdAt DESC',limit: 10
});// 更新用户
userService.update({id: userId,email: 'newemail@example.com'
});// 删除用户
userService.deleteById(userId);

使用查询构建器进行复杂查询

import { QueryBuilder } from 'quicklite';// 获取数据库实例
const db = dbManager.getDatabase();// 构建复杂查询
const query = new QueryBuilder(db, 'users').select('users.*', 'COUNT(posts.id) as postCount').leftJoin('posts', 'posts.userId = users.id').where('users.createdAt', '>', Date.now() - 30 * 24 * 60 * 60 * 1000).andWhere(qb => {qb.where('users.username', 'LIKE', '%john%').or(subQb => {subQb.where('users.email', 'LIKE', '%john%');});}).groupBy('users.id').having('postCount', '>', 5).orderBy('postCount', 'DESC').limit(10);// 执行查询
const activeUsers = query.all();// 获取第一个结果
const topUser = query.first();// 计数匹配记录
const userCount = query.count();

事务支持

// 获取数据库实例
const db = dbManager.getDatabase();// 创建事务
const transaction = db.transaction(() => {userService.insert({ username: 'user1' });userService.insert({ username: 'user2' });// 如果任何操作失败,所有更改都将回滚
});// 执行事务
transaction();

工具类

QuickLite 提供了一系列实用工具类,用于辅助数据库操作、性能优化和数据管理。

备份工具 (BackupUtil)

提供 SQLite 数据库备份和恢复功能:

import { BackupUtil } from 'quicklite';// 备份数据库
await BackupUtil.backup(sourceDb, 'backup.db');// 恢复数据库
await BackupUtil.restore('backup.db', targetDb);

数据传输工具 (DataTransferUtil)

提供数据导入导出和数据传输功能:

import { DataTransferUtil } from 'quicklite';// 将表数据导出为JSON
await DataTransferUtil.exportToJson(userService, 'users.json');// 从JSON导入数据
await DataTransferUtil.importFromJson(userService, 'users.json');// 将查询结果导出为CSV
await DataTransferUtil.exportQueryToCsv(db, 'SELECT * FROM users WHERE age > 30', 'filtered_users.csv'
);// 在数据库之间复制表数据
await DataTransferUtil.copyTableData(sourceDb, targetDb, 'users', 'users'
);

查询分析器 (QueryAnalyzer)

提供 SQL 查询性能分析和优化建议:

import { QueryAnalyzer } from 'quicklite';// 分析SQL查询
const analysis = QueryAnalyzer.analyze(db,'SELECT * FROM users WHERE age > 30'
);console.log('执行时间:', analysis.executionTime, 'ms');
console.log('性能建议:', analysis.suggestions);// 获取索引建议
const indexSuggestions = QueryAnalyzer.suggestIndices(db,`SELECT u.name, o.product, SUM(o.amount) as totalFROM users u JOIN orders o ON u.id = o.user_id WHERE u.age > 30 GROUP BY u.idORDER BY total DESC`
);console.log('索引建议:', indexSuggestions);
主要功能
  1. 查询执行计划分析:解析 SQLite EXPLAIN QUERY PLAN 输出,识别可能的性能问题
  2. 索引使用检测:检查查询是否正在使用可用索引,识别索引扫描和表扫描
  3. 性能建议生成:根据查询结构和表结构生成优化建议
  4. 执行时间测量:测量查询执行时间,帮助识别慢查询
  5. 索引建议:基于查询模式自动建议创建索引
使用场景
  • 优化应用程序中的关键查询
  • 在开发阶段诊断潜在的性能问题
  • 为复杂查询找到最佳索引策略
  • 监控查询执行时间并识别瓶颈

http://www.ppmy.cn/server/179793.html

相关文章

《汽车理论》第一章作业1.3

1.3确定一轻型货车的动力性能(货车可装用4挡或5挡变速器&#xff0c;任选其中的一种进行整车性能计算) 1)绘制汽车驱动力与行驶阻力平衡图。 ①汽车驱动力&#xff1a; ②行驶阻力&#xff1a; ③发动机转速与汽车行驶速度之间的关系&#xff1a; %%驱动力-行驶阻力平衡图号货…

Elasticsearch客户端工具初探--kibana

1 Kibana简介 Kibana是Elastic Stack&#xff08;ELK&#xff09;中的可视化工具&#xff0c;用于对Elasticsearch中存储的数据进行搜索、分析和可视化展示。它提供了直观的Web界面&#xff0c;支持日志分析、业务监控、数据探索等功能&#xff0c;广泛应用于运维监控、安全分析…

自动化框架的设计与实现

一、自动化测试框架 在大部分测试人员眼中只要沾上“框架”&#xff0c;就感觉非常神秘&#xff0c;非常遥远。大家之所以觉得复杂&#xff0c;是因为落地运用起来很复杂&#xff1b;每个公司&#xff0c;每个业务及产品线的业务流程都不一样&#xff0c;所以就导致了“自动化…

Git+Fork 入门介绍

git 分区理解 fork安装 从路径下去拿软件时&#xff0c;注意先拉到本地。经验来看&#xff0c;fork直接安装会出不可思议的问题。 fork操作 安装&#xff0c;注意设置好名字&#xff0c;如果之前安装的同学&#xff0c;名字没有写好&#xff0c;重新安装设置好名字。 clone操…

Elasticsearch 之 ElasticsearchRestTemplate 普通查询

前言&#xff1a; 上一篇我们分享了 Spring Boot 整合 Elasticsearch 使用 ElasticsearchRepository 完成简单的增删改查&#xff0c;我们发现 ElasticsearchRepository 中很多稍微复杂一些的查询就会显示方法过期&#xff0c;对于 Elasticsearch 7.X 版本&#xff0c;我们可以…

React企业级复杂搜索方案深度实战

一、高阶搜索架构设计 1.1 分层架构模式 // 核心分层结构 src/ ├─ features/ │ ├─ search/ │ │ ├─ api/ // API通信层 │ │ ├─ domain/ // 领域模型 │ │ ├─ hooks/ // 业务逻辑Hook │ │ ├─ components/ //…

RT-Thread CI编译产物artifacts自动上传功能介绍

近期在RT-Thread开源项目中&#xff0c;我们引入了一项实用的功能改进——将每次CI&#xff08;持续集成&#xff09;编译生成的产物&#xff08;artifacts&#xff09;自动上传到GitHub&#xff0c;方便开发者和用户能够更便捷地获取和测试最新的编译结果。 参考链接&#xf…

春日焕新居:约克VRF中央空调,科技赋能,带你开启健康呼吸新时代

春回大地,万物复苏的季节里,无数家庭怀揣美好憧憬之心开启家居焕新装修。然而,当精心挑选的建材逐渐构筑起理想家的雏形,往往伴随着甲醛等有害气体的困扰,如同一道无形的屏障,阻挡我们对健康家居生活的追求。别担心,约克VRF中央空调凭借其卓越的产品性能和服务,为您打造一个健康…