3.1 হাইবারনেট এবং ডেটাবেস লিঙ্ক করা

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

এত দ্রুত নয়। প্রথমত, আপনাকে আরও তিনটি জিনিস মোকাবেলা করতে হবে:

  • একটি ডাটাবেস সংযোগ কনফিগার করা হচ্ছে
  • হাইবারনেট সেট আপ করা হচ্ছে
  • EntityManager এর সাথে কাজ করা

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

হাইবারনেট কনফিগার করা যায় এবং তিনটি উপায়ে ডাটাবেস তথ্য দেওয়া যায়

  • বৈশিষ্ট্য ফাইল ব্যবহার করুন
  • hibernate.cfg.xml ফাইল ব্যবহার করুন
  • কনফিগারেশন বিন পদ্ধতি ব্যবহার করুন

এবং যদিও আমি শেষটি সবচেয়ে বেশি পছন্দ করি, আপনি অবশ্যই তিনটির মুখোমুখি হবেন, তাই আমরা এখানে তিনটি বিশ্লেষণ করব।

3.2 ডাটাবেসে অনুমোদন

সবচেয়ে গুরুত্বপূর্ণ - ডাটাবেস সংযোগ দিয়ে শুরু করা যাক। এটি করার জন্য, আপনাকে ডেটা সরবরাহ করতে হবে যাতে হাইবারনেট পছন্দসই ডাটাবেসে লগ ইন করতে পারে।

বৈশিষ্ট্য ফাইল কনফিগারেশন
hibernate.properties
hibernate.dialect= org.hibernate.dialect.Oracle9Dialect
hibernate.connection.driver_class= oracle.jdbc.driver.OracleDriver 
hibernate.connection.url= jdbc:oracle:thin:@localhost:1521:supershop
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=update

একই সেটিংস একটি xml ফাইল আকারে সেট করা যেতে পারে:

XML ভিত্তিক কনফিগারেশন
hibernate.cfg.xml

<hibernate-configuration>	
	<session-factory>	
        	
    	<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>  	
    	<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 	
    	<property name="connection.url">jdbc:oracle:thin:@localhost:1521:supershop</property>  	
    	<property name="connection.username">root</property>  	
    	<property name="connection.password">secret</property>
    	<property name="hibernate.show_sql ">true</property>        
    	<property name="hbm2ddl.auto">update</property> 	
     	
	</session-factory>	
</hibernate-configuration> 

উভয় উদাহরণে, আমরা একই মান সহ একই সেটিংস দেখতে পাই। এটি ঠিক যে প্রথম উদাহরণটি তাদের একটি বৈশিষ্ট্য ফাইল হিসাবে উপস্থাপন করে এবং দ্বিতীয়টি একটি xml ফাইল হিসাবে ।

এই সেটিংস তিনটি গ্রুপে বিভক্ত:

  1. DBMS এর ধরন উল্লেখ করুন
    • উপভাষাটি নির্দিষ্ট করুন (DBMS প্রকার), উদাহরণস্বরূপ, Oracle 9.0
    • এই DBMS এর সাথে কাজ করার জন্য JDBC ড্রাইভারের নাম উল্লেখ করুন
  2. ডাটাবেসে অনুমোদনের জন্য ডেটা নির্দিষ্ট করুন
    • ডাটাবেস ইউআরএল
    • ব্যবহারকারীর নাম
    • পাসওয়ার্ড
  3. হাইবারনেট ইঞ্জিন কনফিগার করা হচ্ছে
    • hibernate.show_sql- হাইবারনেট কনসোলে যে সমস্ত অনুরোধ এক্সিকিউট করে তাতে ডুপ্লিকেট করবে
    • hbm2ddl.auto- প্রয়োজনে হাইবারনেট ডাটাবেস গঠন পরিবর্তন করবে

কনফিগারেশন সেট করার একটি তৃতীয় উপায় আছে - বিনের মাধ্যমে। এটি সাধারণত স্প্রিং এর সাথে ব্যবহার করা হয়, তাই আমরা যখন স্প্রিংফ্রেমওয়ার্ক শিখব তখন আমরা এটি দেখব।

3.3 সেশনফ্যাক্টরি পান

পরবর্তী ধাপ হল SessionFactory অবজেক্ট পাওয়া। এই কাজ করার বিভিন্ন উপায় আছে:

প্রথম উপায় হল hibernate.properties ফাইলটি ব্যবহার করা

এটি করার জন্য, আপনাকে কেবল নিম্নলিখিত কোডটি লিখতে হবে:

SessionFactory sessionFactory = new Configuration().buildSessionFactory();

যদি hibernate.properties ফাইলটি বর্তমান প্রজেক্ট ডিরেক্টরিতে না পাওয়া যায়, একটি ব্যতিক্রম নিক্ষেপ করা হবে।

দ্বিতীয় উপায় হল hibernate.cfg.xml ব্যবহার করে কনফিগারেশন

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

আপনি যদি এই ধরনের কোড লেখেন, তাহলে hibernate.cfg.xml. যদি এই ধরনের কোন ফাইল পাওয়া না যায়, পদ্ধতিটি buildSessionFactory()একটি ব্যতিক্রম নিক্ষেপ করবে।

তৃতীয় উপায় হল কনফিগারেশন ফাইল ম্যানুয়ালি সেট করা

