UNPKG

@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
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; }