三分钟使用Sequelize

连接数据库

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)
    });
}

转载于:https://my.oschina.net/u/3336230/blog/3063387

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值