জেপিএ বনাম স্প্রিং জেডিবিসিটিম্পলেট [বন্ধ]


88

কোনও নতুন প্রকল্পের জন্য জেপিএ হ'ল সর্বদা রিলেশনাল ডেটা পরিচালনা করার জন্য প্রস্তাবিত সরঞ্জাম বা এমন কোনও পরিস্থিতি রয়েছে যেখানে স্প্রিং জেডিবিসিটাইম্পলেট আরও ভাল পছন্দ? আপনার প্রতিক্রিয়া বিবেচনা করার জন্য কয়েকটি বিষয়:

  • নতুন ডাটাবেস স্কিমা বনাম প্রাক-বিদ্যমান স্কিমা এবং সারণী
  • বিকাশকারী দক্ষতার স্তর
  • সহজেই যা দিয়ে ডেটা ক্যাচিং লেয়ারের সাথে সংহত করতে পারে
  • কর্মক্ষমতা
  • অন্য কোন প্রাসঙ্গিক কারণ বিবেচনা?

4
আপনি যে অতিরিক্ত অতিরিক্ত বিষয় বিবেচনা করতে চান তা হ'ল মানককরণ।
এলদাড মোড়

উত্তর:


147

আপনি যদি কোনও ডোমেন মডেলের মাধ্যমে আপনার ডাটাবেস স্কিমা অ্যাক্সেস করতে না চান তবে স্প্রিং জেডিবিসিটাইপলেট ব্যবহার করুন। JdbcTemplate ব্যবহার করে আপনি আরও স্বাচ্ছন্দ্য সহ নিম্ন স্তরের অ্যাক্সেস ব্যবহার করছেন তবে সম্ভবত আরও বয়লারপ্লেট।

স্প্রিং জেডিবিসিটাইপলেটটি বহিরাগত ডাটাবেস স্কিমার এবং একটি সঞ্চিত পদ্ধতি ফোকাসের সাহায্যে আরও সহজে ব্যবহার করা যেতে পারে। জেপিএ ব্যবহার করে আপনাকে তা নিশ্চিত করে নেওয়া দরকার যে ডাটাবেস স্কিমাটি ডোমেন মডেলটিতে সঠিকভাবে ম্যাপ করে।

উভয় প্রযুক্তিরই সম্পর্কিত ডেটাবেস, এসকিউএল এবং লেনদেনগুলি জেনে বিকাশকারীদের প্রয়োজন। জেপিএ দিয়ে আপনি আরও লুকানো জটিলতা পাবেন get

জেপিএ আমার জ্ঞানের কাছে ডেটা ক্যাচিং স্তরগুলিতে আরও সহজে প্লাগযোগ্য since

আপনি জেডিবিসিটাইম্পলেট ভিত্তিক ব্যাকেন্ডগুলি আরও ভাল করে জরিমানা করতে পারেন তবে বেশিরভাগ ক্ষেত্রে এর সাথে আরও কোড জড়িত রয়েছে।

আরও কিছু বিষয় বিবেচনা করতে হবে যে জেপিএর সাথে আপনি আপনার ডাটাবেস স্কিমার জন্য একটি ডোমেন মডেল পান তবে আপনাকে প্রায়শই অতিরিক্ত ডিটিও ক্লাস ব্যবহার করতে হবে। জেডিবিসিটাইপলেট ব্যবহার করে আপনি সরাসরি ডিটিও ক্লাস পরিচালনা করতে পারবেন।


4
বিকাশকারীদের সম্পর্কে সম্পর্কিত ডেটাবেস, স্কয়ার এবং লেনদেনগুলি সম্পর্কে জানতে +1 ভাল পয়েন্ট। তবে জেপিএ আপনাকে কেবলমাত্র টেবিলের মতো নয়, টেবিলের সাহায্যে অবজেক্ট হিসাবে নিজের অধ্যবসায় স্তরটিকে চিকিত্সার অনুমতি দেবে।
মাইকেল উইলস

@ টিমো আমি একটি সংযোগ পুলের দৃষ্টিকোণ দিয়ে এটি বোঝার চেষ্টা করছি। তাহলে কি জেপিএর সংযোগ পুলিং রয়েছে এমন হাইকারসিপির মতো কোনও ডেটাসোর্স থাকতে পারে? বা জেপিএ এটি নিজের দ্বারা পরিচালনা করে
জোয়াই 587

79

আমি এই পোস্টে কিছুটা দেরি করেছি, তবে আমি ওআরএম এর উপরে জেডিবিসিটাইম্পলেট ব্যবহার করার ঝোঁক। আমি এসকিউএল জানি (বেশ ভাল) এবং সত্যই আমার ডিবি থেকে "বিমূর্ত" হতে চাই না। আমি বেশিরভাগ সময় খুঁজে পাই, আমার অ্যাপ্লিকেশনগুলি ডিবি ভিউগুলি ব্যবহার করছে যেখানে আমি বেশিরভাগ ব্যবসায়িক যুক্তি সজ্জিত করি। আমি সঠিকভাবে স্তরযুক্ত ডিএওগুলিতে জেডিবিসিটেম্পলেট বাস্তবায়ন করেছি। এটি "পরিষ্কার" বোধ করে এবং সর্বাধিক বয়লারপ্লেট কোডটি জেডিবিসিটিম্পলেট দ্বারা গোপন করা হয় (এবং এটি অনলাইন ডকুমেন্টেশনগুলি ওআরএম স্টাফের চেয়ে অনেক বেশি ভাল বলে মনে হয়)। হাইবারনেটের মতো কিছু ব্যবহার করার ক্ষেত্রে আমি সীমিত সময় পেয়েছি, এটি যখন কাজ করেছিল তখন এটি আমার কিছুটা সময় বাঁচায় ... তবে যখন এটি সঠিকভাবে কাজ করে না, আমার "ডাব্লুটিএফ" ডিবাগিংয়ের দিনগুলি ব্যয় হয়েছিল। জেডিবিসি টেম্পলেট ডিএও ইমপ্লাগুলি ডিবাগ করার জন্য আমাকে আর 20 মিনিটের বেশি বেশি সময় ব্যয় করতে হয়নি। আমি মনে করি কীগুলি, যেমন অন্যেরা উল্লেখ করেছেন, আপনি এসকিউএল / স্কিমা ডিজাইনের সাথে কতটা আরামদায়ক


49

আমি @ টিমোর সাথে একমত কেবলমাত্র অন্য অন্তর্দৃষ্টি আমি যুক্ত / প্রসারিত করব হ'ল ওআরএম এর কাছে আপনার ডেটাতে খাঁটি এসকিএল অ্যাক্সেস থেকে আলাদা শব্দার্থক শব্দ রয়েছে।

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

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

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

আরও ভাল সমাধানটি ছিল সহজভাবে jdbc ভিত্তিক ক্রিয়াকলাপগুলি ব্যবহার করা এবং নতুন সারিগুলি তৈরি করার জন্য 'নির্বাচন মাধ্যমে সন্নিবেশ করানো' sql কলগুলি। এটি দ্রুত ছিল, কোডটি সহজ ছিল।

অন্যটি বিবেচনার বিষয় হ'ল আপনি জেডিবিসি-তে স্বাচ্ছন্দ্য বোধ করছেন, এবং সময়সীমা রয়েছে, আপনাকে ওআরএম ব্যান্ডওয়্যাগনে ঝাঁপিয়ে পড়তে হবে না। স্প্রিং জেডিবিসিটাইপলেট ক্লাসগুলি অত্যন্ত শক্তিশালী এবং সহায়ক। কখনও কখনও কাজের জন্য সেরা সরঞ্জামটি আপনি জানেন। আপনার নিজেকে ওআরএমের সাথে পরিচিত করা উচিত, তবে উচ্চ প্রত্যাশা সহ কোনও প্রকল্পের জন্য অগত্যা। শিখার মতো অনেক কিছুই আছে এবং এটি তুচ্ছ নয় - সত্যিই আপনি জেডিবিসি বনাম ওআরএম ব্যবহারের পছন্দে অন্য একটির সাথে জটিলতার একটি সেট বাণিজ্য করছেন।


9
শেষ বিবৃতি জন্য +1। এটি সাধারণভাবে jdbc বনাম orm এর মধ্যে সিদ্ধান্ত এবং জেপিএ বনাম জেডিবিসিটাইপলেট সম্পর্কিত নয় not
পারভেজ

4
মেমরির পদচিহ্ন সম্পর্কে কী? জেডিবিসিটিম্পলেট এবং স্প্রিং-ডেটা-জেপির মধ্যে কোনও বড় পার্থক্য আছে? (হাইবারনেট সহ আমি অনুমান করি)
রেজারটি

36

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

@Repository
public class FooRepository
{
    @PersistenceContext
    private EntityManager entityManager;

    @Autowired(required = true)
    private JdbcTemplate jdbcTemplate;

    public void saveFoo(Foo foo)
    {
         this.entityManager.persist(foo);
    }

    public List<SomeReportPojo> getSomeReport()
    {
         return this.jdbcTemplate.queryForList("SELECT .. ",SomeProjectPojo.class); 
    }
}

স্প্রিংয়ের দুর্দান্ত জিনিসটি হ'ল জেপিএ ব্যতিক্রমগুলি থেকে বসন্ত দাও ব্যতিক্রমী শ্রেণিবদ্ধতা জেপিএ এবং জেডিবিসিটাইপ্লেট উভয়ের সাথেই কাজ করে। সুতরাং জেপিএ ব্যবহার করুন যখন এটি বোধগম্য হয় এবং jdbcTemplate যখন তা বোধগম্য হয়।


20
লাইনে উচিত getSomeReport()হবে this.jdbcTemplate. ...বদলে this.entityManager. ...?
জান জাইকা

এক্সএমএল ব্যবহার না করে কেবল টীকাগুলি ব্যবহার করার সময় আপনি জেডিবিসিটাইপলেট শিম কীভাবে ঘোষণা করবেন? এটি স্প্রিংয়ের মাধ্যমে স্বয়ংক্রিয়ভাবে করা হয় না: আমি NoSuchBeanDafinitionException পেয়েছি: প্রকারের কোন যোগ্য বিন নেই [org.springframework.jdbc.core.JdbcTemplate] পাওয়া গেছে
xian

5

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


4
শুভ দিন, আপনি দয়া করে 'হাইবারনেট জেডিবিসিটেমপ্লেট' স্পষ্ট করতে পারেন, এর অর্থ কী? হাইবারনেট এবং স্প্রিংয়ের সংমিশ্রণ জেডিবিসিটিম্প্লেট বা অন্য কিছু?
কুইজার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.