none-sql

Connect to mysql as promise.

Usage no npm install needed!

<script type="module">
  import noneSql from 'https://cdn.skypack.dev/none-sql';
</script>

README

none-sql

MySQL连接中间件

基于npm开源库mysql开发而来,增加了Promise风格的方法,增加了常用的数据库操作的链式调用编程方法。

附带koa2使用方法

  • 安装

    npm install --save none-sql
    
  • 引用

    import { DB, Pool } from 'none-sql';
    
  • 配置

      interface IConfig {
        mapUnderscoreToCamelCase: boolean;  // 返回数据字段自动下划线转驼峰,查询数据字段自动驼峰转下划线
      }
    
      const configDefault: IConfig = {
        mapUnderscoreToCamelCase: false,
      };
    
  • 创建数据库对象

    const db = new DB({ database: string, user: string, password: string, host = 'localhost', port = 3306, config: IConfig = configDefault });
    
  • 创建连接池

    const pool = new Pool({ database: string, user: string, password: string, host = 'localhost', port = 3306, connectionLimit = 10, config: IConfig = configDefault });
    
    • 获取数据库连接
      const result = pool.getConnection();
      result.then((connection) => {
        connection.connect('tableName').get().then((data) => {
          console.log(data);
          connection.release();  // 使用完后将该数据库连接还给连接池
        }).catch((err) => {
          console.error(err);
          connection.release();  // 使用完后将该数据库连接还给连接池
        });
      });
      
  • 关闭数据库连接
    请在最后的数据库操作返回的promise对象的then/catch方法中调用此方法

    db.close();
    
  • 基本操作

    • 查——获取users表里所有记录
      db.connect('tableName').get();
      
      return Promise<Result>
      
    • 条件查——获取users表里city属性为shanghai的记录
      .where()参数为条件对象如{ username: 'james', age: 20 }
      该对象内的条件为且的关系,条件为或的关系请用.where().orWhere()
      db.connect('tableName').where({city: 'shanghai'}).get();
      
      return Promise<Result>
      
    • 增——向users表里添加若干条记录
      db.connect('tableName').add(any[]);
      
      return Promise<Result>
      
    • 删——删除users表里的若干条记录
      db.connect('tableName').where().delete();
      
      return Promise<Result>
      
    • 改——更改users表里的若干条记录
      db.connect('tableName').where().update({city: 'shanghai'});
      
      return Promise<Result>
      
    • 排序——
      db.connect('tableName').orderBy({password: true, username: false}).get();
      
      return Promise<Result>
      

    上式含义为按password将结果升序排序,按username将结果降序排序,这里password的优先级高于username

  • 事务操作

    db.transaction(async () => {
        //对数据库的操作
        await db.connect('tableName').add(any[]);
        await db.connect('tableName').where().delete();
    })
    
  • 嵌套查询

    db.connect('tableName1').where({
        userId: db.connect('tableName2').where({name: 'james'}).get()[0].id
    })
    
  • 执行自定义sql语句

    let sql = 'SELECT * FROM ?? WHERE ??=?';
    db.query(sql,['users','name','james']);
    

    相当于执行了

    SELECT * FROM `users` WHERE `name`="james"
    

    ?? 会自动在参数两侧添加反引号``
    ? 会自动在参数两侧添加双引号""

  • 在koa2中使用
    入口文件
    index.ts

    import { Pool } from 'none-sql';
    
    const pool = new Pool(database: string, user: string, password: string, host = 'localhost', connectionLimit = 10);
    
    app.use(
      async (ctx: any, next: any) => {
        ctx.request.db = await pool.getConnection();
        await next();
        ctx.request.db.connection.release();
      }
    );
    

    请求处理文件
    contorller.ts

    login = async (ctx: any) => {
      let result = (await ctx.request.db.connect('tableName').get())
      result.then((data) => {
        console.log(data);
      }).catch((err) => {
        console.error(err);
      });
    }