JavaRush /Kurslar /All lectures for UZ purposes /Ma'lumotlar bazasiga ulanish

Ma'lumotlar bazasiga ulanish

All lectures for UZ purposes
Daraja, Dars
Mavjud

3.1 Hibernate va ma'lumotlar bazasini bog'lash

Maven yordamida Hibernate-ni ilovamizga ulashni va annotatsiyalar yordamida jadvallarni sinflarga moslashtirishni o'rgandik. Endi navbatdagi savol tug'iladi - ma'lumotlar bazasidan ob'ektlarni qanday o'qib olish yoki ularni qanday saqlash kerak?

Shoshilmang. Avvalo uchta narsani o'rganishimiz kerak:

  • Ma'lumotlar bazasiga ulanishni sozlash
  • Hibernate-ni sozlash
  • EntityManager bilan ishlash

Hibernate dasturing bilan ma'lumotlar bazasi ishlashni to'liq yashiradi, lekin hech qanday muammolar bo'lmasligi uchun uni to'g'ri sozlash kerak. Bu bosqichni o'tkazib bo'lmaydi - aks holda Hibernate qaysi ma'lumotlar bazasiga ob'ektlarni saqlashni qanday biladi?

Hibernate-ni sozlash va unga ma'lumotlar bazasi haqida ma'lumot berishning uch usuli bor:

  • Properties-fayldan foydalanish
  • hibernate.cfg.xml faylidan foydalanish
  • Configuration bin metodlaridan foydalanish

Va menga eng ko'p oxirgi usul yoqsa-da, sen uchalasiga ham duch kelasiz, shuning uchun biz ularni hammasini shu yerda ko'rib chiqamiz.

3.2 Baza ma'lumotlarida avtorizatsiya

Eng muhimi – ma'lumotlar bazasiga ulanishdan boshlaymiz. Buning uchun Hibernate kerakli ma'lumotlar bazasida avtorizatsiyadan o'tishi uchun ma'lumotlarni ko'rsatishingiz kerak.

Properties Fayl Sozlamasi
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	

Bu sozlamalarni xml-fayl sifatida ham berish mumkin:

XML Boshliq Sozlamasi
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> 

Ikkala misolda ham bir xil sozlamalar va bir xil qiymatlar mavjud. Faqat birinchi misol ularni properties-fayl sifatida, ikkinchi esa xml-fayl sifatida taqdim etadi.

Ushbu sozlamalar uch guruhga bo'linadi:

  1. DBMS turini ko'rsating
    • Dialektni ko'rsating (DBMS turi), masalan, Oracle 9.0
    • Ushbu DBMS bilan ishlash uchun JDBC-drayver nomini ko'rsating
  2. Bazada avtorizatsiya uchun ma'lumotlarni ko'rsating
    • Base url
    • username
    • password
  3. Hibernate dvijokini sozlash
    • hibernate.show_sql — Hibernate konsolga bajarilgan barcha so'rovlarni ko'rsatadi
    • hbm2ddl.auto — kerak bo'lsa, Hibernate ma'lumotlar bazasining tuzilishini o'zgartiradi

Sizda konfiguratsiyani berishning uchinchi usuli ham bor — binalar orqali. Odatda u Spring bilan birga ishlatiladi, shuning uchun biz uni SpringFramework-ni o'rganayotganda ko'rib chiqamiz.

3.3 SessionFactory olish

Keyingi bosqich - bu SessionFactory ob'ektini olish. Buni qilishning bir necha yo'li bor:

Birinchi usul - hibernate.properties faylini foydalanamiz.

Buning uchun shunday kod yozishingiz kerak:


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

Agar joriy loyihaning direktoriya ichida hibernate.properties fayli topilmasa, istisno paydo bo'ladi.

Ikkinchi usul - hibernate.cfg.xml yordamida konfiguratsiya.


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

Agar siz ushbu kodni yozsangiz, hibernate.cfg.xml fayli sozlamalar manbai sifatida ishlatiladi. Agar bunday fayl topilmasa, buildSessionFactory() usuli istisno chiqaradi.

Uchinchi usul - konfiguratsiya faylini qo'lda belgilash.

Ba'zida ishlab chiqish jarayonida test ma'lumotlar bazasiga o'tish yoki baza bilan ishlash uchun boshqa ba'zi sozlamalarni o'zgartirish zarurati tug'iladi, buning uchun konfiguratsiya faylini qo'lda belgilash mumkin:


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

To'rtinchi usul - maxsus hibernate.properties faylidan foydalanamiz:


ClassLoader classLoader = Thread.currentThread().getClassLoader();
 
Properties properties = new Properties();
properties.load(classLoader.getResourceAsStream("hibernate-dev.properties"));
 
SessionFactory sessionFactory = new Configuration()
            .addProperties(properties)
            .buildSessionFactory();

Va nihoyat, kerakli parametrlarni bevosita kodga qo'shish mumkin:


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 Entity sinflarni qayerdan qidirishni ko'rsatish

Ammo bu hali hammasi emas. Biz Hibernate-da SessionFactory ob'ektini sozlaganimizda, bu SessionFactory ma'lumotlar bazasida barcha zarur jadvallarning kerakli turdagi ustunlar bilan mavjudligini tekshiradi.

Va SessionFactory buni bajara olishi uchun unga ma'lumotlar bazasi bilan mos keladigan entity-sinflar ro'yxatini berish kerak.

Entity sinflar ro'yxatini uch yo'l bilan berish mumkin:

Birinchi usul. hibernate.cfg.xml ga quyidagi ko'rinishda qator qo'shing:


<mapping class="sinflarning to'liq nomi" />
        

Misol:


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

Ikkinchi usul. Configuration ob'ektida addAnnotatedClass() usulini chaqirish. Misol:


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

Agar sinflar ko'p bo'lsa, ularni butun paketlar bilan qo'shish mumkin:


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

3.5 Yakuniy misol

Biz SessionFactory ob'ektini qanday sozlashni o'rganganimizdan so'ng, uni ishlatadigan kodni yozamiz.

U uchta metoddan iborat bo'ladi:

  1. Hibernate-ni sozlash
  2. Ma'lumotlar bazasidan barcha xodimlarni olish metodi
  3. Yangi xodimni bazaga saqlash metodi

Ushbu kodning shabloni taxminan ko'rinadi:


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();
     	}
   }
}

Bazaga so'rov qilishdan oldin alohida sessiya yaratish kerak. Agar so'rovlar bog'langan bo'lsa, ular bitta sessiyada bajarilishi mumkin. Agar so'rovlar bog'lanmagan bo'lsa (va ular orasida bir necha daqiqa o'tishi mumkin bo'lsa), ular uchun o'z sessiyalarini qilish kerak.

Agar siz bazadan ma'lumotlarni o'qimoqchi bo'lsangiz yoki murakkab so'rovni bajarmoqchi bo'lsangiz, avval Query ob'ektini yaratib, o'zingizning so'rovingizni bajarishingiz kerak bo'ladi.

Bundan tashqari, har bir bazaga so'rov o'zining alohida tranzaksiyasida bajariladi. Uni oching, kerakli operatsiyalarni bajaring va keyin yopishingiz kerak (commit qilish).

Keyingi lektsiyalarda biz bu hammasi qanday ishlashini batafsilroq ko'rib chiqamiz.

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION