এখানে প্রতিটি উল্লিখিত প্রযুক্তির একটি ভূমিকা রয়েছে।
বসন্ত-দাও
স্প্রিং-ডিএও কোনও কড়া অর্থে একটি বসন্ত মডিউল নয়, বরং কনভেনশনগুলির যে আপনাকে ডিএও লেখার জন্য আদেশ দেয় এবং সেগুলি ভাল লিখতে পারে। যেমন, এটি আপনার ডেটা অ্যাক্সেসের জন্য ইন্টারফেস বা বাস্তবায়ন বা টেম্পলেট সরবরাহ করে না। ডিএও লেখার সময় আপনার এগুলি দিয়ে @Repository
এমনটি করা উচিত যাতে অন্তর্নিহিত প্রযুক্তির সাথে যুক্ত ব্যতিক্রমগুলি (জেডিবিসি, হাইবারনেট, জেপিএ, ইত্যাদি) ধারাবাহিকভাবে যথাযথ DataAccessException
উপক্লাসে অনুবাদ করা যায় ।
উদাহরণস্বরূপ, ধরুন আপনি এখন হাইবারনেট ব্যবহার করছেন এবং HibernateException
এটিতে প্রতিক্রিয়া জানানোর জন্য আপনার পরিষেবা স্তরটি ক্যাচ করে। আপনি যদি জেপিএতে পরিবর্তন করেন, আপনার ডিএও ইন্টারফেসগুলি পরিবর্তন করা উচিত নয়, এবং পরিষেবা স্তরটি এখনও যে ব্লকগুলি ধারণ করে তা সংকলন করবে HibernateException
, তবে আপনার ডিএওরা এখন জেপিএ ছুঁড়ে ফেলছে বলে আপনি কখনই এই ব্লকগুলিতে প্রবেশ করতে পারবেন না PersistenceException
। @Repository
আপনার ডিএও ব্যবহার করে, অন্তর্নিহিত প্রযুক্তির সাথে যুক্ত ব্যতিক্রমগুলি বসন্তে অনুবাদ করা হয়েছে DataAccessException
; আপনার পরিষেবা স্তরটি এই ব্যতিক্রমগুলি ধরেছে এবং আপনি যদি অধ্যবসায় প্রযুক্তি পরিবর্তন করার সিদ্ধান্ত নেন তবে DataAccessExceptions
বসন্তের স্থানীয় ব্যতিক্রমগুলি অনুবাদ করেছেন বলে একই বসন্তটি এখনও ছোঁড়া হবে।
তবে মনে রাখবেন যে নিম্নলিখিত কারণে এটির সীমিত ব্যবহার রয়েছে:
- আপনার সাধারণত অধ্যবসায়ের ব্যতিক্রমগুলি ধরা উচিত নয়, কারণ সরবরাহকারী লেনদেনটি পিছনে ফেলেছে (সঠিক ব্যতিক্রম সাব-টাইপের উপর নির্ভর করে), এবং আপনাকে বিকল্প পথ দিয়ে কার্যকর করা চালিয়ে যাওয়া উচিত নয়।
- ব্যতিক্রমগুলির শ্রেণিবিন্যাস সাধারণত আপনার সরবরাহকারীর মধ্যে স্প্রিংয়ের চেয়ে বেশি সমৃদ্ধ হয় এবং এক সরবরাহকারী থেকে অন্য সরবরাহকারীর কাছে কোনও নির্দিষ্ট ম্যাপিং নেই। এর উপর নির্ভর করা বিপজ্জনক। তবে আপনার ডিএওগুলির সাথে এটি বর্ণনা করা ভাল ধারণা
@Repository
, কারণ মটরশুটি স্ক্যান পদ্ধতি দ্বারা স্বয়ংক্রিয়ভাবে যুক্ত হবে। আরও, স্প্রিং টীকাতে অন্যান্য দরকারী বৈশিষ্ট্য যুক্ত করতে পারে।
বসন্ত-JDBC এর
স্প্রিং-জেডিবিসি জেডিবিসিটাইপলেট ক্লাস সরবরাহ করে যা নদীর গভীরতানির্ণয় কোডটি সরিয়ে দেয় এবং আপনাকে এসকিউএল কোয়েরি এবং পরামিতিগুলিতে মনোনিবেশ করতে সহায়তা করে। আপনার কেবল এটির সাথে একটি কনফিগার করা দরকার DataSource
এবং আপনি তারপরে কোডটি লিখতে পারেন:
int nbRows = jdbcTemplate.queryForObject("select count(1) from person", Integer.class);
Person p = jdbcTemplate.queryForObject("select first, last from person where id=?",
rs -> new Person(rs.getString(1), rs.getString(2)),
134561351656L);
স্প্রিং-জেডিবিসি এছাড়াও একটি জেডিবিসিডাও সমর্থন সরবরাহ করে, যা আপনি আপনার ডিএও বিকাশ করতে পারেন। এটি মূলত 2 টি বৈশিষ্ট্য সংজ্ঞায়িত করে: একটি ডেটা সোর্স এবং একটি জেডিবিসিটেম্পলেট যা উভয়ই ডিএও পদ্ধতিগুলি প্রয়োগ করতে ব্যবহার করা যেতে পারে। এটি এসকিউএল ব্যতিক্রম থেকে স্প্রিং ডেটা অ্যাক্সেসএক্সেপশনগুলিতে ব্যতিক্রম অনুবাদক সরবরাহ করে।
আপনি যদি সরল jdbc ব্যবহার করার পরিকল্পনা করেন তবে এটি আপনাকে ব্যবহার করার প্রয়োজন মডিউল।
বসন্ত-ORM
স্প্রিং-ওআরএম একটি ছাতা মডিউল যা জেপিএ, জেডিও, হাইবারনেট এবং আইবাটিস নামক অনেক অধ্যবসায় প্রযুক্তি কভার করে। এই প্রতিটি প্রযুক্তির জন্য স্প্রিং সংহত শ্রেণি সরবরাহ করে যাতে প্রতিটি প্রযুক্তিটি কনফিগারেশনের বসন্ত নীতিমালা অনুসরণ করে ব্যবহার করা যেতে পারে এবং স্প্রিং লেনদেন পরিচালনার সাথে স্বচ্ছন্দে সংহত করে।
প্রতিটি প্রযুক্তির জন্য, কনফিগারেশন মূলত একটি ইনজেকশনের মধ্যে রয়েছে DataSource
কিছু মধ্যে শিম SessionFactory
বা EntityManagerFactory
ইত্যাদি শিম। খাঁটি জেডিবিসি-র জন্য, জেডিবিসি কেবল একটি ডেটা সোর্সের উপর নির্ভর করে, কারণ এই জাতীয় সংহত শ্রেণির (জেডিবিসিটেম্পলেট বাদে) দরকার নেই।
আপনি যদি জেপিএ বা হাইবারনেটের মতো একটি ওআরএম ব্যবহার করার পরিকল্পনা করেন তবে আপনার স্প্রিং-জেডিবিসি প্রয়োজন হবে না, কেবল এই মডিউলটির প্রয়োজন।
স্প্রিং-ডেটা
স্প্রিং-ডেটা একটি ছাতা প্রকল্প যা এসকিউএল এবং এনওএসকিউএল উভয় ডেটা উত্সকে coveringেকে রেখে আরও জেনেরিক উপায়ে ডেটা (ডিএও + টিকা) কীভাবে অ্যাক্সেস করবেন তা নির্ধারণ করার জন্য একটি সাধারণ এপিআই সরবরাহ করে।
প্রাথমিক ধারণাটি এমন একটি প্রযুক্তি সরবরাহ করা যাতে বিকাশকারী একটি ডিএও-র জন্য অনুসন্ধানকারী (সন্ধানকারী পদ্ধতি) এবং সত্তা শ্রেণিগুলি প্রযুক্তি-অজ্ঞাত উপায়ে লেখেন এবং কেবল কনফিগারেশনের উপর ভিত্তি করে (ডিএও এবং সত্তা + স্প্রিং কনফিগারেশনে টিকা থাকে) এক্সএমএল- বা জাভা ভিত্তিক) বাস্তবায়ন প্রযুক্তিটি সিদ্ধান্ত নেয়, তা জেপিএ (এসকিউএল) বা রেডিস, হ্যাডোপ ইত্যাদি (এনওএসকিউএল)।
আপনি যদি সন্ধানকারী পদ্ধতির নামগুলির জন্য বসন্তের দ্বারা সংজ্ঞায়িত নামকরণ কনভেনশনগুলি অনুসরণ করেন তবে আপনাকে সর্বাধিক সাধারণ ক্ষেত্রে অনুসন্ধানকারীর সাথে সম্পর্কিত কোয়েরি স্ট্রিং সরবরাহ করার প্রয়োজন নেই। অন্যান্য পরিস্থিতিতে, আপনাকে অনুসন্ধানকারীর পদ্ধতিতে টীকাগুলির মধ্যে ক্যোরি স্ট্রিং সরবরাহ করতে হবে।
অ্যাপ্লিকেশন প্রসঙ্গটি লোড হয়ে গেলে, বসন্তটি ডিএও ইন্টারফেসগুলির জন্য প্রক্সি সরবরাহ করে, এতে ডেটা অ্যাক্সেস প্রযুক্তির সাথে সম্পর্কিত সমস্ত বয়লারপ্লেট কোড থাকে এবং কনফিগার করা কোয়েরিগুলিকে অনুরোধ করে।
স্প্রিং-ডেটা নন-এসকিউএল প্রযুক্তিগুলিতে মনোনিবেশ করে তবে এখনও জেপিএ (একমাত্র এসকিউএল প্রযুক্তি) জন্য একটি মডিউল সরবরাহ করে।
এরপর কি
এই সমস্ত কিছু জানতে পেরে, আপনাকে এখন কী সিদ্ধান্ত নেবে তা সিদ্ধান্ত নিতে হবে। এখানে সুসংবাদটি হ'ল প্রযুক্তিটির জন্য আপনার কোনও চূড়ান্ত চূড়ান্ত পছন্দ করার দরকার নেই। এটি প্রকৃতপক্ষে যেখানে বসন্ত শক্তি বসবাস করে: একটি বিকাশকারী হিসাবে আপনি কোড লেখার সময় আপনি ব্যবসায়টিতে মনোনিবেশ করেন এবং যদি আপনি এটি ভাল করে করেন তবে অন্তর্নিহিত প্রযুক্তি পরিবর্তন করা একটি বাস্তবায়ন বা কনফিগারেশন বিশদ।
- সত্তাগুলির জন্য POJO ক্লাসের সাথে একটি ডেটা মডেল সংজ্ঞায়িত করুন এবং সত্তা বৈশিষ্ট্য এবং অন্যান্য সত্তার সাথে সম্পর্কগুলি উপস্থাপনের জন্য / সেট পদ্ধতিগুলি পান / সেট করুন। প্রযুক্তির উপর ভিত্তি করে আপনাকে অবশ্যই সত্তা শ্রেণি এবং ক্ষেত্রগুলি বর্নিত করতে হবে, তবে আপাতত POJOs শুরু করার জন্য যথেষ্ট। আপাতত ব্যবসায়ের প্রয়োজনীয়তাগুলিতে মনোনিবেশ করুন।
- আপনার ডিএওগুলির জন্য ইন্টারফেসগুলি সংজ্ঞায়িত করুন। 1 ডিএও ঠিক 1 টি সত্ত্বাকে কভার করে, তবে অবশ্যই তাদের প্রত্যেকের জন্য আপনাকে অবশ্যই ডিএওর প্রয়োজন হবে না, কারণ সম্পর্কের নেভিগেট করে আপনার অতিরিক্ত সত্ত্বা লোড করতে সক্ষম হওয়া উচিত। কঠোর নামকরণের কনভেনশন অনুসরণ করে অনুসন্ধানকারী পদ্ধতিগুলি সংজ্ঞায়িত করুন।
- এর উপর ভিত্তি করে, অন্য কেউ আপনার ডিএওগুলির জন্য বিদ্রূপ নিয়ে পরিষেবা স্তরটিতে কাজ শুরু করতে পারে।
- আপনার প্রয়োজনের জন্য সবচেয়ে উপযুক্ত ফিট খুঁজে পেতে আপনি বিভিন্ন ধৈর্যশীল প্রযুক্তি (স্কয়ার, নো-এসকিএল) শিখুন এবং এর মধ্যে একটি চয়ন করুন। এর উপর ভিত্তি করে, আপনি সত্তাগুলি টীকায়িত করেন এবং ডিএওগুলি বাস্তবায়ন করেন (বা আপনি যদি বসন্ত-ডেটা ব্যবহার করতে চান তবে বসন্ত তাদের জন্য এগুলি কার্যকর করুন)।
- যদি ব্যবসায়ের প্রয়োজনীয়তাগুলি বিকশিত হয় এবং আপনার ডেটা অ্যাক্সেস প্রযুক্তি সমর্থন করতে যথেষ্ট না হয় (বলুন, আপনি জেডিবিসি এবং কয়েকটি সত্তা দিয়ে শুরু করেছিলেন, তবে এখন আরও সমৃদ্ধ ডেটা মডেল প্রয়োজন এবং জেপিএ আরও ভাল পছন্দ), আপনাকে বাস্তবায়ন পরিবর্তন করতে হবে আপনার ডিএওগুলির মধ্যে, আপনার সত্তাগুলিতে কয়েকটি টিকা যুক্ত করুন এবং বসন্তের কনফিগারেশন পরিবর্তন করুন (একটি এনটিটিম্যানেজারফ্যাক্টরি সংজ্ঞা যুক্ত করুন)। আপনার ব্যবসায়ের বাকী কোডটি আপনার পরিবর্তন থেকে অন্য প্রভাবগুলি দেখা উচিত নয়।
দ্রষ্টব্য: লেনদেন পরিচালনা
বসন্ত লেনদেন পরিচালনার জন্য একটি এপিআই সরবরাহ করে। যদি আপনি ডেটা অ্যাক্সেসের জন্য বসন্ত ব্যবহারের পরিকল্পনা করেন তবে আপনার লেনদেন পরিচালনার জন্য বসন্তও ব্যবহার করা উচিত, কারণ তারা একসাথে সত্যিই একীভূত হয়। বসন্ত দ্বারা সমর্থিত প্রতিটি ডেটা অ্যাক্সেস প্রযুক্তির জন্য, স্থানীয় লেনদেনের জন্য একটি মিল রয়েছে লেনদেন পরিচালক, বা আপনার বিতরণ লেনদেনের প্রয়োজন হলে আপনি জেটিএ চয়ন করতে পারেন। এঁরা সকলেই একই এপিআই বাস্তবায়ন করেন, যাতে (আবারও) প্রযুক্তির পছন্দটি এমন একটি কনফিগারেশন যা ব্যবসায়ের কোডে আরও প্রভাব ছাড়াই পরিবর্তন করা যায়।
দ্রষ্টব্য: বসন্তের ডকুমেন্টেশন
আপনি উল্লেখ করেছেন যে স্প্রিং ডকুমেন্টেশনের লিঙ্কগুলি বরং পুরানো। এখানে সর্বশেষ প্রকাশের ডকুমেন্টেশন (৪.১..6, সমস্ত বিষয়কে আচ্ছাদন করে):
স্প্রিং-ডেটা বসন্ত কাঠামোর অংশ নয়। একটি সাধারণ মডিউল রয়েছে যা নীতিগুলির সাথে অভ্যস্ত হওয়ার জন্য আপনাকে প্রথমে পড়া উচিত। ডকুমেন্টেশন এখানে পাওয়া যাবে: