封装webSQL(五)封装 get

作者: 自然框架 | 来源:发表于2021-07-27 21:00 被阅读0次

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

    • 根据ID获取一条记录
    • 根据查询条件获取记录
    • 分页获取记录
    • 各种统计查询,分组统计后的记录
    • 多表关联的情况

    这里先封装一个最简单的情况,根据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 的语句,但是从哪个表里面获取呢?这个就是业务需求了。
    另外这里还需要处理一下添加人、添加时间等信息。

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

    相关文章

      网友评论

        本文标题:封装webSQL(五)封装 get

        本文链接:https://www.haomeiwen.com/subject/gpppmltx.html