在 Web 开发中,数据库查询是必不可少的功能,而且查询语法经常会变动,同时处理连表查询、排序、分页等高级操作也会变得越来越复杂,这时候我们各种 ORM(Object-Relational Mapping,对象关系映射)库就变得非常有价值了。 Sequelize 是一个流行的 ORM 库,它支持多种数据库(MySQL,PostgreSQL,SQLite,MsSQL)并且非常灵活,但是其查询语法却相对复杂。而这时候,Sequelize-easy-query 这个 npm 工具就为我们带来很大的方便!
1. 安装和引入
Sequelize-easy-query 可以通过 npm 安装:
npm install sequelize-easy-query
在 Node.js 中,使用 require
引入:
const { Query } = require('sequelize-easy-query');
2. 使用步骤
2.1. 创建 Query 实例
const query = new Query({ filter: '{"name": "John"}', select: 'id,name,age', orderBy: 'name ASC', page: 1, limit: 10, });
2.2. 应用 Filter
Filter 是用于查询过滤的条件,它包括等于、小于、小于等于、大于、大于等于、模糊匹配等等。Filter 必须是符合一定格式的 JSON 字符串。下面是一个示例:
const query = new Query({ filter: '{"name": "John", "age": {">=": 18}}', select: 'id,name,age', }); const where = query.getWhere(); console.log(where);
解释一下这个示例,其中的 filter
值是一个 JSON 字符串,它表示只查询 name
等于 John
并且 age
大于等于 18
的记录。使用 query.getWhere()
方法可以获取该条件对应的 Sequelize 当中的查询语句:
{ name: 'John', age: { [Op.gte]: 18 } }
2.3. 应用 Select
Select 是用于指定查询的字段,默认情况下,Sequelize 查询会返回所有字段。示例:
const query = new Query({ filter: '{"name": "John", "age": {">=": 18}}', select: 'id,name,age', }); const attributes = query.getAttributes(); console.log(attributes);
这个示例中,我们使用 select
指定了只查询 id
、name
和 age
这三个字段,使用 query.getAttributes()
方法可以获取该条件对应的 Sequelize 查询中的 attributes
属性:
['id', 'name', 'age']
2.4. 应用 OrderBy
OrderBy 是用于指定查询结果的排序条件,示例:
const query = new Query({ filter: '{"name": "John", "age": {">=": 18}}', select: 'id,name,age', orderBy: 'name ASC', }); const order = query.getOrder(); console.log(order);
这个示例中,我们使用 orderBy
指定了按照姓名进行升序排序,使用 query.getOrder()
方法可以获取该条件对应的 Sequelize 查询中的 order
属性:
[['name', 'ASC']]
2.5. 应用分页
分页是用于分批查询数据的,其中 page
表示当前是哪一页,limit
表示每页有多少条数据。示例:
-- -------------------- ---- ------- ----- ----- - --- ------- ------- --------- ------- ------ ------ ------ ------- -------------- -------- ----- ----- ----- -- ------ --- --- ----- ---- - ---------------- ------------------
这个示例中,我们使用了 page
和 limit
,表示要查询第二页,每页有十条数据。使用 query.getPage()
方法可以获取该条件对应的 Sequelize 查询中的 offset
和 limit
属性:
{ offset: 10, limit: 10, }
3. 示例代码
下面是一个完整的示例,使用 Sequelize 和 Sequelize-easy-query 对数据库进行查询:
-- -------------------- ---- ------- ----- - ---------- --------- - - --------------------- ----- - ----- - - -------------------------------- ----- --------- - --- ----------------- ------- --------- - ----- ------------ -------- -------- --- ----- ---- - ------------------------ - --- - ----- ------------------ -------------- ----- ----------- ----- -- ----- - ----- ----------------- ---------- ------ -- ---- - ----- ------------------ ------------- -- -- --- ----- -------- ------ - ----- ------------ -- --- ----- ----------------- - ----- ------- ---- -- -- - ----- ------- ---- -- -- - ----- -------- ---- -- -- --- ----- ----- - --- ------- ------- --------- ------- ------ ------ ------ ------- -------------- -------- ----- ----- ----- -- ------ -- --- ----- ----- - ----------------- ----- ---------- - ---------------------- ----- ----- - ----------------- ----- ---- - ---------------- ------------------- -- - ----- ------- ---- - -------------- -- - - ------------------------ -- ------ ------- ------ ------------------- -- --------- ------- ------------------ -- - ------- -- ------ - - ----- ----- - ----- -------------- ------ ----------- ------ -------- --- ---------------------------- -- ---------------- - ----------------------------
在这个示例中,首先定义了数据模型 User
,然后使用 bulkCreate
方法向数据库添加了几条记录。接下来,我们使用 Sequelize-easy-query 构造了一个查询条件,并使用 getWhere
、getAttributes
、getOrder
和 getPage
方法获取了对应的各种查询参数。最后,我们在 User
模型中使用 Sequelize 查询,查询满足条件的用户数据,并输出查询结果。
4. 总结
Sequelize-easy-query 这个 npm 包可以让我们方便地构造 Sequelize 查询参数,避免了手写查询语句时容易出错的情况。在实际的开发中,我们可以通过一些库来简化我们的代码,从而大大提高开发效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60065f8e238a385564ab6efa