封装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

    获取记录,看似简单,其实也可以分为很多情况。 根据ID获取一条记录 根据查询条件获取记录 分页获取记录 各种统计查...

  • 封装webSQL(八)封装 “编辑”

    一般的需求是,一个表单,要么是添加状态,要么是修改状态,可以实现明确需求。 但是有的时候却不能实现明确是添加还是修...

  • 封装webSQL(二)封装 insert into

    永远不要手撸SQL SQL要手写吗?当然不是,我们可以根据功能进行各种封装,比如先封装一个添加 model 用的S...

  • 封装webSQL(三)封装 update

    修改语句 这里的修改,特指通过主键ID,修改记录(model),其他修改方式再封装其他函数。 这个更简单,只是多了...

  • 封装webSQL(四)封装 delete

    删除语句 一般项目都有两种删除方式,一种是物理删除,一种是逻辑删除。物理删除就是用 delete 语句,把记录从数...

  • 封装webSQL(一)做个help先

    首先,webSQL并不在HTML的标准内,这里封装 webSQL 主要是为了后端的 MySQL。 因为想在前端做一...

  • 封装webSQL(六)封装 统计和查询

    下一步要做什么呢?要为分页做准备,首先实现统计和查询的功能。 sql 封装 统计功能比较简单,只是需要处理一下查询...

  • 封装webSQL(七)封装 分页和查询

    虽然现在分页的方式多种多样,不像以前只能按页翻,但是基础原理还是一样的。 webSQL的分页比较简单(不考虑性能的...

  • 每日一遍俱乐部

    promise 模拟封装1promise 模拟封装2 map 模拟封装 用set,get模拟普通变量 gigi就是...

  • JS手写DOM封装-增删改查

    get started • 封装• 写DOM库 封装 • 举例电脑笔记本就是CPU、内存、硬盘、主板、显卡的封装•...

网友评论

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

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