সরাসরি প্রধান সামগ্রীতে চলে যান

Spring Data JPA থেকে Spring Data JDBC-তে মাইগ্রেশন গাইড

Introduction

এই ভিডিওতে জেনস শাউডার (Jens Schauder) আলোচনা করেছেন কীভাবে একটি প্রজেক্টকে Spring Data JPA থেকে সরিয়ে Spring Data JDBC-তে নিয়ে আসা যায়। আমরা সাধারণত মনে করি ডাটাবেস লেয়ার পরিবর্তন করা মানে অনেক জটিল কাজ, কিন্তু এই ভিডিওতে দেখানো হয়েছে কীভাবে ধাপে ধাপে এবং সুশৃঙ্খলভাবে এই কাজটি করা সম্ভব। স্পিকার এখানে সরাসরি কোড পরিবর্তনের চেয়ে বেশি গুরুত্ব দিয়েছেন আর্কিটেকচারাল পরিবর্তনের ওপর, যা আপনার কোডকে আরও পরিষ্কার এবং সহজবোধ্য করে তুলবে।


১. ফাউন্ডেশন এবং প্রস্ততি (Foundations & Preparation)

মাইগ্রেশন শুরু করার আগে কিছু প্রাথমিক বিষয় মাথায় রাখা জরুরি।

ভিডিও রেফারেন্স: [04:45]

বিস্তারিত আলোচনা: যেকোনো বড় পরিবর্তনের আগে আপনার প্রজেক্টে ভালো Test Cases থাকতে হবে। যদি পারসিস্টেন্স লেয়ার (Persistence Layer) পরিবর্তনের ফলে কোনো সমস্যা হয়, তবে আপনার টেস্ট যেন তা সাথে সাথে ধরতে পারে।

  • Baby Steps: একসাথে সব পরিবর্তন না করে খুব ছোট ছোট পরিবর্তন করতে হবে।

  • Mikado Method: এটি একটি বিশেষ পদ্ধতি যেখানে বড় লক্ষ্যকে ছোট ছোট গোল (Circles) হিসেবে কাগজে লিখে রাখা হয় এবং একেকটি শেষ করে পরেরটিতে যাওয়া হয়। এতে প্রজেক্টের বর্তমান অবস্থা বোঝা সহজ হয়।

কঠিন শব্দের ব্যাখ্যা:

  • Persistence Layer: সফটওয়্যারের সেই অংশ যা ডাটাবেসের সাথে ডাটা আদান-প্রদান করে।

  • Refactoring: কোডের কাজ ঠিক রেখে ভেতরের গঠন সুন্দর বা উন্নত করা।


২. এগ্রিগেট শনাক্ত করা (Identifying Aggregates)

Spring Data JDBC মূলত Domain Driven Design (DDD) এর এগ্রিগেট কনসেপ্টের ওপর ভিত্তি করে কাজ করে।

ভিডিও রেফারেন্স: [15:20]

বিস্তারিত আলোচনা: JPA-তে আমরা সব এনটিটির জন্য আলাদা রিপোজিটরি ব্যবহার করতে পারি, কিন্তু JDBC-তে আমাদের Aggregate Root চিনতে হবে।

  • Aggregate: এটি মূলত কতগুলো ক্লাসের একটি গ্রুপ যারা একসাথে কাজ করে। যেমন: একটি Shipment (চালান) এবং তার ভেতরের Items (পণ্য)। এখানে Shipment হলো রুট।

  • আইটেমের জন্য আলাদা রিপোজিটরি না রেখে সব কাজ এগ্রিগেট রুটের মাধ্যমে করতে হবে।


৩. কোডিং পরিবর্তন: Explicit Save এবং References

JPA অনেক কাজ পর্দার আড়ালে (Magic) করে দেয়, যা JDBC-তে ম্যানুয়ালি করতে হয়।

ভিডিও রেফারেন্স: [22:06], [29:40]

বিস্তারিত আলোচনা:

  • Explicit Save: JPA-তে ট্রানজ্যাকশনের মধ্যে ডাটা পরিবর্তন করলে তা অটোমেটিক সেভ হয়ে যায়। কিন্তু Spring Data JDBC-তে আপনাকে স্পষ্টভাবে .save() মেথড কল করতে হবে [22:32]।

  • Replacing References with IDs: JPA-তে আমরা একটি অবজেক্টের ভেতর সরাসরি অন্য অবজেক্ট রাখি (যেমন: Item-এর ভেতর Product অবজেক্ট)। JDBC-তে এটি পরিবর্তন করে শুধু ID রাখতে হয় (যেমন: productId) [30:22]। এতে একটি এগ্রিগেট অন্যটি থেকে আলাদা থাকে।

কোডিং উদাহরণ:

Java

