# 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 了