nodeJs에서는 mybatis-mapper 모듈을 사용하였지만 NestJS에서는 TypeORM은 둘 다 TypeScript 기반으로 작성되었으며, 이 둘을 함께 사용하면 일관된 언어와 코드 스타일을 유지하기 위한 장점과 개발자 커뮤니티와 잘 작성된 문서를 가지고 있어서 지원 및 문제 해결이 용이하기해 자주 사용하는 것 같아 사용해보기로 했습니다.
await userRepository
.createQueryBuilder()
.insert()
.into(Entity)
.values({
id:userid,
password:userPWD
})
const users = await userRepository
.createQueryBuilder("user")
.select(["user.id", "user.username"])
.getMany();
await userRepository
.createQueryBuilder()
.update(User)
.set({ name: 'New Name' })
.where('id = :id', { id: 1 })
.execute();
await userRepository
.createQueryBuilder()
.delete()
.from(User)
.where('id = :id', { id: 1 })
.execute();
Mysql 함수를 사용할경우
ex) unixtime을 dateTime 형식으로 바꿀시 펑션으로 사용가능
await userRepository
.createQueryBuilder()
.update(User)
.set({ date:()=>`FROM_UNIXTIME(${start_time}/1000,"%Y-%m-%d %H:%i:%s")` })
.where('id = :id', { id: 1 })
.execute();
const users = await userRepository
.createQueryBuilder("user")
.where("user.username = :username", { username: "john_doe" })
.getOne();
const users = await userRepository
.createQueryBuilder("user")
.orderBy("user.username", "ASC")
.getMany();
const usersWithPosts = await userRepository
.createQueryBuilder("user")
.leftJoin("user.posts", "post")
.getMany();
const usersWithOrders = await userRepository
.createQueryBuilder("user")
.innerJoin("user.orders", "order")
.getMany();
const result = await userRepository
.createQueryBuilder("user")
.select("user.department, COUNT(user.id)", "userCount")
.groupBy("user.department")
.getRawMany();
const result = await userRepository
.createQueryBuilder("user")
.select("user.department, COUNT(user.id)", "userCount")
.groupBy("user.department")
.having("COUNT(user.id) > :count", { count: 5 })
.getRawMany();