// JPA স্টাইল (আগে)
@Entity
public class Item {
    @ManyToOne
    private Product product; // সরাসরি অবজেক্ট রেফারেন্স
}

// Spring Data JDBC স্টাইল (পরে)
public class Item {
    private AggregateReference<Product, Long> product; // শুধুমাত্র আইডি রেফারেন্স
} 

ব্যাখ্যা: এই কোডের মাধ্যমে আমরা একটি বড় ডাটা মডেলকে ছোট ছোট স্বাধীন অংশে ভাগ করে ফেললাম। এতে মেমরি ম্যানেজমেন্ট সহজ হয় এবং ডাটাবেস কুয়েরি দ্রুত হয়।


৪. ফাইনাল ইমপ্লিমেন্টেশন: ID জেনারেশন ও কনভার্টার

JDBC-তে মাইগ্রেশনের শেষ ধাপ হলো কনফিগারেশন ঠিক করা।

ভিডিও রেফারেন্স: [32:55]

বিস্তারিত আলোচনা:

  • ID Generation: JPA সাধারণত ডাটাবেস সিকোয়েন্স নিজে হ্যান্ডেল করে। JDBC-তে যদি আপনার কাস্টম আইডি দরকার হয়, তবে BeforeConvertCallback ব্যবহার করে আইডি জেনারেট করতে হবে [34:05]।

  • Converters: যদি আপনার ডাটাবেসে এমন কোনো ডাটা টাইপ থাকে যা Java সরাসরি চেনে না, তবে সেগুলোর জন্য কনভার্টার লিখতে হবে।


৫. অ্যানালাইসিস এবং লেখকের চিন্তাভাবনা

বিশ্লেষণ ও বাস্তবতা: কন্টেন্ট ক্রিয়েটর Jens Schauder বোঝাতে চেয়েছেন যে, JPA অনেক বেশি সুবিধা দিলেও এটি মাঝেমধ্যে কোডকে জটিল করে ফেলে (যেমন: LazyLoading exceptions)। Spring Data JDBC ব্যবহারের মাধ্যমে ডেভেলপার কোডের ওপর পূর্ণ নিয়ন্ত্রণ পায়। তবে এটি করার জন্য অনেক পরিশ্রম (Manual Work) প্রয়োজন।

পরামর্শ ও বিকল্প: ১. একসাথে সব নয়: পুরো প্রজেক্ট একসাথে মাইগ্রেট না করে নতুন ফিচারের জন্য JDBC ব্যবহার শুরু করা যেতে পারে। একই প্রজেক্টে JPA এবং JDBC একসাথে চলতে পারে [39:46]। ২. বেটার অল্টারনেটিভ: যদি আপনার প্রজেক্ট খুব ছোট হয় বা খুব দ্রুত ডেভেলপমেন্ট দরকার হয়, তবে JPA-তেই থাকা ভালো। কিন্তু যদি আপনি পারফরম্যান্স এবং ক্লিন আর্কিটেকচার চান, তবে JDBC-তে যাওয়া বুদ্ধিমানের কাজ। ৩. পেশাদার মতামত: মাইগ্রেশনের আগে ভিডিওতে উল্লেখিত Mikado Method এবং DDD Aggregates সম্পর্কে ভালো করে পড়াশোনা করা উচিত। এটি শুধু লাইব্রেরি পরিবর্তন নয়, বরং আপনার সফটওয়্যার ডিজাইন করার পদ্ধতিই বদলে দেবে।

সারাংশ: ভিডিওটি মূলত একটি প্রজেক্টকে আরও মডুলার এবং রক্ষণাবেক্ষণযোগ্য (Maintainable) করার গাইডলাইন হিসেবে কাজ করে।

ইউটিউব ভিডিও লিঙ্ক

