স্প্রিং ডিএও বনাম স্প্রিং ওআরএম বনাম স্প্রিং জেডিবিসি


103

আমি স্প্রিং দ্বারা সমর্থিত ডেটা অ্যাক্সেস প্রযুক্তিগুলির মধ্য দিয়ে যাচ্ছিলাম এবং আমি লক্ষ্য করেছি যে এটিতে একাধিক বিকল্পের উল্লেখ রয়েছে এবং আমি তাদের মধ্যে পার্থক্য সম্পর্কে নিশ্চিত নই:

আমি যেমন বুঝতে পেরেছি, স্প্রিং জেডিবিসি সাধারণ পুরানো উপায়ে ডেটাবেস অ্যাক্সেসের জন্য বয়লারপ্লেট কোড হ্রাস করার জন্য টেমপ্লেট সরবরাহ করে - আপনি নিজের এসকিউএল কোয়েরি লিখেন।

স্প্রিং-ওআরএম ওআরএম প্রযুক্তির মাধ্যমে ডেটাবেসগুলি অ্যাক্সেসের জন্য সরলীকৃত টেম্পলেট সরবরাহ করে যেমন হাইবারনেট, মাই (আই) বাটিস ইত্যাদি provides

স্প্রিং-এর ওয়েবসাইট অনুযায়ী স্প্রিং-ডিএও:

স্প্রিংয়ের ডেটা অ্যাক্সেস অবজেক্ট (ডিএও) সমর্থনটি জেডিবিসি, হাইবারনেট বা জেডিওর মতো ডেটা অ্যাক্সেস প্রযুক্তিগুলির সাথে ধারাবাহিক উপায়ে কাজ করা সহজ করার লক্ষ্যে করা হয়েছে

আমি ওআরএম বনাম জেডিবিসি সম্পর্কে কিছুটা পরিষ্কার, কারণ তারা ডিবি অ্যাক্সেস করার বিভিন্ন উপায়ের লক্ষ্য নিয়ে। তবে স্প্রিং-ডিএও কেবল বিভ্রান্তিকর!

এই তিনটির মধ্যে ঠিক কী পার্থক্য রয়েছে তা দয়া করে কেউ স্পষ্ট করে বলতে পারেন? কোন পরিস্থিতিতে কোনটি পছন্দ করা উচিত?