কখনও কখনও উন্নয়ন প্রক্রিয়া চলাকালীন এটি একটি পরীক্ষার বেসে স্যুইচ করা বা বেসের সাথে কাজ করার জন্য কিছু অন্যান্য সেটিংস পরিবর্তন করা প্রয়োজন, এর জন্য আপনি কনফিগারেশন ফাইলটি ম্যানুয়ালি সেট করতে পারেন:

SessionFactory sessionFactory = new Configuration().configure("hibernate-dev.cfg.xml").buildSessionFactory();

পদ্ধতি চার - আমরা একটি কাস্টম hibernate.properties ফাইল ব্যবহার করি:

ClassLoader classLoader = Thread.currentThread().getClassLoader();

Properties properties = new Properties();
properties.load(classLoader.getResourceAsStream("hibernate-dev.properties"));

SessionFactory sessionFactory = new Configuration()
            .addProperties(properties)
            .buildSessionFactory();

এবং অবশেষে, আপনি কোডে সরাসরি সমস্ত প্রয়োজনীয় পরামিতি সেলাই করতে পারেন:

Properties properties = new Properties();
properties.put(Environment.DRIVER, "com.mysql.jdbc.Driver");
properties.put(Environment.URL, "jdbc:mysql://localhost:3306/supershop");
properties.put(Environment.USER, "root");
properties.put(Environment.PASS, "password");

SessionFactory sessionFactory = new Configuration()
            .setProperties(properties)
            .buildSessionFactory();

3.4 এন্টিটি ক্লাস কোথায় দেখতে হবে তা উল্লেখ করুন

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

এবং সেশনফ্যাক্টরি এটি করতে সক্ষম হওয়ার জন্য , এটিকে সত্তা ক্লাসের একটি তালিকা পাস করতে হবে যা এটি ডাটাবেসে ম্যাপ করতে হবে।

সত্তা ক্লাসের তালিকা পাস করার তিনটি উপায় রয়েছে:

পদ্ধতি এক. hibernate.cfg.xmlএকটি লাইন যোগ করুন যেমন :

<mapping class="class-qualified-name" />

উদাহরণ:

<mapping class="com.codegym.data.User" />
<mapping class="com.codegym.data.Employee" />
<mapping class="com.codegym.data.Task" />

পদ্ধতি দুই. কনফিগারেশন অবজেক্টে পদ্ধতিটি কল করুন addAnnotatedClass()। উদাহরণ:

SessionFactory sessionFactory = new Configuration()
   	.configure()
   	.addAnnotatedClass(com.codegym.data.User.class)
   	.buildSessionFactory();

যদি অনেকগুলি ক্লাস থাকে তবে আপনি সেগুলি পুরো প্যাকেজে যুক্ত করতে পারেন:

SessionFactory sessionFactory = new Configuration()
   	.configure()
   	.addPackage("com.codegym.data")
   	.buildSessionFactory();

3.5 চূড়ান্ত উদাহরণ

এখন যেহেতু আমরা SessionFactory অবজেক্ট কনফিগার করতে শিখেছি, আসুন কোডটি লিখি যা এটি ব্যবহার করবে।

এটি তিনটি পদ্ধতি নিয়ে গঠিত হবে:

  1. হাইবারনেট কনফিগার করা হচ্ছে
  2. পদ্ধতি যা ডাটাবেস থেকে সমস্ত কর্মচারী পায়
  3. পদ্ধতি যা একটি নতুন কর্মচারীকে ডাটাবেসে সংরক্ষণ করে

এই কোড টেমপ্লেট এই মত কিছু দেখতে হবে:

class EmployeeManager {
    private SessionFactory sessionFactory;

    public void class init() {
    	this.sessionFactory = new Configuration()
        	.configure()
        	.buildSessionFactory();
   }

   public List<Employee> getAllEmployes() {
         try (Session session = sessionFactory.openSession()) {
  	          Query<Employee> query = session.createQuery("from Employee", Employee.class);
    	        return query.list();
         }
   }

   public void addEmployee(Employee employee ) {
     	try (Session session = sessionFactory.openSession()) {
            Transaction transaction = session.beginTransaction();
       	    session.save(employee);
            transaction.commit();
     	}
   }
}

ডাটাবেসে একটি ক্যোয়ারী চালানোর আগে, আপনাকে একটি পৃথক সেশন তৈরি করতে হবে। যদি অনুরোধগুলি সম্পর্কিত হয়, তবে সেগুলি একই সেশনে কার্যকর করা যেতে পারে। যদি অনুরোধগুলি সম্পর্কযুক্ত না হয় (এবং তাদের মধ্যে কয়েক মিনিট পার হতে পারে), তাহলে তাদের নিজস্ব সেশন তৈরি করতে হবে।

আপনি যদি ডাটাবেস থেকে ডেটা পড়তে চান বা একটি জটিল ক্যোয়ারী চালাতে চান তবে আপনাকে প্রথমে একটি ক্যোয়ারী অবজেক্ট তৈরি করতে হবে এবং আপনার ক্যোয়ারী চালানোর জন্য এটি ব্যবহার করতে হবে।

এছাড়াও, ডাটাবেসের প্রতিটি ক্যোয়ারী তার নিজস্ব লেনদেনে সম্পাদিত হয়। আপনাকে এটি খুলতে হবে, প্রয়োজনীয় ক্রিয়াকলাপ সম্পাদন করতে হবে এবং তারপরে বন্ধ করতে হবে (কমিট)।

নিম্নলিখিত বক্তৃতাগুলিতে, আমরা আরও বিশদে বিশ্লেষণ করব কীভাবে এই সমস্ত কাজ করে।