三分钟使用Sequelize

原创
2019/06/18 15:11
阅读数 243

连接数据库

DbConn.js


// var config = {
//     database: 'protocol',
//     username: 'root',
//     password: '123456',
//     host: 'localhost',
//     port: 3306
// };
var sequelize = new Sequelize(config.database, config.username, config.password, {
    host: config.host,
    port: config.port,
    dialect: 'mysql',
    logging: console.log,
    pool: {
        max: 5,
        min: 0,
        idle: 30000
    },
    timestamps: false
    //最好关掉timestamps , 框架自动帮你添加时间到UpdatedAt上边
});

sequelize
    .authenticate()
    .then(() => {
        console.log('Connection has been established successfully.');
    })
    .catch(err => {
        console.error('Unable to connect to the database:', err);
    });

module.exports = sequelize;

使用原生sql操作数据库

/**
 * 通过sql原生语句获取对应表数据
 */
exports.getTableDataBySql = function (sql, cb) {
    DbConn
        .query(sql, {type: DbConn.QueryTypes.SELECT})
        .then(function (result) {
            cb(null, result)
        })
        .catch(err => {
            cb(err)
        });
}

/**
 * 可以使用 ?条件添加参数查询
 * @param replacements 如果传递一个数组,? 会按数组的顺序被依次替换
 */
exports.getTableLimitDataBySql = function (sql, replacements, cb) {

    DbConn
        .query(sql, {
            replacements: replacements,
            type: DbConn.QueryTypes.SELECT
        })
        .then(function (result) {
            cb(null, result)
        })
        .catch(err => {
            cb(err)
        });
}

/**
 * 执行原始sql插入数据
 * @param replacements 如果传递一个数组,? 会按数组的顺序被依次替换
 */
exports.addDataBySql = function (sql, replacements, cb) {
    DbConn
        .query(sql, {
            replacements: replacements,
            type: DbConn.QueryTypes.INSERT
        })
        .then(function (result) {
            console.log(result)
            cb(null, result)
        })
        .catch(err => {
            console.log(err, 'err')
            cb(err)
        });
}

/**
 * 执行原始sql更新数据
 * @param replacements 如果传递一个数组,? 会按数组的顺序被依次替换
 */
exports.updateDataBySql = function (sql, replacements, cb) {
    DbConn
        .query(sql, {
            replacements: replacements,
            type: DbConn.QueryTypes.UPDATE
        })
        .then(function (result) {
            cb(null, result)
        })
        .catch(err => {
            cb(err)
        });
}

exports.deleteDataBySql = function (sql, replacements, cb) {
    DbConn
        .query(sql, {
            replacements: replacements,
            type: DbConn.QueryTypes.DELETE
        })
        .then(function (result) {
            cb(null, result)
        })
        .catch(err => {
            cb(err)
        });
}

使用事务

/**
 * 用事务执行插入
 * @param sql
 * @param transaction
 * @param replacements
 * @returns {*}
 */
exports.addDataBySqlT = function (sql,transaction, replacements) {
    return DbConn
        .query(sql, {
            replacements: replacements,
            transaction:transaction,
            type: DbConn.QueryTypes.INSERT
        })
}

/**
 * 用事务执行更新
 * @param sql
 * @param replacements
 * @param cb
 */
exports.updateDataBySqlT = function (sql, transaction, replacements) {
    return DbConn
        .query(sql, {
            replacements: replacements,
            transaction:transaction,
            type: DbConn.QueryTypes.UPDATE
        })
}

//main.js
/**
 * 测试事务
 * @param callback
 */
function f(callback) {
    var sql = "INSERT INTO table1(version, data) VALUES (?,?)"
    var sql2 = "INSERT INTO table2(name) VALUES (?)"
    var sql1 = "UPDATE table1 SET data = ? WHERE data = ?"

    DbManager.transactionManager().transaction(function (t){

        // 要确保所有的查询链都有return返回
        return DbManager.addDataBySqlT(sql,t,["aaaa","bbbb"]).then(function (result) {
            return DbManager.addDataBySqlT(sql2,t,["ccc"]).then(function (err,ids) {
                return DbManager.updateDataBySqlT(sql1,t,["aaaa","bbbb"]).then(function (result) {
                   //表示最终返回的结果
                    return ids[0]
                });
            })
        })
    }).then(function (result) {
        // Transaction 会自动提交
        // result 是事务回调中使用promise链中执行结果
        callback(null,result)
    }).catch(function (err) {

        // Transaction 会自动回滚
        // err 是事务回调中使用promise链中的异常结果
        //callback(err,null)
    });
}
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部