工作流
项目中需要使用MySQL数据库时需要添加连接MySQL数据库的逻辑文件和代码段调用数据库。需要注意的是MySQL需要一定程度的人工维护、实时的调整索引等达到最优的使用效果。仅通过代码段调用写入或查询数据的话,数据增多时可能会导致查询时间越来越长。如果对方由数据库运维则无需担心这点。请了解这些问题后再使用以下方法。
使用流程:
1. 请网管创建测试用数据库
1. 添加链接数据库用的业务功能
2. 视口中添加调用链接方法的接口
1.具体操作由网管完成,需要向网管咨询获取以下配置信息
{ "host":"数据库IP", "database":"数据库名称", "username":"数据库用户名", "password":"数据库密码", "port":"数据库端口号" }
sudo apt install mysql-workbench
1. wide中“ 业务功能列表”中新建事件类型的业务功能
如:创建 connectsql/main.js
2.编辑文件,添加新事件处理
如:新建 connect0mysql
3.自定义初始化,调用事件“ connect0mysql”。放开 customInit的注释代码添加调用
4.编辑事件,添加模板。编辑事件“ connect0mysql”,代码段管理中选择右上的 应用模板,选择 其他事件中的 链接mysql数据库
5.编辑代码,添加配置信息
代码段中手动添加tmp_data的声明,搜索“ 设置文档”,修改为从网管处获取的配置信息。
6.添加MySQL的表定义信息
注意:
1.查询
构造查询条件,构造方法参见文档: 查询条件
查找表“userinfo”中满足条件的数据
/*INSBEGIN:CUSTOM*/ function() { return when.promise(function(resolve, reject) { var setinter = setInterval(function() { if (global.sequelizeSQLCache) { clearInterval(setinter); resolve(global.sequelizeSQLCache); } }, 20); }); }, function(squeInst) { var Sequelize = require('sequelize'); var tableName = "userinfo"; // 需要查询的mysql表名 var incomeTable = squeInst.models[tableName]; if (_.isEmpty(incomeTable)) { var Err = new LogicError(); Err.errorCode = -38; Err.message.message.tips = "获取MySQL数据库信息失败!!!"; throw Err; } var Op = Sequelize.Op; //查询条件文档 https://github.com/sequelize/sequelize/blob/v4/docs/querying.md#operators // 更改查询条件,例子中的username为表中字段,需要更改这个字段 var q = { "where": { "username": { [Op.like]: '%%' } }, "limit": 10 || 10, "offset": 0 || 0 }; return incomeTable.findAndCountAll(q) .catch(function(err) { console.log("Error ", err); var Err = new LogicError(); Err.errorCode = -38; Err.message.message.tips = "获取MySQL数据库信息失败!!!"; throw Err; }); }, function(modInsts) { tmp_data.total = modInsts.count; var ret = []; _.each(modInsts.rows, function(v, k) { var whiteList = {}; _.extend(whiteList,v.dataValues); ret.push(whiteList); }); return ret; }, /*INSEND:CUSTOM*/
2.更新
更新指定字段信息或创建一条信息,这里的创建可以修改修改为判断uid值是否存在来执行,则会少做一次查询,如果不清楚则不要更改
/*INSBEGIN:CUSTOM*/ function() { return when.promise(function(resolve,reject){ var setinter = setInterval(function(){ if(global.sequelizeSQLCache){ clearInterval(setinter); resolve(global.sequelizeSQLCache); } },20); }); }, function(seqsql){ var uid="2";//这里修改为字段ID var tableName = "user";//这里修改为需要使用mysql表名 var sqlData = {"first_name":"newname","lastName":"newlastname"} // 这里为需要更新或新建的数据 var incomeTable = seqsql.models[tableName]; incomeTable.findByPk(uid).then(function(data){ if(data){ data.update(sqlData); }else{ incomeTable.create(sqlData); } }).catch(function(err){ console.log("Err ",err); var Err = new LogicError(); Err.errorCode = -38; Err.message.message.tips = "数据库更新失败!!!"; throw Err; }); }, /*INSEND:CUSTOM*/
3.删除
查找数据库中“user”表中字段“status”为“inactive”的所有字段,对查找到的字段执行删除动作
/*INSBEGIN:CUSTOM*/ function() { return when.promise(function(resolve,reject){ var setinter = setInterval(function(){ if(global.sequelizeSQLCache){ clearInterval(setinter); resolve(global.sequelizeSQLCache); } },20); }); }, function(seqsql){ var tableName = "user";//这里修改为需要使用mysql表名 var incomeTable = seqsql.models[tableName]; incomeTable.destroy({ where: { status: 'inactive' } }).catch(function(err){ console.log("Err ",err); var Err = new LogicError(); Err.errorCode = -38; Err.message.message.tips = "数据库更新失败!!!"; throw Err; }); }, /*INSEND:CUSTOM*/
满足条件id为1或条件id为2的字段执行更新,条件请参照: 查询条件自行构建
/*INSBEGIN:CUSTOM*/ function() { return when.promise(function(resolve,reject){ var setinter = setInterval(function(){ if(global.sequelizeSQLCache){ clearInterval(setinter); resolve(global.sequelizeSQLCache); } },20); }); }, function(seqsql){ var tableName = "user";//这里修改为需要使用mysql表名 var incomeTable = seqsql.models[tableName]; var Op = Sequelize.Op; return incomeTable.update({rank:1.8},{where:{ [Op.or]:[{id:1},{id:2}] }}) .spread(function(affectedCount, affectedRows){ console.log("affectedCount & affectedRows",affectedCount,affectedRows); }).catch(function(err){ console.log("Err ",err); var Err = new LogicError(); Err.errorCode = -38; Err.message.message.tips = "数据库更新失败!!!"; throw Err; }); }, /*INSEND:CUSTOM*/