ORM框架

ORM框架(Object-Relational Mapping,对象关系映射)是一个介于面向对象编程语言与关系型数据库之间的映射,将数据库的表映射到编程语言所对应的类中,使得有了ORM框架提供数据表到类的映射,数据库的每一条数据就可以通过映射表填入到编程语言中创建类的对象中,再用编程语言对数据进行处理或者输出(展示到页面),而反过来,编程语言的类也可以ORM框架映射到数据库的对应表中,实现对一个或多个数据表进行动态查询或者处理,甚至可以借助JPA来创建对应的数据表。

使用ORM框架可以带来以下好处:

  • 减少重复性代码:ORM框架可以自动生成一些基本的CRUD操作,这可以减少我们编写重复性代码的时间,提高开发效率。

  • 提高开发效率:ORM框架可以让我们使用面向对象的方式操作数据库,这比手写SQL语句更加高效。同时,ORM框架也可以自动处理一些SQL语句生成和执行的过程,这也可以进一步提高开发效率。

  • 简化数据库操作:ORM框架可以让我们使用简单的操作来完成对数据库的复杂操作,比如对表进行联接查询、更新、删除等操作。这可以让我们更加专注于业务逻辑的开发,而不必过多地考虑数据库操作的问题。

  • 提高可维护性:ORM框架可以自动处理一些数据库操作的细节,比如类型转换、数据校验等。这可以减少因手动操作数据库而产生的错误,提高系统的可维护性。

Sequelize

logo.png

Sequelize是一个基于 promise 的 Node.js ORM(对象关系映射),目前支持Postgres, MySQL, MariaDB, SQLite以及Microsoft SQL Server。它具有强大的事务支持、关联关系、预读和延迟加载、读取复制等功能。

Sequelize使用Node.js进行开发,针对异步操作环境进行了优化,支持各种SQL查询,以及ACID事务处理,它是对SQL查询语句的封装2。简单的讲就是对SQL查询语句的封装。
它能自动生成一些基本的CRUD操作,这可以减少编写重复性代码的时间,提高开发效率,让我们使用面向对象的方式操作数据库,这比手写SQL语句更加高效。同时,Sequelize也可以自动处理一些SQL语句生成和执行的过程,这也可以进一步提高开发效率,让我们使用简单的操作来完成对数据库的复杂操作,比如对表进行联接查询、更新、删除等操作。这可以让我们更加专注于业务逻辑的开发,而不必过多地考虑数据库操作的问题。

文档地址: 官方文档 中文文档

Sequelize的应用

个人开源软件:Right-House使用的数据库是基于Sequelize实现的,Model代码:Github

Redis

Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

Redis和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。与Memcached一样,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis是一个高性能的key-value数据库,它的读写速度非常快,每秒可以处理超过10万次读写操作。因此Redis被广泛应用于缓存,另外,Redis也经常用来做分布式锁。除此之外,Redis支持事务、持久化、LUA脚本、LRU驱动事件、多种集群方案。

Redis的应用

在eggjs框架中,使用egg-redis来操作redis。egg-redis文档:GitHub

在/config/plugin.js中开启插件

exports.redis = {
  enable: true,
  package: 'egg-redis',
};

在/config/config.default.js中配置插件

config.redis = {
  client: {
    port: 6379,          // Redis port
    host: '127.0.0.1',   // Redis host
    password: 'auth',
    db: 0,
  },
}

在个人开源软件:Right-House中,Redis用来存微信小程序官方Sdk的token。

存储Token时,设置和微信一样的过期时间。每次需要用token时,先通过app.redis.get方法查询Redis,如果有就直接用,如果没有就再从微信获取,通过app.redis.set方法存到Redis中。

  // 获取微信token
  async getWxToken() {
    const { ctx, app } = this;
    let token = await app.redis.get('landlordWxToken');
    if (!token) {
      const result = await ctx.curl('https://api.weixin.qq.com/cgi-bin/token', {
        method: 'GET',
        dataType: 'json',
        data: {
          appid: app.config.landlordMP.appid,
          secret: app.config.landlordMP.secret,
          grant_type: 'client_credential'
        }
      });
      await app.redis.set('landlordWxToken', result.data.access_token, 'EX', 7200);
      token = result.data.access_token;
    }
    return token;
  }

数据库工具

图形化数据库工具有很多,像Navicat、phpmyadmin这些常用的工具大家都很熟悉了,就不一一介绍。今天要介绍的是基于vscode的数据库插件:Redis

虽然这款插件叫redis,但是他却是一款包含绝大多数数据库连接的插件,甚至国产的达梦数据库都支持连接,这个名字起的确实很魔幻。

vscode-redis.png

连接完成后,在vscode左侧的工具栏可以直达数据库,并进行常规的CURD操作,以及数据库导入、导出、创建、删除等。

vscode-mysql.png

唯一的问题是这是个付费插件:付费策略。免费版本的支持最多3个数据库连接,大家只能各取所需,毕竟一年69元的价格也不是那么难以接受。