在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:lubejs开源软件地址:https://gitee.com/jovercao/lubejs开源软件介绍:Lubejs
lubejs是什么lubejs 是一套类型化sql构建、执行工具,亦是一套强大易用的Typescript ORM开发框架。
lubejs理念
快速开始安装使用 npm 安装: # 安装lubejs库npm install lubejs --save# 安装lubejs-mssql驱动npm install lubejs-mssql 开始Hello world! // hello-world.tsimport { connect, SQL } from 'lubejs'// 导入mssql驱动import 'lubejs-mssql'(async () => { // 创建连接 const db = await connect('mssql://user:password@localhost:1433/database'); // SELECT 'hello world' console.log(await db.queryScalar(SQL.select('hello world!'))); // => 'hello world' await db.close();})() 完整范例 // example.tsimport { connect, SQL, Decimal, Uuid, Connection, DbType, outputCommand,} from "lubejs";import "lubejs-mssql";interface Table1 { id: number; name: string; stringField?: string; floatField?: number; dateField?: Date; decimalField?: Decimal; uuidField?: Uuid; updatedAt: Date; binaryField?: ArrayBuffer; createdAt: Date; operator?: string;}interface Pay { id?: number; year: number; month: number; amount: Decimal; personId: number;}interface Person { id?: number; name: string; age: number;}/** * 初始化数据库 */async function initDb(db: Connection) { await db.query( SQL.if(SQL.std.existsTable('table1')).then(SQL.dropTable("table1")) ); await db.query( SQL.createTable("table1").as(({ column }) => [ column("id", DbType.int32).identity().primaryKey(), column("name", DbType.string(100)).notNull(), column("stringField", DbType.string(100)).null(), column("floatField", DbType.float).null(), column("dateField", DbType.datetimeoffset).null(), column("decimalField", DbType.decimal(18, 6)), column("uuidField", DbType.uuid), column("updatedAt", DbType.datetimeoffset).default(SQL.std.now()), column("binaryField", DbType.binary(DbType.MAX)), column("createdAt", DbType.datetimeoffset).default(SQL.std.now()), column("operator", DbType.string(100)).null(), ]) ); await db.query( SQL.if(SQL.std.existsTable('pay')).then(SQL.dropTable("pay")) ); await db.query( SQL.createTable("pay").as(({ column }) => [ column("id", DbType.int32).identity().primaryKey(), column("year", DbType.int32), column("month", DbType.int32), column("amount", DbType.decimal(18, 2)), column("personId", DbType.int32), ]) ); await db.query( SQL.if(SQL.std.existsTable('person')).then(SQL.dropTable("person")) ); await db.query( SQL.createTable("person").as(({ column }) => [ column("id", DbType.int32).identity().primaryKey(), column("name", DbType.int32).notNull(), column("age", DbType.int32), ]) );}/** * Table1表声明 */// 这是一个范例async function example(db: Connection) { //---------------插入数据------------------ /* * INSERT INTO table1 (stringField, floatField, dateField) * VALUES ('value1-1', 2, Convert(DATETIMEOFFSET, '2019-11-18 00:00:00')) * ('value1-2', 1, Convert(DATETIMEOFFSET, '2019-11-18 00:00:00')) * ('value1-3', 45, Convert(DATETIMEOFFSET, '2019-11-18 00:00:00')) */ const insertSql = SQL.insert<Table1>("table1").values([ { name: "item1", stringField: "value1-1", floatField: 3.14, dateField: new Date(), decimalField: new Decimal("3.1415"), uuidField: Uuid.new(), binaryField: Buffer.from('abcdefeg') }, { name: "item2", stringField: "value1-2", floatField: 1.132, dateField: new Date(), decimalField: new Decimal("3.1415"), uuidField: Uuid.new(), binaryField: Buffer.from('abcdefeg') }, { name: "item3", stringField: "value1-3", floatField: 45.2656, dateField: new Date(), decimalField: new Decimal("3.1415"), uuidField: Uuid.new(), binaryField: Buffer.from('abcdefeg') }, ]); await db.query(insertSql); // 你还以使用以下方式插入,等效于上面的写法 await db.insert<Table1>("table1", [ { name: "item1", stringField: "value1-1", floatField: 3.14, dateField: new Date(), decimalField: new Decimal("3.1415"), uuidField: Uuid.new(), binaryField: Buffer.from('abcdefeg') }, { name: "item2", stringField: "value1-2", floatField: 1.132, dateField: new Date(), decimalField: new Decimal("3.1415"), uuidField: Uuid.new(), binaryField: Buffer.from('abcdefeg') }, { name: "item3", stringField: "value1-3", floatField: 45.2656, dateField: new Date(), decimalField: new Decimal("3.1415"), uuidField: Uuid.new(), binaryField: Buffer.from('abcdefeg') }, ]); //---------------更新数据------------------ // UPDATE t SET updatedAt = Convert(DateTime, '2019-11-18 00:00:00') FROM table1 t WHERE id = 1 const t = SQL.table<Table1>("table1").as("t"); const updateSql = SQL.update(t) .set({ updatedAt: new Date(), operator: "your name" }) .where(t.id.eq(1)); await db.query(updateSql); // 你还以使用以下方式更新,等效于上面的写法 await db.update<Table1>( "table1", { updatedAt: new Date(), operator: "your name" }, { id: 1 } ); //---------------删除数据------------------- // DELETE t FROM table1 t WHERE t.id = 1 const deleteSql = SQL.delete(t).from(t).where(t.id.eq(1)); await db.query(deleteSql); // 你还以使用以下方式删除 // DELETE table1 WHERE id = 1 await db.delete("table1", { id: 1 }); //----------------查询数据-------------------- // SELECT t.* FROM table1 AS t WHERE t.id = 1 AND t.name = 'name1' const selectSql = SQL.select(t.star) .from(t) .where(SQL.and(t.id.eq(1), t.name.eq("name1"))); console.log((await db.query(selectSql)).rows); // You can also select in this way // SELECT * FROM table1 WHERE id = 1 AND name = 'name1' console.log( await await db.select("table1", { where: { id: 1, name: "item1", }, }) ); // //---------------以下是一个复合查询------------ const p = SQL.table<Person>("person").as("p"); const pay = SQL.table<Pay>("pay"); const sql = SQL.select({ year: pay.year, month: pay.month, name: p.name, age: p.age, total: SQL.std.sum(pay.amount), }) .from(pay) .join(p, pay.personId.eq(p.id)) .where(p.age.lte(18)) .groupBy(p.name, p.age, pay.year, pay.month) .having(SQL.std.sum(pay.amount).gte(new Decimal(100000))) .orderBy(pay.year.asc(), pay.month.asc(), SQL.std.sum(pay.amount).asc(), p.age.asc()) .offset(20) .limit(50); console.log((await db.query(sql)).rows);}(async () => { // 创建一个Lube连接 const db = await connect("mssql://sa:[email protected]/Test"); // 打开连接 await db.open(); // 输出日志 db.on('command', (cmd) => outputCommand(cmd, process.stdout)) try { await initDb(db); await example(db); } finally { await db.close(); }})(); 版本说明注意: lubejs目前仍为预览版,内部会有部分调整,公共API可能会有小许调整,但不会有大调整。 渐进式分离
数据库支持列表
NodeJs版本支持nodejs >= 概念SQL构造器(SQL对象)所有的SQL构造,均由 // 导入SQL对象import { SQL } from 'lubejs'; 为了更贴近sql语法,您还可以使用解构来引入需要的关键字 const { insert, delete: $delete // 关键字delete需要使用别名} = SQL// 构建插入张三、李四两条记录到table1的语句const sql = insert('table1').values([{ name: '张三', age: 19, sex: '男' }, { name: '李四', age: 25, sex: '男' }]);// 构建table1表中删除id为1记录的sql语句const sql = $delete('table1').where({ id: 1 }) 更多 注意: 标准行为(SQL.std)lubejs为了更大程序的兼容多数据库,专门定义了标准行为,用于统一在跨数据库时的操作,避免在跨方言数据库迁移是的重复劳动。
常用函数
聚合函数
日期函数
字符串函数
数学函数
常用操作
全部评论
专题导读
上一篇:TimescaleDB: TimescaleDB 是基于 PostgreSQL 数据库开发的一款时序数据库,以插件化 ...发布时间:2022-03-24下一篇:redis-client-app: A redis client application on mac, windows and linux.发布时间:2022-03-24热门推荐
热门话题
阅读排行榜
|
请发表评论