前端开发那些事儿每天学一点Vue3

封装webSQL(五)封装 get

2021-07-27  本文已影响0人  自然框架

获取记录,看似简单,其实也可以分为很多情况。

这里先封装一个最简单的情况,根据ID获取记录,因为这个虽然简单,但是也是最常见最基础的一个功能。

sql

select * from table where id = 111

严格情况来说,应该避免使用 * ,要使用具体的字段名称,不过这里是前端的 webSQL,不用过于担心性能问题。

封装

/**
 * 依据主键字段,获取记录
 * @param { MySQLHelp } help 访问数据库的实例
 * @param { Object } meta 表、字段
 * @param { number|string } id 主键字段值
 * @param { connection } cn 如果使用事务的话,需要传递开启事务时创建的连接对象
 * @returns 添加记录的ID
 * * meta 结构:
 * * * tableName: '', 表名
 * * * idKey: 'id', 主键字段名称
 */
export default function getData (help, meta, id, cn = null) {
  const myPromise = new Promise((resolve, reject) => {
    const sql = `SELECT * FROM ${meta.tableName} WHERE ${meta.idKey}=?`
    help.query(sql, [id], cn)
      .then((res) => {
        // 成功了,返回给调用者
        resolve(res)
      })
      .catch((err) => {
        reject(err)
      })
  })
  return myPromise
}

一般默认都是id,不过这里还是做了一下设置,可以通过 idKey 设置其他的字段名称。

使用

// 引入help
import { getModel } from '../../../packages/websql.js'

/**
 * 实现获取记录服务
 * @param {object} userInfo 当前登录人的信息
 * @param {object} help 访问数据库的实例
 * @param {objec} info 服务的 meta
 * @param {object} model 占位用
 * @param {number|string} id 记录ID
 * @returns 返回新添加的记录的ID
 */
export default function getData (userInfo, help, info, model, id) {
  return new Promise((resolve, reject) => {
    getModel(help, info, id).then((model) => {
      // 添加成功
      console.log('获取数据:', model)
      resolve({ model })
    }).catch((err) => {
      reject(err) // '获取一条数据出错!'
    })
  })
}

看着似乎很眼熟,差不多嘛,为啥要多折腾出来一层,直接用不香吗?

这个就要看封装的目的了。

第一次封装(数据库驱动),目的是封装 webSQL 的基础操作,核心是拼接 SQL 语句。

第二次封装(业务驱动),目的是提供meta,获取记录,就是一条 select 的语句,但是从哪个表里面获取呢?这个就是业务需求了。
另外这里还需要处理一下添加人、添加时间等信息。

基本就是这样,更上一层就是服务层了。
占位,就是为了服务层调用的时候,可以统一参数的位置。
当然可以有其他的解决方案。

上一篇 下一篇

猜你喜欢

热点阅读