DbConn.jsjavascript
// 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原生语句获取对应表数据 */ 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) }); }