এছাড়াও, অন্য একটি প্রকল্পও Spring-DATAউপলভ্য রয়েছে ( http://projects.spring.io/spring-data/ ) এখন, এটি স্প্রিং দ্বারা সমর্থিত সমস্ত ডেটা অ্যাক্সেস প্রযুক্তিগুলির জন্য কোনও পিতামাতার প্রকল্প বা এটি কেবল বসন্তের একটি নতুন নাম -DAO?

উত্তর:


162

এখানে প্রতিটি উল্লিখিত প্রযুক্তির একটি ভূমিকা রয়েছে।

বসন্ত-দাও

স্প্রিং-ডিএও কোনও কড়া অর্থে একটি বসন্ত মডিউল নয়, বরং কনভেনশনগুলির যে আপনাকে ডিএও লেখার জন্য আদেশ দেয় এবং সেগুলি ভাল লিখতে পারে। যেমন, এটি আপনার ডেটা অ্যাক্সেসের জন্য ইন্টারফেস বা বাস্তবায়ন বা টেম্পলেট সরবরাহ করে না। ডিএও লেখার সময় আপনার এগুলি দিয়ে @Repositoryএমনটি করা উচিত যাতে অন্তর্নিহিত প্রযুক্তির সাথে যুক্ত ব্যতিক্রমগুলি (জেডিবিসি, হাইবারনেট, জেপিএ, ইত্যাদি) ধারাবাহিকভাবে যথাযথ DataAccessExceptionউপক্লাসে অনুবাদ করা যায় ।

উদাহরণস্বরূপ, ধরুন আপনি এখন হাইবারনেট ব্যবহার করছেন এবং HibernateExceptionএটিতে প্রতিক্রিয়া জানানোর জন্য আপনার পরিষেবা স্তরটি ক্যাচ করে। আপনি যদি জেপিএতে পরিবর্তন করেন, আপনার ডিএও ইন্টারফেসগুলি পরিবর্তন করা উচিত নয়, এবং পরিষেবা স্তরটি এখনও যে ব্লকগুলি ধারণ করে তা সংকলন করবে HibernateException, তবে আপনার ডিএওরা এখন জেপিএ ছুঁড়ে ফেলছে বলে আপনি কখনই এই ব্লকগুলিতে প্রবেশ করতে পারবেন না PersistenceException@Repositoryআপনার ডিএও ব্যবহার করে, অন্তর্নিহিত প্রযুক্তির সাথে যুক্ত ব্যতিক্রমগুলি বসন্তে অনুবাদ করা হয়েছে DataAccessException; আপনার পরিষেবা স্তরটি এই ব্যতিক্রমগুলি ধরেছে এবং আপনি যদি অধ্যবসায় প্রযুক্তি পরিবর্তন করার সিদ্ধান্ত নেন তবে DataAccessExceptionsবসন্তের স্থানীয় ব্যতিক্রমগুলি অনুবাদ করেছেন বলে একই বসন্তটি এখনও ছোঁড়া হবে।

তবে মনে রাখবেন যে নিম্নলিখিত কারণে এটির সীমিত ব্যবহার রয়েছে:

  1. আপনার সাধারণত অধ্যবসায়ের ব্যতিক্রমগুলি ধরা উচিত নয়, কারণ সরবরাহকারী লেনদেনটি পিছনে ফেলেছে (সঠিক ব্যতিক্রম সাব-টাইপের উপর নির্ভর করে), এবং আপনাকে বিকল্প পথ দিয়ে কার্যকর করা চালিয়ে যাওয়া উচিত নয়।
  2. ব্যতিক্রমগুলির শ্রেণিবিন্যাস সাধারণত আপনার সরবরাহকারীর মধ্যে স্প্রিংয়ের চেয়ে বেশি সমৃদ্ধ হয় এবং এক সরবরাহকারী থেকে অন্য সরবরাহকারীর কাছে কোনও নির্দিষ্ট ম্যাপিং নেই। এর উপর নির্ভর করা বিপজ্জনক। তবে আপনার ডিএওগুলির সাথে এটি বর্ণনা করা ভাল ধারণা @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েকে রেখে আরও জেনেরিক উপায়ে ডেটা (ডিএও + টিকা) কীভাবে অ্যাক্সেস করবেন তা নির্ধারণ করার জন্য একটি সাধারণ এপিআই সরবরাহ করে।

প্রাথমিক ধারণাটি এমন একটি প্রযুক্তি সরবরাহ করা যাতে বিকাশকারী একটি ডিএও-র জন্য অনুসন্ধানকারী (সন্ধানকারী পদ্ধতি) এবং সত্তা শ্রেণিগুলি প্রযুক্তি-অজ্ঞাত উপায়ে লেখেন এবং কেবল কনফিগারেশনের উপর ভিত্তি করে (ডিএও এবং সত্তা + স্প্রিং কনফিগারেশনে টিকা থাকে) এক্সএমএল- বা জাভা ভিত্তিক) বাস্তবায়ন প্রযুক্তিটি সিদ্ধান্ত নেয়, তা জেপিএ (এসকিউএল) বা রেডিস, হ্যাডোপ ইত্যাদি (এনওএসকিউএল)।

আপনি যদি সন্ধানকারী পদ্ধতির নামগুলির জন্য বসন্তের দ্বারা সংজ্ঞায়িত নামকরণ কনভেনশনগুলি অনুসরণ করেন তবে আপনাকে সর্বাধিক সাধারণ ক্ষেত্রে অনুসন্ধানকারীর সাথে সম্পর্কিত কোয়েরি স্ট্রিং সরবরাহ করার প্রয়োজন নেই। অন্যান্য পরিস্থিতিতে, আপনাকে অনুসন্ধানকারীর পদ্ধতিতে টীকাগুলির মধ্যে ক্যোরি স্ট্রিং সরবরাহ করতে হবে।