[

Migrating from (Spring Data) JPA to Spring Data JDBC by Jens Schauder @ Spring I/O 2024

Spring I/O · 27K views

](http://www.youtube.com/watch?v=WYa9n0F4CRM)

মন্তব্যসমূহ

এই ব্লগটি থেকে জনপ্রিয় পোস্টগুলি

সিজ্জিন (Sijjin) vs ইল্লিয়িন (Illiyin) পার্থক্য Difference

Sijjin (سِجِّين) এবং Illiyin (عِلِّيِّين) —এ দুটি শব্দ কুরআনে এসেছে এবং দুটোই মানুষের আমলনামা সংরক্ষণ সম্পর্কিত স্থানকে নির্দেশ করে। ১. সিজ্জিন (Sijjin) সিজ্জিন হলো পাপীদের (কাফের, মুনাফিক ও দুরাচারীদের) আমলনামা সংরক্ষণের স্থান। এটি সাত তলদেশের নীচে এক কারাগার বা অন্ধকার জগতে অবস্থিত বলে উল্লেখ রয়েছে। সূরা আল-মুতাফফিফীন (৮৩:৭-৯) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْفُجَّارِ لَفِي سِجِّينٍ ۝ وَمَا أَدْرَاكَ مَا سِجِّينٌ ۝ كِتَابٌ مَرْقُومٌ" অর্থ: "না, পাপীদের আমলনামা সিজ্জিনে সংরক্ষিত। তুমি কি জানো, সিজ্জিন কী? এটি এক লিখিত দলিল।" সিজ্জিনকে একটি কারাগার, সংকীর্ণ স্থান, বা নিচের স্তরে অবস্থিত এক অন্ধকার দুনিয়া হিসেবে ব্যাখ্যা করা হয়। ২. ইল্লিয়িন (Illiyin) ইল্লিয়িন হলো সৎকর্মশীলদের (মুমিন ও নেককারদের) আমলনামা সংরক্ষণের স্থান । এটি সপ্তম আসমানের ওপরে সংরক্ষিত এক সম্মানিত স্থান। সূরা আল-মুতাফফিফীন (৮৩:১৮-২১) তে বলা হয়েছে: "كَلَّا إِنَّ كِتَابَ الْأَبْرَارِ لَفِي عِلِّيِّينَ ۝ وَمَا أَدْرَاكَ مَا عِلِّيُّونَ ۝ كِتَابٌ مَرْقُومٌ ۝ يَش...

তারাবিহ সমগ্র - প্রথম আলো

রামাদান ২০২৪ উপলক্ষে প্রথম আলোর নিয়মিত আয়োজন - খতমে তারাবিহ'র সূরা গুলো নিয়ে সংক্ষিপ্ত আলোচনা'র লিংক  নিচে দেওয়া হলো।  লিংকে ক্লিক করলেই আপনাকে আলোচনা তে নিয়ে যাবে। তারাবিহ: ১ | একটি খুন ও গাভি নিয়ে বনি ইসরাইলের বাড়াবাড়ি তারাবিহ: ২ | নারীর মর্যাদা ও অধিকার এবং অলৌকিক তিন ঘটনা তারাবিহ: ৩ | যে ১৪ নারীকে বিয়ে করা হারাম তারাবিতে: ১২ | মহানবী (সা.)–এর আকাশভ্রমণ এবং আসহাবে কাহাফের কাহিনি

রেডমি নোট ৯ এর বিস্তারিত | Redmi Note 9 in Bangla

৩০ এপ্রিল, ২০২০ এ শাওমির ঘোষনা আসে এই ফোনটি নিয়ে। কিন্তু ফোনটি মার্কেটে আসে মে মাসের শেষের দিকে৷ করোনার কারনে ফোনটি বাংলাদেশে আসতে আরো সময় নেয়। বর্তমানে বাংলাদেশে আন অফিশিয়াল ভাবে ফোনটি পাওয়া যাচ্ছে৷ বাংলাদেশে অফিশিয়াল ভাবে এখনো ফোনটি আসার তথ্য নেয়৷ চলুন ফোনটি নিয়ে বিস্তারিত আলোচনা করা যাক। শাওমি নোট সিরিজের ফোন বের করে এদের রেডমি নামে সাব ব্যান্ড৷ এদের কাজ হল এই নোট সিরিজ নিয়ে কাজ করা৷ প্রতিবছর নোট সিরিজের ১/২ টা ফোন বাজারে আসে। সাথে সেই ফোন গুলার বিভিন্ন ভার্সন (যেমন - র‍্যাম ও রমের ভিত্তিতে) বাজারে আসে। এই বছরও তারা রেডমি সিরিজের নোট ৯ বাজারে আনে। এই বছর হয়তো এই সিরিজের আরো ফোন বাজারে আসবে। ডিস্পলেঃ ফোনটির ডিসপ্লে সাইজ ৬.৫৩ ইঞ্চি। এতে আইপিএস এলসিডি ডিসপ্লে ব্যবহার করা হয়েছে। এই ফোনের ডিসপ্লে প্রটেকশন হিসেবে আছে গরিলা গ্লাস ফাইভ। স্ক্রিন আর ফোনের বডির অনুপাত প্রায় ৮৩.৫%। এই ফোনের ডিসপ্লে ফুলএইচডি মানে ১০৮০পি। এই ডিস্পলের দৈর্ঘ্য ১৯.৫ একক এবং প্রস্থ হল ৯ একক। এত বড় ফোনের কারনে এই ফোনের পিপি আই ডেনসিটি ৩৯৫। যা একটু কম। প্লাটফর্মঃ এই ফোনের অপারেটিং সিস্টেম এন্ড্রয়েড ১০ এবং এর...