QuickLite
A lightweight ORM toolkit for SQLite in Node.js and Electron applications.
Features
- Simple and efficient database connection management
- Entity-based table schema definition
- Automatic table creation and migrations
- Type-safe query builder
- Generic repository pattern for CRUD operations
- Supports transactions, indexes, and foreign keys
- Zero dependencies apart from better-sqlite3
- Perfect for Electron and Node.js applications
Installation
npm install quicklite better-sqlite3
Requires Node.js v14.21.1 or later. The toolkit uses better-sqlite3 v11.8.1 (with SQLite 3.48.0).
Basic Usage
Database Connection
import { DatabaseManager } from 'quicklite';
const dbManager = DatabaseManager.getInstance({
dbPath: './myapp.db',
enableWAL: true,
enableForeignKeys: true
});
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();
Define Entity Models
import { BaseEntity, TableInfo } from 'quicklite';
export class User extends BaseEntity {
id?: number;
username!: string;
email?: string;
createdAt?: number;
static getTableInfo(): TableInfo {
return {
name: 'users',
primaryKey: 'id',
columns: [
{
name: 'id',
type: 'INTEGER',
primaryKey: true,
autoIncrement: true
},
{
name: 'username',
type: 'TEXT',
notNull: true,
unique: true
},
{
name: 'email',
type: 'TEXT',
unique: true
},
{
name: 'createdAt',
type: 'INTEGER',
default: 'CURRENT_TIMESTAMP'
}
],
indices: [
{
name: 'idx_users_email',
columns: ['email'],
unique: true
}
]
};
}
}
Initialize Database Tables
import { DbInitializer } from 'quicklite';
import { User } from './models/User';
import { Post } from './models/Post';
const db = dbManager.getDatabase();
const dbInitializer = new DbInitializer(db);
dbInitializer
.register(User)
.register(Post)
.initTables();
Create Services for CRUD Operations
import { BaseService } from 'quicklite';
import { User } from './models/User';
export class UserService extends BaseService<User> {
constructor(db) {
super(db, User);
}
findByUsername(username: string): User | null {
return this.findOne({
where: { username }
});
}
}
const userService = new UserService(db);
const userId = userService.insert({
username: 'johndoe',
email: 'john@example.com'
});
const user = userService.getById(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);
Using Query Builder for Complex Queries
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();
Transaction Support
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';
await DataTransferUtil.exportToJson(userService, 'users.json');
await DataTransferUtil.importFromJson(userService, 'users.json');
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';
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 total
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.age > 30
GROUP BY u.id
ORDER BY total DESC`
);
console.log('索引建议:', indexSuggestions);
文档
Documentation
License
MIT