অ্যাপ্লিকেশন প্রসঙ্গটি লোড হয়ে গেলে, বসন্তটি ডিএও ইন্টারফেসগুলির জন্য প্রক্সি সরবরাহ করে, এতে ডেটা অ্যাক্সেস প্রযুক্তির সাথে সম্পর্কিত সমস্ত বয়লারপ্লেট কোড থাকে এবং কনফিগার করা কোয়েরিগুলিকে অনুরোধ করে।

স্প্রিং-ডেটা নন-এসকিউএল প্রযুক্তিগুলিতে মনোনিবেশ করে তবে এখনও জেপিএ (একমাত্র এসকিউএল প্রযুক্তি) জন্য একটি মডিউল সরবরাহ করে।

এরপর কি

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

  1. সত্তাগুলির জন্য POJO ক্লাসের সাথে একটি ডেটা মডেল সংজ্ঞায়িত করুন এবং সত্তা বৈশিষ্ট্য এবং অন্যান্য সত্তার সাথে সম্পর্কগুলি উপস্থাপনের জন্য / সেট পদ্ধতিগুলি পান / সেট করুন। প্রযুক্তির উপর ভিত্তি করে আপনাকে অবশ্যই সত্তা শ্রেণি এবং ক্ষেত্রগুলি বর্নিত করতে হবে, তবে আপাতত POJOs শুরু করার জন্য যথেষ্ট। আপাতত ব্যবসায়ের প্রয়োজনীয়তাগুলিতে মনোনিবেশ করুন।
  2. আপনার ডিএওগুলির জন্য ইন্টারফেসগুলি সংজ্ঞায়িত করুন। 1 ডিএও ঠিক 1 টি সত্ত্বাকে কভার করে, তবে অবশ্যই তাদের প্রত্যেকের জন্য আপনাকে অবশ্যই ডিএওর প্রয়োজন হবে না, কারণ সম্পর্কের নেভিগেট করে আপনার অতিরিক্ত সত্ত্বা লোড করতে সক্ষম হওয়া উচিত। কঠোর নামকরণের কনভেনশন অনুসরণ করে অনুসন্ধানকারী পদ্ধতিগুলি সংজ্ঞায়িত করুন।
  3. এর উপর ভিত্তি করে, অন্য কেউ আপনার ডিএওগুলির জন্য বিদ্রূপ নিয়ে পরিষেবা স্তরটিতে কাজ শুরু করতে পারে।
  4. আপনার প্রয়োজনের জন্য সবচেয়ে উপযুক্ত ফিট খুঁজে পেতে আপনি বিভিন্ন ধৈর্যশীল প্রযুক্তি (স্কয়ার, নো-এসকিএল) শিখুন এবং এর মধ্যে একটি চয়ন করুন। এর উপর ভিত্তি করে, আপনি সত্তাগুলি টীকায়িত করেন এবং ডিএওগুলি বাস্তবায়ন করেন (বা আপনি যদি বসন্ত-ডেটা ব্যবহার করতে চান তবে বসন্ত তাদের জন্য এগুলি কার্যকর করুন)।
  5. যদি ব্যবসায়ের প্রয়োজনীয়তাগুলি বিকশিত হয় এবং আপনার ডেটা অ্যাক্সেস প্রযুক্তি সমর্থন করতে যথেষ্ট না হয় (বলুন, আপনি জেডিবিসি এবং কয়েকটি সত্তা দিয়ে শুরু করেছিলেন, তবে এখন আরও সমৃদ্ধ ডেটা মডেল প্রয়োজন এবং জেপিএ আরও ভাল পছন্দ), আপনাকে বাস্তবায়ন পরিবর্তন করতে হবে আপনার ডিএওগুলির মধ্যে, আপনার সত্তাগুলিতে কয়েকটি টিকা যুক্ত করুন এবং বসন্তের কনফিগারেশন পরিবর্তন করুন (একটি এনটিটিম্যানেজারফ্যাক্টরি সংজ্ঞা যুক্ত করুন)। আপনার ব্যবসায়ের বাকী কোডটি আপনার পরিবর্তন থেকে অন্য প্রভাবগুলি দেখা উচিত নয়।

