typeorm 使用
使用 REPLACE INTO
let query = getConnection('ubs_spider_black').createQueryBuilder()
.insert()
.into(FrontWebPageRecord)
.values(records);
let [sql, param] = query.getQueryAndParameters();
sql = sql.replace('INSERT INTO', 'REPLACE INTO');
return await conn.blacklist.manager.query(sql, param);
使用流式查询
const queryRunner = typeorm.createQueryRunner();
await queryRunner.connect();
let stream = await queryRunner.stream('select * from admin');
stream.on('result', result => {
console.log(result);
})
stream.on('error', err => {
queryRunner.release();
console.log(err);
})
stream.on('end', ()=> {
queryRunner.release();
stream.close();
})
批量插入
使用原生的 MySQL 插入
typeorm.manager
.query('INSERT INTO admin (version, log_level, mode) VALUES ?', [
[[1, 2, 3], [2, 3, 4]]
])
.then(res => {});
扩展 typeorm 的装饰器
可以用如下方式使用装饰器:
import {
ColumnInfo,
PrimaryGeneratedColumn,
Table
} from 'configuration/annotation';
@Table({
name: 'input',
type: 'front',
addSearch: false
})
export default class InputRecord {
@PrimaryGeneratedColumn()
id: string;
@ColumnInfo({ name: 'keyword', cnName: '关键词', readOnly: true, add: true, search: true })
keyword: string;
}
ColumnInfo
是对 Column
的扩展:
// 继承自 typeorm 的 ColumnOptions,在扩展中调用 typeorm
export interface TableColumn extends ColumnOptions {
name: string; // 数据库表列名
cnName?: string; // 中文名
tsName?: string; // 配置的特殊类使用的属性对应关系
readOnly?: boolean;
itemsRemote?: string; // 从远程加载下拉选项
search?: boolean; // 是否可以搜索
add?: boolean; // 新增列表
required?: boolean
}
export function ColumnInfo(info: TableColumn): Function {
return function(target: Object, propertyName: string) {
// 调用 typeorm 的 Column 方法
Column(info)(target, propertyName);
let construct = target.constructor;
if (construct) {
info.tsName = propertyName;
if (excludeSet.has(info.name)) {
info.add = info.add || false;
info.search = info.search || false;
}
if (columnMap.has(construct)) {
columnMap.get(construct).push(info);
} else {
columnMap.set(construct, [info]);
}
}
};
}
navigate_before node使用笔记 navigate_next 深入浅出 nodejs