server.js文件
const dao = require("../dao/user.dao");
saveDat是个对象自己处理一下
if (updataFlag) {//编辑角色 result = await dao.roleUpdata(saveDta); } else {//新增角色 saveDta.role.create_name = user.name; saveDta.role.code = need.code; result = await dao.roleAdd(saveDta); } return result;
编辑角色
dao文件就是上面引入的文件
roleUpdata(need) {
const dcMeun = "表名"
let list = [];//编辑过来的先删除库里面的按角色code删除所有 let roleProductMap = db.remove(dcMeun, { role_code: need.code }, true) list.push({ sql: roleProductMap.sql, param: roleProductMap.param }) //如果有选择产品 往库里面批量增加 if (Array.isArray(need.products) && need.products.length > 0) { let addProduct = db.bulkCreate(dcMeun, need.products, true) list.push({ sql: addProduct.sql, param: addProduct.param }) } return db.execTransaction(list); },
/**
* 批量增加数据
* @param table 表名
* @param moduleBean 要添加的字段 [ {字段名:字段值}]
* 例:db.bulkCreate(tableName, [{id:'12', name:'jerry'}, {id:'115', name:'hou'}]);
*/
bulkCreate(table, moduleBean, isConfig) {
let attributes = new Set();
let values = [];
moduleBean.forEach(ele => {
let value = [];
for (var key in ele) {
attributes.add(key);
value.push(ele[key]);
}
values.push(value);
});
var _sql = `INSERT INTO ${table}(${Array.from(attributes).join(',')}) VALUES ? `;
if (isConfig) {
return {
sql: _sql,
param: [values]
}
} else {
return this.execSql(_sql, [values]);
}
},
/**
* 自定义 SQL 语句
* 【注】表名一定要用??两个问号
*/
execSql(sql, values, field = false) {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) {
connection && connection.release();
reject(err);
} else {
var query = connection.query(sql, values, (err, rows, fields) => {
connection.release();
if (err) {
reject(err);
process.logger.error("SQL Error:[", err, "]");
} else {
if (field) {
resolve({
data: rows,
fields: fields
});
} else {
resolve(rows);
}
}
});
process.logger.trace("Current Exec SQL:[", query.sql, "]");
}
});
});
},
/**
* 开启事务处理
* @param sqlParamList sql语句和参数对象数组
例:
db.execTransaction([{
sql: "INSERT INTO ?? SET?",
param : [table, entity],
callback: function(result){
//执行成功回调
console.log(result);
}
},{
sql: "INSERT INTO ?? SET email=?",
param : [table, 'lixia@goinni.com'],
callback: function(result){
console.log(result);
}
},{
sql: "INSERT INTO ?? SET email=?",
param : [table, 'limeizhen@goinni.com']
}]);
*/
execTransaction(sqlParamList) {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) {
resolve(err);
} else {
connection.beginTransaction(function (err) {
if (err) {
reject(err);
connection.release();
//throw err;
}
var n = 0,
res = [];
// 递归处理多条 SQL 语句
function ac(sqlParamList) {
var item = sqlParamList[n];
var qr = connection.query(item.sql, item.param, function (error, results, fields) {
res.push(results); //缓存结果,统一返回
if (error) {
return connection.rollback(function () {
//throw error;
reject(error);
connection.release();
});
}
process.logger.trace(`Current Exec SQL:[${qr.sql}]`);
if (n === sqlParamList.length - 1) {
// 最后统一提交
connection.commit(function (err) {
if (err) {
return connection.rollback(function () {
//throw err;
reject(err);
connection.release();
});
}
resolve(res);
connection.release();
process.logger.info('Transaction Success!');
});
} else {
n++;
//将结果回传给当前方法,方便后续使用
item.callback && item.callback(results);
//递归
ac(sqlParamList);
}
});
}
ac(sqlParamList);
});
}
});
});
},
新增角色
roleAdd(need) { let list = []; //新增就直接批量增加了 if (Array.isArray(need.products) && need.products.length > 0) { let productAdd = db.bulkCreate(dcMeun, need.products, true) list.push({ sql: productAdd.sql, param: productAdd.param }) } return db.execTransaction(list); },
里面的bulkCreate和execTransaction函数都和上面编辑的一模一样