দ্রষ্টব্য: লেনদেন পরিচালনা

বসন্ত লেনদেন পরিচালনার জন্য একটি এপিআই সরবরাহ করে। যদি আপনি ডেটা অ্যাক্সেসের জন্য বসন্ত ব্যবহারের পরিকল্পনা করেন তবে আপনার লেনদেন পরিচালনার জন্য বসন্তও ব্যবহার করা উচিত, কারণ তারা একসাথে সত্যিই একীভূত হয়। বসন্ত দ্বারা সমর্থিত প্রতিটি ডেটা অ্যাক্সেস প্রযুক্তির জন্য, স্থানীয় লেনদেনের জন্য একটি মিল রয়েছে লেনদেন পরিচালক, বা আপনার বিতরণ লেনদেনের প্রয়োজন হলে আপনি জেটিএ চয়ন করতে পারেন। এঁরা সকলেই একই এপিআই বাস্তবায়ন করেন, যাতে (আবারও) প্রযুক্তির পছন্দটি এমন একটি কনফিগারেশন যা ব্যবসায়ের কোডে আরও প্রভাব ছাড়াই পরিবর্তন করা যায়।

দ্রষ্টব্য: বসন্তের ডকুমেন্টেশন

আপনি উল্লেখ করেছেন যে স্প্রিং ডকুমেন্টেশনের লিঙ্কগুলি বরং পুরানো। এখানে সর্বশেষ প্রকাশের ডকুমেন্টেশন (৪.১..6, সমস্ত বিষয়কে আচ্ছাদন করে):

স্প্রিং-ডেটা বসন্ত কাঠামোর অংশ নয়। একটি সাধারণ মডিউল রয়েছে যা নীতিগুলির সাথে অভ্যস্ত হওয়ার জন্য আপনাকে প্রথমে পড়া উচিত। ডকুমেন্টেশন এখানে পাওয়া যাবে:


আমি এখানে কিছু বর্ণনায় "ছাতা" শব্দটি ব্যবহার করে এই উত্তরটির প্রশংসা করি (যেমন স্প্রিং ডেটা), এর মধ্যে রয়েছে উপ-উপাদানগুলি / মডিউলগুলির মধ্যে রয়েছে (একটি ছাতা আরও বেশি ডোমেন নির্দিষ্ট হওয়ার চেয়ে)। এবং স্প্রিং ডেটা উল্লেখ এখানে প্রসঙ্গে খুব দরকারী, যদিও এটি প্রশ্নের মধ্যে উল্লেখ করা হয়নি।
cellepo

না spring-jdbcএখানে উল্লেখ করা অন্যান্য দরকারী সরঞ্জাম প্রদান? উদাহরণস্বরূপ আমি SimpleJdbcInsertএকক এন্ট্রি সন্নিবেশ পাশাপাশি বাল্ক উভয় (অবশ্যই একটি যুক্তিসঙ্গত স্কেল পর্যন্ত) জন্য খুব পরিষ্কার এবং দরকারী বলে মনে করি ।
1fan

3

স্প্রিং ডিএও ( ডি আটা ক্রেস বজেক্ট): জেডিবিসি বাস্তবায়ন ফ্রেমওয়ার্কগুলিতে একটি বিমূর্ত ইন্টারফেস সরবরাহ করে এমন একটি বস্তু যেমন স্প্রিং ডিএও স্বতন্ত্র সমর্থন ক্লাসগুলি ব্যবহার করে জেডিবিসি এবং হাইবারনেট, মাইবাতিস, জেপিএ, জেডিও অ্যাক্সেস করার জন্য সাধারণ ধারণা। এবং এটি টীকা সংজ্ঞায়িত করে সাধারণীকরণ ব্যতিক্রম শ্রেণিবিন্যাস সরবরাহ করে @Repository। এই টীকাটি এসকিউএল ব্যতিক্রম অনুবাদ থেকে SQLExceptionস্প্রিংয়ের ডেটা অ্যাক্সেস স্ট্র্যাটেজি-অজোনস্টিক DataAccessExceptionহায়ারার্কিতে সংজ্ঞায়িত করে Spring

