查询
IBest-ORM 提供了强大的链式查询 API,支持各种复杂的查询场景。
检索单个对象
使用 first() 方法获取第一条记录:
ts
import { getORM } from '@ibestservices/ibest-orm';
const orm = getORM();
// 获取第一条记录
const user = orm.query(User).first();
// 带条件查询
const user = orm.query(User).where({ id: 1 }).first();
// 检查是否存在
if (user) {
console.log('找到用户:', user.name);
}检索全部对象
使用 find() 方法获取多条记录:
ts
// 获取所有记录
const users = orm.query(User).find();
// 带条件查询
const activeUsers = orm.query(User)
.where({ status: 'active' })
.find();条件查询
对象风格条件
ts
// 等于
orm.query(User).where({ name: '张三' }).find();
// 多条件(AND)
orm.query(User).where({ name: '张三', age: 18 }).find();
// 比较操作符
orm.query(User).where({ age: { gt: 18 } }).find(); // age > 18
orm.query(User).where({ age: { gte: 18 } }).find(); // age >= 18
orm.query(User).where({ age: { lt: 30 } }).find(); // age < 30
orm.query(User).where({ age: { lte: 30 } }).find(); // age <= 30
orm.query(User).where({ age: { ne: 25 } }).find(); // age != 25
// 组合比较
orm.query(User).where({ age: { gte: 18, lte: 30 } }).find(); // 18 <= age <= 30IN 查询
ts
// whereIn
orm.query(User).whereIn('id', [1, 2, 3]).find();
// whereNotIn
orm.query(User).whereNotIn('status', ['deleted', 'banned']).find();NULL 查询
ts
// whereNull
orm.query(User).whereNull('deletedAt').find();
// whereNotNull
orm.query(User).whereNotNull('email').find();BETWEEN 查询
ts
// whereBetween
orm.query(User).whereBetween('age', 18, 30).find();
// whereNotBetween
orm.query(User).whereNotBetween('age', 0, 17).find();LIKE 查询
ts
// 模糊匹配
orm.query(User).whereLike('name', '张%').find(); // 以"张"开头
orm.query(User).whereLike('name', '%三').find(); // 以"三"结尾
orm.query(User).whereLike('name', '%张%').find(); // 包含"张"OR 条件
ts
// orWhere
orm.query(User)
.where({ status: 'active' })
.orWhere({ vipLevel: { gt: 3 } })
.find();
// WHERE status = 'active' OR vip_level > 3选择字段
ts
// 选择特定字段
orm.query(User).select(['name', 'age']).find();
// 选择单个字段
orm.query(User).select(['name']).find();排序
ts
// 升序
orm.query(User).orderBy('age', 'asc').find();
// 降序
orm.query(User).orderBy('createdAt', 'desc').find();
// 多字段排序
orm.query(User)
.orderBy('status', 'asc')
.orderBy('createdAt', 'desc')
.find();分页
ts
// limit
orm.query(User).limit(10).find();
// offset
orm.query(User).offset(20).find();
// 分页查询
const page = 2;
const pageSize = 10;
orm.query(User)
.limit(pageSize)
.offset((page - 1) * pageSize)
.find();分组
ts
// 按单字段分组
orm.query(User).groupBy('status').find();
// 按多字段分组
orm.query(User).groupBy('status').groupBy('role').find();聚合查询
ts
// 计数
const count = orm.query(User).count();
// 带条件计数
const activeCount = orm.query(User)
.where({ status: 'active' })
.count();
// 检查是否存在
const exists = orm.query(User)
.where({ email: 'test@example.com' })
.exists();软删除查询
对于配置了 @SoftDelete 的模型:
ts
// 默认查询(自动过滤已删除记录)
orm.query(Article).find();
// 包含已删除记录
orm.query(Article).withTrashed().find();
// 只查询已删除记录
orm.query(Article).onlyTrashed().find();复杂查询示例
ts
// 综合查询示例
const users = orm.query(User)
.select(['id', 'name', 'age', 'status'])
.where({ status: 'active' })
.where({ age: { gte: 18 } })
.orWhere({ vipLevel: { gt: 5 } })
.whereNotNull('email')
.orderBy('createdAt', 'desc')
.limit(20)
.offset(0)
.find();查询缓存
ts
import { initQueryCache, getQueryCache } from '@ibestservices/ibest-orm';
// 初始化缓存
initQueryCache({ ttl: 60000 }); // 60秒过期
const cache = getQueryCache();
// 使用缓存
const cacheKey = 'active_users';
let users = cache.get(cacheKey);
if (!users) {
users = orm.query(User).where({ status: 'active' }).find();
cache.set(cacheKey, users);
}
// 清除缓存
cache.invalidate('user'); // 清除 user 表相关缓存
cache.clear(); // 清除所有缓存