[NestJS] วิธีต่างๆในการ Insert Data กับ TypeORM ใน MySQL
บทความนี้ผู้เขียนอยากจะบันทึกวิธีการ Insert Data สำหรับ TypeORM ที่ใช้ใน NestJS หากใครที่อาจจะยังไม่เคยอ่านบทความก่อนหน้านี้ แนะนำให้อ่านบทความตาม link นี้ก่อนครับ
[NestJS] Data Persistance MySQL With TypeORM
https://www.sklsongkiat.com/articles/detail/nestjs-data-persistance-mysql-with-typeorm
Repository คืออะไร
Repository เป็น Class หนึ่งของ TypeORM ที่ใช้จัดการตารางฐานข้อมูล เช่น เพิ่ม (Insert) ลบ (delete) แก้ไข(update) เรียกข้อมูล (get) เป็นต้น เมื่อเรียกใช้ Repository จะต้องประกาศ Generic Type เป็น Entity ที่จะจัดการด้วย ดังตัวอย่าง
สมมติว่ามี Entity (ตาราง) ชื่อว่า Order
เวลาที่เรียกใช้งาน ไม่ว่าจะเป็น method ใดก็ตามให้ทำแบบนี้ ผู้เขียนจะยกตัวอย่างเฉพาะ การ insert สำหรับบทความนี้
หรือจะแบบนี้
จาก code จะเห็นว่าเป็นการ Insert ทีละ Object ถ้าไม่มีปริมาณการเก็บข้อมูลในแต่ละ Transaction เยอะ อาจจะแค่ 1 แถว หรือ 2 แถว ก็สามารถใช้วิธีนี้ได้
Repository กับการใช้ SQL String query
หากใครที่อยากจะจัดการ SQL String เองก็สามารถนำ String Query มาใช้ได้เหมือนกัน เช่น
INSERT INTO table_name
(column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
สำหรับวิธีนี้ หากใครมาทางสาย Data Science หรือ วิทยาการข้อมูล วิทยาศาสตร์ข้อมูล ก็อาจจะนำไปใช้งานได้ ถ้าต้องการสร้างเครื่องมืออื่นๆ ที่คิดขึ้นเอง
Repository กับการใช้ Query Builder
Query Builder ก็จะเป็น Method หรือ function ต่างๆที่ TypeORM สร้างเป็น Chain เอาไว้ให้เรียบร้อย วิธีเรียกใช้ก็ไม่ยาก ซึ่งวิธีนี้เหมาะกับ ถ้า Data มาจำนวนมากๆ เป็น Array ก็นำมาใส่เข้าไปตรง values ได้เลย
ตัวอย่างเพื่อให้เห็นภาพได้ง่ายขึ้น
สรุป
ที่ผู้เขียนนำตัวอย่างมานี้ เพียงอยากบันทึกข้อแตกต่างระหว่างแบบ Insert ทีละครั้ง หรือ Insert ทีละจำนวนมากๆ ว่าควรใช้ วิธีไหนที่เหมาะสมกับการ Insert อาจจะยังไม่มีผลลัพท์ให้เห็น ผู้อ่านควรลองนำ code ไปทดสอบ Run ดูเพื่อความเข้าใจที่มากขึ้น ครับ
อย่าลืม click Google Ads เพื่อเป็นกำลังใจให้ผู้เขียนด้วยนะครับ
Ref :
https://typeorm.io/#/working-with-repository
https://typeorm.io/#/repository-api
https://typeorm.io/#/insert-query-builder