TypeORM - 使用实体管理器
EntityManager 与 Repository 类似,用于管理数据库操作,例如插入、更新、删除和加载数据。虽然 Repository 处理单个实体,但 EntityManager 对所有实体都通用,并且能够对所有实体执行操作。
实体管理器 API
我们可以使用 getManager() 方法访问 EntityManager,如下所示 −
import { getManager } from "typeorm"; const entityManager = getManager();
让我们在本章中学习 EntityManager 最重要的方法。
connection
connection 方法返回到特定数据库的数据库 ORM 连接。示例代码如下 −
const connection = manager.connection;
QueryRunner
queryRunner方法返回自定义查询运行器对象,供实体管理器用于数据库操作。示例代码如下 −
const queryRunner = manager.queryRunner;
transaction
如果调用多个数据库请求,事务将在单个数据库事务中执行。获取事务的示例代码如下 −
await manager.transaction(async manager => {
});
query
query方法执行sql查询。简单的插入查询如下所示 −
const qur = await manager.query(`insert into student(name,age) values('stud2',13)`);
insert
insert 方法用于向数据库插入新实体或实体数组。示例代码如下 −
await manager.insert(Student, {
Name: "Student3",
Age: 14
});
update
update 用于更新数据库中的现有记录。
await manager.update(User, 1, { Name: "Adam" });
此查询的工作方式类似于以下 SQL 查询,
UPDATE student SET Name = "Adam" WHERE id = 1
delete
delete 方法将从表中删除指定的记录,
await manager.delete(Student, 1);
这将删除 id 为 1 的学生记录。
save
save 用于将给定实体保存到数据库中。简单的 Student 实体可以按如下所示保存 −
import {Student} from "./entity/Student";
createConnection().then(async connection => {
console.log("Inserting a new record into the student database...");
const stud = new Student(); stud.Name = "student1";
stud.age = 12;
await connection.manager.save(stud);
}
这将向数据库中添加新的学生记录。如果数据库中不存在给定的学生,则 save 方法将插入学生。否则,save 将更新数据库中现有的学生记录。
remove
remove 用于从数据库中删除给定的实体。简单的学生实体可以删除,如下所示 −
await manager.remove(stud);
count
count 方法将返回表中可用的记录数,您可以使用它进行分页。示例代码如下 −
const cnt = await manager.count(Student, { age: 12 });
find
find 方法用于搜索目的。它从数据库中获取所有记录,如下所示 −
console.log("正在从数据库加载用户...");
const students = await connection.manager.find(Student); console.log("已加载用户: ", students);
findOne
与 find 方法类似,但返回第一个匹配的记录。示例代码如下 −
const stud = await manager.findOne(Student, 1);
clear
clear 方法清除表中的所有数据。示例代码如下 −
await manager.clear(Student);