অর্থাত্ প্ল্যাটফর্ম নির্দিষ্ট ব্যতিক্রমগুলি ক্যাচ এবং তারপরে স্প্রিংয়ের চেক করা ডেটা অ্যাক্সেস ব্যতিক্রমগুলির একটি হিসাবে পুনরায় নিক্ষেপ করে।


স্প্রিং JDBC এর : সাধারণ JDBC এর জন্য আমরা ব্যবহার এই মডিউল, যা শুধুমাত্র হয় উপর নির্ভর করে DataSourceএবং টেমপ্লেট শ্রেণীর পছন্দ JdbcTemplate, NamedParameterJdbcTemplate(গোপন JdbcTemplate) এবং SimpleJdbcTemplateক্রস কাটিয়া উদ্বেগ হ্রাস করার জন্য।

public class EmployeeDao {  
private JdbcTemplate jdbcTemplate;  

public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {  
    this.jdbcTemplate = jdbcTemplate;  
}  

public int saveEmployee(Employee e){  
    return jdbcTemplate.update(query);  
}  
public int updateEmployee(Employee e){  
    return jdbcTemplate.update(query);  
}  
public int deleteEmployee(Employee e){  
       return jdbcTemplate.update(query);  
}  

}  

এবং স্প্রিং এক্সএমএলে:

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource"/>
</bean>

স্প্রিং JDBC এর আরো প্রদান করে JdbcDaoSupport, NamedParameterJdbcDaoSupport, SimpleJdbcDaoSupport, যা হয় সমর্থন (অর্থাত সুবিধাজনক প্রসারিত এবং আমাদের নিজস্ব বিকাশ) পথ দাও নিম্নরূপ বিমূর্ত ইন্টারফেস:

public interface EmployeeDao {

    public void saveEmployee(Employee emp);
}

public class EmployeeDaoImpl extends JdbcDaoSupport implements EmployeeDao{

    @Override
    public void saveEmployee(Employee emp) {

        Object[] inputs = new Object[] {emp.getName(), emp.getSalary(), emp.getDept()};
        getJdbcTemplate().update(query, inputs);
    }
}

এবং বসন্তে এক্সএমএল:

<bean id="employeeDAO" class="EmployeeDaoImpl">
        <property name="dataSource" ref="dataSource" />
    </bean>

স্প্রিং ওআরএম: ওআরএম সরঞ্জামগুলির জন্য যেমন হাইবারনেট, জেপিএ, মাইবাটিস ... DataSourceনীচের ক্লাস এবং স্বতন্ত্র DaoSupportক্লাসের সাথে সহজেই ইনজেকশনের মাধ্যমে বসন্তকে সংহত করে ।

  • SessionFactory হাইবারনেটের জন্য
  • EntityManagerFactory জেপিএর জন্য,
  • SqlSessionFactory মাইবাটিসের জন্য

1

স্প্রিং-দাও লাইবটি 2.0.8 সংস্করণে বন্ধ হয়েছিল (জানুয়ারী 2008)। বসন্ত-দাওতে ক্লাসগুলি বসন্ত-টিএক্স-তে অনুলিপি করা হয়েছিল। সুতরাং, যদি আপনার বসন্ত-দাও-তে খুঁজে পাওয়া কোনও শ্রেণীর প্রয়োজন হয় তবে পরিবর্তে বসন্ত-টিএক্স-তে নির্ভরতা যুক্ত করুন । ( উত্স ।)


0

