连接数据库
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)
});
}