TypeORM Query Builder কি?
TypeORM Query Builder একটি শক্তিশালী ইউটিলিটি যা TypeORM এ SQL কুয়েরি তৈরি এবং এক্সিকিউট করার জন্য ব্যবহৃত হয়। এটি আপনাকে জটিল SQL কুয়েরি তৈরি করতে সাহায্য করে, যেমন JOIN, GROUP BY, HAVING, ORDER BY, এবং LIMIT অপারেশনগুলি। Query Builder ব্যবহার করে, আপনি SQL কোড লেখার চেয়ে ডাইনামিক এবং কার্যকরী কুয়েরি তৈরি করতে পারেন।
TypeORM এর Query Builder টুলটি TypeScript বা JavaScript কোডের মাধ্যমে SQL কুয়েরি তৈরি এবং এক্সিকিউট করতে খুবই সুবিধাজনক।
Query Builder এর সুবিধা
- ডাইনামিক কুয়েরি তৈরি: Query Builder আপনাকে কন্ডিশনাল কুয়েরি তৈরি করার সুযোগ দেয়, যাতে নির্দিষ্ট শর্তের ভিত্তিতে কুয়েরি তৈরি করা যায়।
- কমপ্লেক্স কুয়েরি সহজে তৈরি করা: SQL কুয়েরির জটিল অংশগুলো সহজে তৈরি করা যায়, যেমন অ্যাগ্রিগেট ফাংশন, জয়েনস, এবং সাবকুয়েরি।
- SQL ইনজেকশন প্রতিরোধ: TypeORM এর Query Builder স্বয়ংক্রিয়ভাবে SQL ইনজেকশন থেকে সুরক্ষা নিশ্চিত করে, কারণ এটি প্রিপেয়ারড স্টেটমেন্ট ব্যবহার করে।
Query Builder এর মৌলিক ব্যবহার
TypeORM এ Query Builder ব্যবহার করার জন্য সাধারণত getRepository() বা createQueryBuilder() ফাংশন ব্যবহার করা হয়।
১. কোয়েরি বিল্ডারের শুরু
প্রথমে, একটি Entity-এর জন্য createQueryBuilder() ফাংশন ব্যবহার করে একটি কুয়েরি বিল্ডার তৈরি করতে হয়।
import { AppDataSource } from "./data-source";
import { User } from "./entity/User";
const userRepository = AppDataSource.getRepository(User);
const queryBuilder = userRepository.createQueryBuilder("user");
এখানে, createQueryBuilder("user") User Entity-র উপর Query Builder তৈরি করবে এবং user আলিয়াসটি ব্যবহার করবে।
২. ডেটা রিট্রিভ করা (SELECT)
Query Builder ব্যবহার করে ডেটা রিট্রিভ (SELECT) করা খুব সহজ। নিচে একটি উদাহরণ দেওয়া হলো:
const users = await queryBuilder
.select(["user.id", "user.name", "user.email"])
.where("user.age > :age", { age: 18 })
.orderBy("user.name", "ASC")
.getMany();
console.log(users);
এখানে:
select(): এখানে আমরাuserটেবিলেরid,name, এবংemailকলাম সিলেক্ট করেছি।where(): এখানে আমরা একটি কন্ডিশন দিয়েছেন যাage১৮ এর বেশি হতে হবে।orderBy(): ব্যবহারকারীদের নামের অক্ষর অনুসারে সাজানো হয়েছে।getMany(): সমস্ত ম্যাচিং রেকর্ড ফেরত দেবে।
৩. একক রেকর্ড রিট্রিভ (getOne())
const user = await queryBuilder
.select(["user.id", "user.name", "user.email"])
.where("user.id = :id", { id: 1 })
.getOne();
console.log(user);
এখানে getOne() শুধুমাত্র প্রথম ম্যাচিং রেকর্ড ফেরত দেবে।
৪. JOIN ব্যবহার করা
Query Builder ব্যবহার করে আপনি সহজেই JOIN অপারেশন করতে পারেন।
const usersWithPosts = await queryBuilder
.select(["user.id", "user.name", "post.title"])
.innerJoin("user.posts", "post") // user.posts হল relation
.where("user.age > :age", { age: 18 })
.getMany();
console.log(usersWithPosts);
এখানে:
innerJoin("user.posts", "post"): এটিuserটেবিল এবংpostটেবিলকেpostsসম্পর্কের মাধ্যমে যোগ করবে। (এটি সেই সম্পর্কের ওপর নির্ভর করে যেটি Entity-তে ডিফাইন করা থাকে।)
৫. GROUP BY এবং HAVING ব্যবহার করা
Group by এবং Having এর মাধ্যমে আপনি গ্রুপিং এবং শর্তাবলী দিয়ে ডেটা ফিল্টার করতে পারবেন।
const result = await queryBuilder
.select("user.age")
.addSelect("COUNT(user.id)", "userCount")
.groupBy("user.age")
.having("COUNT(user.id) > :count", { count: 2 })
.getRawMany();
console.log(result);
এখানে:
groupBy(): এটি ব্যবহার করেuser.ageঅনুযায়ী গ্রুপিং করা হয়েছে।having(): গ্রুপের মধ্যে যেগুলি ২টির বেশিuser.idরয়েছে, সেই গ্রুপগুলো রিটার্ন হবে।
৬. INSERT এবং UPDATE
Query Builder ব্যবহার করে আপনি ডেটাবেসে ডেটা ইনসার্ট এবং আপডেট করতে পারেন।
INSERT Example:
await queryBuilder
.insert()
.into(User)
.values([
{ name: "John", email: "john@example.com", age: 25 },
{ name: "Jane", email: "jane@example.com", age: 28 },
])
.execute();
এখানে, insert() ফাংশনটি User Entity-তে নতুন ইউজার ইনসার্ট করছে।
UPDATE Example:
await queryBuilder
.update(User)
.set({ name: "Updated Name" })
.where("id = :id", { id: 1 })
.execute();
এখানে, update() ফাংশনটি User Entity-এর name ফিল্ড আপডেট করছে।
৭. DELETE ব্যবহার করা
Query Builder দিয়ে ডেটা ডিলিটও করা যেতে পারে।
await queryBuilder
.delete()
.from(User)
.where("id = :id", { id: 1 })
.execute();
এখানে, delete() ফাংশনটি User Entity থেকে একটি রেকর্ড মুছে ফেলছে।
৮. Raw SQL কোয়েরি ব্যবহার করা
TypeORM Query Builder আপনাকে Raw SQL কোয়েরি লেখার সুযোগও দেয়, যা কিছু পরিস্থিতিতে প্রয়োজন হতে পারে।
const rawQueryResult = await queryBuilder
.getRawMany();
console.log(rawQueryResult);
এখানে getRawMany() রিজাল্টগুলিকে Raw SQL ফরম্যাটে রিটার্ন করে।
সারাংশ
TypeORM Query Builder হল একটি শক্তিশালী এবং ফ্লেক্সিবল টুল যা TypeORM ব্যবহার করে ডেটাবেস কুয়েরি তৈরি এবং এক্সিকিউট করতে সহায়তা করে। Query Builder এর মাধ্যমে আপনি খুব সহজেই JOIN, GROUP BY, HAVING, INSERT, UPDATE, DELETE এবং Raw SQL কুয়েরি করতে পারেন। এটি SQL ইনজেকশন প্রতিরোধ নিশ্চিত করে, এবং ডাইনামিক কুয়েরি তৈরিতে সহায়তা করে।
TypeORM এর Query Builder ব্যবহারে আপনার ডেটাবেস কুয়েরি লেখার প্রক্রিয়া সহজ, দ্রুত এবং নিরাপদ হবে।