yoyomysql
Version:
一个链式连接mysql数据库的扩展包
304 lines (303 loc) • 8.65 kB
TypeScript
import mysql from 'mysql2/promise';
/**排序规则 */
type Order = 'ASC' | 'DESC';
type whereArr = Array<[string, operator, any]>;
/**查询结果集 */
type resultSet = {
data: any[];
count: number;
maxCount: number;
fields: mysql.FieldPacket[];
};
/**查询结果集分页 */
type resultSetPages = {
data: any[];
count: number;
maxCount: number;
fields: mysql.FieldPacket[];
maxPage?: number;
};
/**运算符 */
type operator = '=' | '<>' | '<' | '<=' | '>' | '>=' | 'LIKE' | 'IN' | 'NOT IN' | 'IS NULL' | 'IS NOT NULL' | 'BETWEEN' | 'NOT BETWEEN' | 'REGEXP' | 'NOT REGEXP' | 'NOT LIKE';
/**事务连接 */
type TransactionConn = {
table: (table: string) => YoyoMysqlClass;
/**
* 执行sql语句
* @param sql sql语句
* @param values 参数
* @returns
*/
execute: (sql: string, values?: any) => Promise<[Array<{
[key: string]: any;
}>, mysql.FieldPacket[]] | mysql.ResultSetHeader>;
/**
* 执行sql查询语句
* @param sql sql语句
* @param values 参数
* @returns
*/
query: (sql: string, values?: any) => Promise<[Array<{
[key: string]: any;
}>, mysql.FieldPacket[]]>;
};
export default class YoyoMysql {
private static _POOL;
/** 是否显示sql语句 */
static isShowSql: boolean;
/**
* 设置打印sql语句的方法
* @param sql sql语句
* @param highlightSQL 高亮sql方法
*/
static printMethod: (sql: string, highlightSQL: (sql: string) => void) => void;
/**
* 创建连接池
* @param config mysql.PoolOptions
* @returns
*/
static createPool(config: mysql.PoolOptions): typeof YoyoMysql;
/**
* 设置表名
* @param table 表名
* @returns
*/
static table(table: string): YoyoMysqlClass;
/**
* 开启事务(在(执行结束-提交)或者(报错时-回滚)自动释放连接)
* @param callback 回调函数
* @param isError 是否开启错误信息抛出(勾选后错误将直接抛出,需要外围拦截)
*/
static beginTransaction(callback: (conn: TransactionConn) => Promise<any>, isError?: boolean): Promise<boolean>;
/**
* 获取一条连接(在执行结束或者报错时自动释放连接)
* @param callback 回调函数
*/
static getOneConnection(callback: (conn: TransactionConn) => Promise<any>): Promise<any>;
static query(sql: string, values?: any): Promise<[Array<{
[key: string]: any;
}>, mysql.FieldPacket[]]>;
static execute(sql: string, values?: any): Promise<[Array<{
[key: string]: any;
}>, mysql.FieldPacket[]]>;
/**
* 设置额外指定连接池
* @param pool 连接池
*/
static setPool(pool: mysql.Pool): void;
}
/**
* YoyoMysql 连接方式默认采用 mysql2连接池方式处理
*/
declare class YoyoMysqlClass {
private _link;
private _table?;
private _fields;
private _clogic;
private _where;
private _group;
private _having;
private _order;
private _join;
private _limit;
constructor(link: mysql.PoolConnection | mysql.Pool);
/**
* 设置表名
* @param table 表名
* @returns
*/
table(table: string): this;
/**
* 添加查询字段
* @param field 字段名
*/
field(field: string): this;
/**
* 添加多个查询字段
* @param fields 字段名数组
*/
field(fields: Array<string>): this;
/**
* 对查询结果集进行排序
* @param field 字段名
* @param order 排序方式 (ASC|DESC)
*/
order(field: string, order?: Order): this;
/**
* 对查询结果集进行排序
* @param field 字段名
* @param order 排序方式 (ASC|DESC)
* @returns
*/
order(fields: Record<string, Order> | string): this;
/**
* 添加多个字段分组
* @param fieldArr 字段数组
*/
group(fieldArr: Array<string>): this;
/**
* 添加一个字段分组
* @param field 字段名
* @returns
*/
group(field: string): this;
/**
* 过滤由 GROUP BY 产生的结果集中的重复记录
* @param where 条件(字符串自行组合)
* @returns
*/
having(where: string): this;
/**
* 添加结果集返回数量限制
* @param limit 返回数量
* @param offset 偏移量
*/
limit(limit: number, offset?: number): this;
/**
* 多表联查[左查询](LEFT JOIN)
* @param table 表名
* @param where 条件(字符串自行组合)
* @returns
*/
leftJoin(table: string, where: string): this;
/**
* 多表联查[右查询](RIGHT JOIN)
* @param table 表名
* @param where 条件(字符串自行组合)
* @returns
*/
rightJoin(table: string, where: string): this;
/**
* 多表联查[等值查询](INNER JOIN)
* @param {string} table 表
* @param {string} where 条件
*/
join(table: string, where: string): this;
/**
* 多表联查[一个匹配填充null返回](FULL JOIN)
* @param {string} table 表
* @param {string} where 条件
*/
fullJoin(table: string, where: string): this;
/**
* where集合处理方法(包含where的AND和OR)
* @param field 字段名
* @param args 参数
* @returns
*/
private _whereComposite;
/**
* 添加一条IN条件(子查询)
* @param field 字段名
* @param callback 回调函数
* @returns
*/
whereIn(field: string, callback: () => this): this;
/**
* 添加一条AND条件
* @param field 字段名
* @param operator 操作符
* @param value 值
*/
where(field: string, operator: operator, value: any): this;
/**
* 添加一条AND条件(默认操作符是 =)
* @param field 字段名
* @param value 值
*/
where(field: string, value: (string | number) | Record<string, (string | number)>): this;
/**
* 添加一条AND条件(子查询)
* @param field 字段名
* @param callback 回调函数
* @returns
*/
where(field: string, callback: () => this): this;
where(whereArr: whereArr): this;
/**
* 添加一条OR条件
* @param field 字段名
* @param operator 操作符
* @param value 值
*/
whereOr(field: string, operator: operator, value: any): this;
/**
* 添加一条OR条件(默认操作符是 =)
* @param field 字段名
* @param value 值
*/
whereOr(field: string, value: (string | number) | Record<string, (string | number)>): this;
/**
* 添加一条OR条件(子查询)
* @param field 字段名
* @param callback 回调函数
* @returns
*/
whereOr(field: string, callback: () => this): this;
whereOr(whereArr: whereArr): this;
/**
* 查询指定条件的单条数据
*/
find(): Promise<Record<string, any> | null>;
/**
* 查询指定条件的数据
* @returns 返回resultSet对象
*/
select(): Promise<resultSet>;
/**
* 查询指定条件的数据
* @param page 访问的页数
* @param count 每页显示的条数
* @returns 返回resultSet对象
*/
pages(page?: number, count?: number): Promise<resultSetPages>;
/**
* 删除指定条件的数据
* @returns 返回ResultSetHeader对象
*/
delete(): Promise<mysql.ResultSetHeader>;
/**
* 插入一条或者多条数据
* @param data 数据
*/
insert(data: any[][] | Record<string, any> | Record<string, any>[] | any[]): Promise<mysql.ResultSetHeader>;
/**
* 修改指定条件的所有数据
* @param data 数据
*/
update(data: Record<string, (number | string)> | [string, string][] | [string, string]): Promise<mysql.ResultSetHeader>;
/**
* 构建where条件
* @returns {where: string;params: any[]}
*/
private buildWhere;
/**
* 构建Select类型的语句
*/
private buildSelect;
/**
* 构建Delete类型的语句
*/
private buildDelete;
/**
* 构建Insert类型的语句
* @param data 数据
* @returns
*/
private buildInsert;
/**
* 构建Update类型的语句
*/
private buildUpdate;
/**
* 构建sql语句
* @param type 类型
* @param data 数据(insert数据结构和|update数据结构)
* @returns
*/
buildSql(type?: 'select' | 'insert' | 'update' | 'delete', data?: any): {
sql: string;
params: any[];
};
}
export {};