তোমার মত ইন্টারফেস তৈরি SomeObjectDaoএবং তারপর মত এই ইন্টারফেসের বিভিন্ন বাস্তবায়নের তৈরি JdbcSomeObjectDao, HibernateSomeObjectDao। তারপরে আপনার SomeObjectServiceক্লাসে আপনি SomeObjectDaoইন্টারফেসটি পরিচালনা করবেন এবং সেখানে একটি কংক্রিট বাস্তবায়ন ইনজেকশন করবেন। সুতরাং প্রতিটি প্রয়োগ SomeObjectDaoআপনি জেডিবিসি, বা ওআরএম ইত্যাদি ব্যবহার করবেন না সে সম্পর্কে বিশদটি গোপন করবে of

সাধারণত জেডিবিসি, এবং ওআরএমের বিভিন্ন বাস্তবায়ন বিভিন্ন ধরণের ব্যতিক্রম ছুঁড়ে দেয়। স্প্রিংয়ের ডিএও সমর্থনগুলি সাধারণ স্প্রিং ডিএও ব্যতিক্রমগুলিতে প্রযুক্তির নির্দিষ্ট ব্যতিক্রমগুলি ম্যাপ করতে পারে। সুতরাং আপনি বাস্তব বাস্তবায়ন থেকে আরও decoupled হয়। এছাড়াও স্প্রিংয়ের ডিএও সমর্থন বিমূর্ত *DataSupportক্লাসগুলির সেট দেয় যা ডিএও বিকাশে আরও বেশি সহায়তা করে। সুতরাং আপনার SomeObjectDaoইন্টারফেস বাস্তবায়নের পাশাপাশি , আপনি স্প্রিংয়ের একটি *DataSupportশ্রেণিকে প্রসারিত করতে পারেন ।


সুতরাং আপনার মানে, বসন্ত-দাও হাইবারনেট / জেডিও / জেডিবিসি নির্দিষ্ট ব্যতিক্রমগুলি দূরে সরিয়ে দেয় এবং ব্যতিক্রমগুলির একটি মানসম্পন্ন সেট সরবরাহ করে? এটির templatesডিবি অ্যাক্সেস করার কোনও কি আছে ? বা অন্যান্য বসন্তের উপাদানগুলির সাথে এটি ব্যবহার করা কি কেবল বিমূর্ততা? উদাহরণস্বরূপ, ডিবি অ্যাক্সেসের জন্য কেবল বসন্ত-দাও ব্যবহার করা কোড (স্প্রিং-জেডিবিসি, স্প্রিং-ওআরএম, হাইবারনেট বা অন্য কোনও কাঠামো ব্যবহার না করে) এমন কি লিখন সম্ভব?
প্যাট

0

অতিরিক্ত তথ্য হিসাবে। আমি আপনাকে স্প্রিং ডেটা জেপিএ ব্যবহার করার পরামর্শ দিচ্ছি। অ্যান্টেশনগুলি ব্যবহার করে যেমন: @ রিপোসিটোরি, @ সার্ভিস। আমি আপনাকে একটি উদাহরণ দেখাচ্ছি:

@Repository("customerEntitlementsRepository")
public interface CustomerEntitlementsRepository extends CrudRepository<BbsExerul, BbsExerulPK> {

  @Query(value = "SELECT " + "CONTRACT_NUMBER, EXECUTIVE_NUMBER, " + "GROUP_VALUE, " + "CODE, "
      + "SUBCODE, " + "CURRENCY " + "FROM BBS_EXERUL " + "WHERE CONTRACT_NUMBER =:clientId AND "
      + "EXECUTIVE_NUMBER =:representativeId", nativeQuery = true)
  Collection<CustomerEntitlementsProjection> getFieldsExerul(@Param("clientId") String clientId,
      @Param("representativeId") String representativeId);

}

যেখানে গ্রাহক সংস্থাগুলি প্রজেকশন হ'ল বসন্তের অভিক্ষেপ, এটি আপনার সত্তা বা ডিটিও পোজোর সাথে যুক্ত;

@Projection(name = "customerEntitlementsProjection", types = { BbsExerul.class })
public interface CustomerEntitlementsProjection {

  String getContractNumber();

  String getExecutiveNumber();

1
আপনার কোড কোড ব্লকগুলিতে ফর্ম্যাট করুন যাতে এটি পাঠযোগ্য able
নির্দিষ্ট পারফরম্যান্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.