# dao层的作用以及方法命名规范
# dao层的作用
- 1、复用数据库API,减少重复代码,同时可以达到即使后面修改了数据库字段或数据库名称,也只需要修改少量
dao层的代码即可。 - 2、
dao层是积木,而service层是利用这些积木来搭建你想要的乐园。 - 3、理论上
dao层的代码开发是可以脱离业务的,即使业务需求还不是很明确,只要数据库表名已确定,即可编写dao层。dao层提供的是数据库原子性操作。
# 注意事项
Dao层代码默认写在
router/dao/modules/目录 查看自定义dao层目录文件名必须以
xxxDao.js这样的格式命名(即必须Dao.js结尾)最终通过
await vk.daoCenter.xxxDao.xxxx();形式进行调用尽量只写跟数据库交互的代码,少写业务逻辑代码,业务逻辑应写在
service层如果新建dao层代码后运行提示dao不存在,则重新运行项目即可
# dao层与baseDao的区别
baseDao相当于万能dao,他是最基础的零件,而dao层是利用零件组装不同形状和规则的积木,供service层使用。
# 命名规范(参考)
查单条记录: 获取单条记录的方法用find或get作为前缀查多条记录: 获取多个对象的方法用list作为前缀统计记录数量: 获取统计行数的方法用count作为前缀新增: 新增数据的方法用add或save作为前缀删除: 删除数据的方法用delete或remove作为前缀修改: 修改的方法用update作为前缀
前缀 + 条件类型(适用于1个dao只操作1张表的情况)
如:
根据
ID获取一条信息findById根据
手机号获取一条信息findByMobile根据
不定性条件获取一条信息findByWhereJson根据
用户状态获取多条信息listByStatus根据
不定性条件获取多条信息listByWhereJson添加
add删除,根据ID
deleteById修改,根据ID
updateById批量修改,根据自定义条件
updateByWhereJson批量删除,根据自定义条件
deleteByWhereJson
前缀 + 表名 + 条件类型(适用于1个dao可能操作多张表的情况)
如:
根据
用户ID获取用户信息findUserById根据
用户手机号获取用户信息findUserByMobile根据
不定性条件获取用户信息findUserByWhereJson根据
用户状态获取用户列表listUserByStatus根据
不定性条件获取用户列表listUserByWhereJson添加用户
addUser删除用户,根据用户ID
deleteUserById修改用户,根据用户ID
updateUserById批量修改用户,根据自定义条件
updateUserByWhereJson批量删除用户,根据自定义条件
deleteUserByWhereJson
# Dao文件代码生成工具
# 自定义dao层目录
如果你的项目除了 router 函数外,还有其他函数也需要用到 dao 层,此时 dao 层目录需要写在 公共模块 那,而不是写在 router/dao/modules/ 目录,具体操作如下:
- 右键
cloudfunctions/common目录,新建公共模块,输入名字router-common - 将原本的在 router 内的
dao目录剪切到刚新建的公共模块router-common下 - 替换
router-common根目录的index.js文件,文件内容如下:
module.exports = {
daoCenter: require('./dao/index.js'), // dao层入口文件
}
2
3
- 修改
router/config.js文件,文件内容如下:
const routeCommon = require('router-common');
const requireFn = function(path) {
return require(path);
}
const initConfig = {
baseDir: __dirname, // 云函数根目录地址
requireFn,
daoCenter: routeCommon.daoCenter, // dao层入口文件
customUtil: {
}
};
module.exports = initConfig;
2
3
4
5
6
7
8
9
10
11
12
13
即 initConfig 增加了 daoCenter 配置
- 完成
在其他函数引入 vk 的时候,需要这样写
// 引入 vk-unicloud
const vkCloud = require('vk-unicloud');
// 引入 routeCommon 公共模块
const routeCommon = require('router-common');
// 通过 vkCloud.createInstance 创建 vk 实例
const vk = vkCloud.createInstance({
baseDir: __dirname, // 云函数根目录地址
requireFn: require,
daoCenter: routeCommon.daoCenter, // dao层入口文件
});
2
3
4
5
6
7
8
9
10
注意:云函数至少需要添加的公共模块依赖有
- uni-config-center
- vk-unicloud
- router-common
操作完成后,就可以在任意云函数中直接调用 vk.daoCenter.xxxDao.xxx() API 了