Neolithic Populous Metropolis

    mysql-xmodel

    1.0.3 • Public • Published

    xModel

    一个极简的node-mysql模型类

    Features

    • Promise化,告别回调地狱
    • 简洁的api,支持链式调用

    todo

    • 格式化数据,如时间戳,数据分组等
    • 事务处理
    • 目前只支持连接单个数据库

    bug

    • 异步导致sql属性返回值错乱,需要进行调试

    Step

    npm i mysql-xmodel -S
    
    let Model = require("mysql-xmodel");
     
    // 创建连接池
    Model.init({
        "host": "localhost",
        "user": "root",
        "password": "123456",
        "database": "shymean",
    });
     
    // 实例化模型
    let admin = new Model("shymean_admin");

    API

    sql

    使用sql属性获得上一次操作的SQL语句

    admin.where("id", 1).select(["id", "name", "password"]).then(res=>{
        //  SELECT  `id`, `name`, `password` FROM shymean_admin WHERE id = 1
        console.log(admin.sql)
    })

    query

    执行原始SQL语句

    admin.query(sql, values).then(res=>{
        // result
    })
    

    where

    where(key, logic, value)用来配置WHERE子句,当逻辑操作符是=时可省略

    where("id", 1) // WHERE id = 1
    where("id", ">", 1) // WHERE id > 1
    

    如果存在多个条件子句,须调用andWhere(key, logic, value)orWhere(key, logic, value)

    andWhere(name, "root"); // AND name = 'root'
    orWhere(id, "<", 10); // OR id < 10
    

    调用顺序决定了条件的排列顺序。

    select

    select(field)用来执行SELECT操作,field参数为需要获取的字段数组,默认为["*""],该方法返回查询结果

    admin.select(["id", "name", "password"]).then(res=>{
        // SELECT `id`, `name`, `password` FROM shymean_admin
    });
     
    admin.select().then(res=>{
        // SELECT * FROM shymean_admin
    });

    distinct

    对应DISTINCT,去除重复结果

    admin.distinct().select()
    

    alias

    为模型表设置别名,用于联结查询

    admin.alias("a"); // shymean_admin AS a
    

    join

    join(table, key, logic, value)联结查询:

    • table为需要联结的表名,如果需要设置别名则直接传入
    • key, logic, value后续三个参数对应where方法参数,用于设置联结条件,同上logic = '='时可不传
    article.alias("a").join("shymean_article_tag AS t", "a.id", "t.article_id")
           .select(["a.title", "t.tag_id"]).then((res) => {
        //SELECT  `a`.`title`, `t`.`tag_id` FROM shymean_article AS a , shymean_article_tag AS t  WHERE a.id = t.article_id                
    });

    leftJoin(table, key, logic, value)rightJoin(table, key, logic, value)参数同上,分别对应左联结和右联结

    groupBy

    groupBy(field)用于设置分组

    having

    having(key, logic, value)用于设置分组筛选

    orderBy

    orderBy(field, logic = "DESC"),用于设置排序,多个排序条件可链式调用

    admin.orderBy("name").orderBy("id").select()
    

    limit

    limit(num)限制输出个数

    offset

    offset(num),跟limit(num)同时使用,用于指定偏移量

    insert

    insert(value)用来执行INSERT操作,value参数为一个JSON对象,该方法返回insertId

    admin.insert({ name: "test", password: "1234" }).then((id) => {
        // insertId
    });

    update

    update(value)用来执行UPDATE操作,value参数为一个JSON对象,该方法返回changedRows。 需要的注意的是为了防止误操作,必须在调用update()之前调用where()

    admin.where("id", 18).update({ name: "test_update", password: "1234" }).then((length) => {
        // changedRows
    });

    delete

    delete()用来执行DELETE操作,该方法返回affectedRows,同上,必须在调用delete()之前调用where()

    admin.where("id", 19).delete().then((length) => {
        // affectedRows
    });

    聚集函数

    提供了相关聚集函数的快捷方式

    • count(),返回行数
    • max(field),返回对应字段最大值
    • min(field),返回对应字段最小值
    • avg(field),返回平均值
    • sum(field),求和

    Keywords

    Install

    npm i mysql-xmodel

    DownloadsWeekly Downloads

    1

    Version

    1.0.3

    License

    MIT

    Last publish

    Collaborators

    • shymean