@ticatec/node-common-library
Version:
A comprehensive Node.js database access framework providing robust abstractions for database connection management, SQL execution, transaction handling, pagination, and dynamic query building.
210 lines (209 loc) • 6.6 kB
TypeScript
import Field from "./Field";
import { Logger } from 'log4js';
import PaginationList from "./PaginationList";
import CommonSearchCriteria from "./CommonSearchCriteria";
declare type PostConstructionFun = (obj: any) => void;
export { PostConstructionFun };
export default abstract class DBConnection {
protected readonly logger: Logger;
protected constructor();
/**
* 开始事务
* @abstract
*/
abstract beginTransaction(): Promise<void>;
/**
* 提交事务
* @abstract
*/
abstract commit(): Promise<void>;
/**
* 回滚事务
* @abstract
*/
abstract rollback(): Promise<void>;
/**
* 关闭数据库连接
* @abstract
*/
abstract close(): Promise<void>;
/**
* 执行一个SQL语句
* @param sql - SQL语句
* @protected
* @abstract
* @returns Promise返回执行结果
*/
protected abstract executeSQL(sql: string): Promise<any>;
/**
* 执行update/delete/insert查询,返回影响记录的数量
* @param sql - SQL语句
* @param params - SQL参数数组
* @abstract
* @returns Promise返回影响的记录数量
*/
abstract executeUpdate(sql: string, params: Array<any>): Promise<number>;
/**
* 插入一条记录
* @param sql - INSERT SQL语句
* @param params - SQL参数数组
* @abstract
* @returns Promise返回插入结果
*/
abstract insertRecord(sql: string, params: Array<any>): Promise<any>;
/**
* 更新符合条件的记录
* @param sql - UPDATE SQL语句
* @param params - SQL参数数组
* @abstract
* @returns Promise返回更新结果
*/
abstract updateRecord(sql: string, params: Array<any>): Promise<any>;
/**
* 删除符合条件的记录
* @param sql - DELETE SQL语句
* @param params - SQL参数数组
* @abstract
* @returns Promise返回影响的记录数量
*/
abstract deleteRecord(sql: string, params: Array<any>): Promise<number>;
/**
* 获取count数,默认属性是cc
* @param data
* @param key
* @protected
*/
protected getCount(data: any, key?: string): number;
/**
* 执行count语句,返回count值
* @param sql - 要执行的count SQL语句
* @param params - SQL参数数组
* @param key - 计数字段的键名,默认为'cc'
* @protected
* @returns Promise返回计数值
*/
executeCountSQL(sql: string, params: Array<any>, key?: string): Promise<number>;
/**
*
* @param sql
* @param params
* @param pageNo
* @param rowCount
* @protected
*/
quickSearch(sql: string, params?: Array<any>, pageNo?: number, rowCount?: number): Promise<any>;
/**
* 执行select查询语句,返回数据列表
* @param sql
* @param params
* @param postConstruction
*/
listQuery(sql: string, params?: Array<any> | null, postConstruction?: PostConstructionFun | null): Promise<Array<any>>;
/**
* 查询单条记录,如果有多条,返回第一条
* @param sql
* @param params
* @param postConstruction
*/
find(sql: string, params?: Array<any> | null, postConstruction?: PostConstructionFun | null): Promise<any>;
/**
* 处理SQL文件,去除注释行,分割sql语句
* @param file
* @private
*/
private loadAndSplitSQL;
/**
* 执行一个SQL文件,去除注释并分割SQL语句执行
* @param file - SQL文件路径
* @returns Promise返回是否有错误发生
*/
executeSQLFile(file: string): Promise<boolean>;
/**
* 执行分页查询,按照分页条件返回分页结果
* @param criteria - 分页查询条件对象
* @returns Promise返回分页结果列表
*/
executePaginationSQL(criteria: CommonSearchCriteria): Promise<PaginationList>;
/**
* 根据条件查询返回所有符合条件的结果,忽略分页
* @param criteria - 查询条件对象
* @returns Promise返回所有符合条件的数据数组
*/
queryByCriteria(criteria: CommonSearchCriteria): Promise<Array<any>>;
/**
* 执行SQL语句,获取数据
* @param sql - SQL语句
* @param params - SQL参数数组,可选
* @protected
* @abstract
* @returns Promise返回查询结果
*/
protected abstract fetchData(sql: string, params?: Array<any>): Promise<any>;
/**
* 获取查询结果对应的字段名列表
* @param result - 查询结果对象
* @abstract
* @returns 字段信息数组
*/
abstract getFields(result: any): Array<Field>;
/**
* 从结果中获得数据集
* @param result - 查询结果对象
* @protected
* @abstract
* @returns 数据行数组
*/
protected abstract getRowSet(result: any): Array<any>;
/**
* 返回受影响的行数
* @param result - 执行结果对象
* @protected
* @abstract
* @returns 受影响的行数
*/
protected abstract getAffectRows(result: any): number;
/**
* 下划线命名转换为驼峰命名
* @param name - 要转换的字段名
* @protected
* @returns 转换后的驼峰命名字符串
*/
protected toCamel(name: string): string;
/**
* 构建字段对应列表
* @param fields - 字段信息数组
* @protected
* @returns 字段映射Map对象
*/
protected buildFieldsMap(fields: Array<any>): Map<string, string>;
/**
* 设置嵌套对象的属性值
* @param obj - 目标对象
* @param field - 字段名(支持点分隔的嵌套字段)
* @param value - 要设置的值
* @protected
*/
protected setNestObj(obj: any, field: string, value: any): void;
/**
* 将返回的多行数据转换成数组对象
* @param result - 查询结果对象
* @protected
* @returns 转换后的数据对象数组
*/
protected resultToList(result: any): Array<any>;
/**
* 返回设定结果集大小的限制语句
* @param rowCount - 行数限制
* @param offset - 偏移量
* @returns LIMIT和OFFSET语句字符串
*/
getRowSetLimitClause(rowCount: number, offset: number): string;
/**
* 将首行转换为对象,如果首行不存在,返回空
* @param result - 查询结果对象
* @protected
* @abstract
* @returns 第一行数据对象或null
*/
protected abstract getFirstRow(result: any): any;
}