export default class SqlParse{ private sql!: string private params: Array = [] public parse(sql: string = '', params: Array = []): SqlParse{ this.sql = sql //this.params = params.filter(param => !!param) this.params = params return this } public isNotNull(value: any, sql: string): SqlParse{ if(value && String(value).trim() !== ''){ this.sql = this.sql + ' and ' + sql } return this } public isNull(value: any, sql: string): SqlParse{ if(value === undefined || value === null || (value && String(value).trim() === '')){ this.sql = this.sql + ' and ' + sql } return this } public build(): string{ if(this.params.length !== this.sql.split('{?}').length - 1){ //throw new Error(': 参数与占位符数量不一致在\r\n' + this.sql + '\r\n' + this.params) } let sql: string = this.sql; (this.params || []).forEach(param => { sql = sql.replace('{?}', param) }) return sql } public toString(): string{ const sql = this.build() return sql } }