الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الدرس الاول من دروس Hibernate

بدأه محمد ابراهيم في 11 أبريل 2008 · 25 رد · 12,116 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أخواني الاعزاء كما وعدتكم سابقا بالتطرق لموضوع Hibernate و Spring وكيفية استخدامها في برامج الجافا. سوف تكون البداية مع Hibernate.

الهايبرنت هي بيئة مبنية على الجافا عملها الاساسي الربط العلاقي بين الجداول لقاعدة البيانات. فكره هذه الاداة تقوم على انشاء الجدوال المطلوبه للبرنامج كــ Java classes. كل java class والتي تمثل جدول لقاعدة البيانات يجب انشاء ملف hbm.xml والذي يحتوي على تفاصيل الربط.

سوف نبدء بمثال بسيط , لكنه مهم في هذه المرحلة لفهم كيفية انشاء الكلاسات مع hbm.xml

المثال يقول على انشاء مثل جدول لحفظ الزبائن , بالاضافة كيفية انشاء هذا الجدول في قاعدة البيانات من خلال برنامج الجافا بالاضافة الى كيفية اضافة بيانات لهذا الجدول.

انشاء كلاس جدول الزبائن يكون كالتالي:

انشاء كلاس كجدول في الهايبرنت هو نفس انشاء اي كلاس في لي برنامج جافا فمثلا كلاس الزبائن سوف يظهر كالتالي:

يتطلب في البداية تعريف الحقول المطلوبه للجدول فمثلا لجدول الزبائن نريد الاسم الاول للزبون واسم العائلة والايميل. بعد ذلك اضافة متغيرات الحقول , ننشىء لكل متغير الدوال set و get . الكود التالي يوضح كيفية انشاء الكلاس:

package hibernate1.model;
import java.io.Serializable;
/**
 * User: Mohammed
  */
public class Customer implements Serializable
{
	private Long id;
	private int version;
	private String firstName;
	private String lastName;
	private String email;
	public Customer()
	{
	}
	public Customer(String firstName, String lastName,String email)
	{
		assert email != null;
		this.firstName = firstName;
		this.lastName = lastName;
		this.email = email;
	 }

	public Long getId()
	{
		return id;
	}

	@SuppressWarnings({"UNUSED_SYMBOL"})
	private void setId(Long id)
	{
		this.id = id;
	}

	public int getVersion()
	{
		return version;
	}
	public void setVersion(int version)
	{
		this.version = version;
	}
	public String getFirstName()
	{
		return firstName;
	}
	public void setFirstName(String firstName)
	{
		this.firstName = firstName;
	}
	public String getLastName()
	{
		return lastName;
	}
	public void setLastName(String lastName)
	{
		this.lastName = lastName;
	}
	public String getEmail()
	{
		return email;
	}

	public void setEmail(String email)
	{
		this.email = email;
	}

}

بعد انشاء الكلاس لجدول الزبائن يتطلب انشاء ملف الربط وهو hbm.xml لتلك الكلاس وهي كالتالي:

وهو ملف xml يحتوي على تفاصيل الكلاس الموجود بالاعلى

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
		  "-//Hibernate/Hibernate Mapping DTD//EN"
		  "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hibernate1.model">
	<class name="Customer" table="customers">

		<id name="id" column="customer_id">
			<generator class="sequence"/>
		</id>
		<natural-id>
			<property name="email" column="email"/>
		</natural-id>
		<version name="version" column="version"/>

		<property name="firstName" column="firstname" not-null="true"/>
		<property name="lastName" column="lastname" not-null="true"/>

	</class>
</hibernate-mapping>

ارفق لكم المثال كامل مضغوط ويحتوي على ملفات كاملة

مع العلم استخدمت قاعدة بيانات postgresql

بعد تنزيل البرنامج وتشغيله بواسطه netbeans تحتاج الى ضبط بيانات قاعدة بياناتك بالذهاب الى ملف hibernate.properties سوف تظهر لك اعدادت الهايبرنت الذي يهمنا هو

hibernate.connection.url=jdbc:postgresql://localhost:5432/hib1
hibernate.connection.username=ma
hibernate.connection.password=12345

قم بتغير هذه البيانات الى بياناتك

فمثلا

Hib1 هو اسم قاعدة البيانات

Ma اسم المستخدم

123456 كلمة السر

بعد اضافة بيانات قاعدة بياناتك

قبل تنفيذ البرنامج يتطلب منك اضافة ثلاث مكتبات لبرنامجك وهي مرفقه مع الموضوع.

اتمنى لكم التوفيق, حاولت قدر المستطاع ان يكون الموضوع واضح , وسوف احاول جهدي في المواضيع القادمة.

الدرس القادم عن كيفية انشاء وربط اكثر من كلاس

اخوكم محمد العضيب

Hibernate1.zip

libraries.zip

hibernate1.pdf

1
#2

بعد تنفيذ البرنامج سوف تجد ان الجدول custmer تم اضافه الى قاعدة البيانات بالاضافة الى اضافة بعض المدخلات لهذا الجدول

#3

هل يصير انشغل البرنامج على النتبينز؟؟ يعني اهو برنامج جافا عادي و الا ايش؟؟؟

و هل في اشياء نربطها باللغة قصدي بالكود نفسه

#4

شكرا جزيلا لك اخي على جهودك ...

و اذا كان هناك اسئلة بدائية جدا و تزعجك فلا احد سوف يلومك اذا قمت بتجاهلها تابع و انا سوف انظم المشاركة و احذف ما لايتعلق بها..

شكرا لك مرة اخرى

Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why

#5

اخت زينب بعد تنزيل ملفات الكود وتشغيلها في النتبينز يجب عليك ان تقومي في البداية بفتح ضغط ملف libraries.zip سوف تجدي ثلاث ملفات للمكتبات الملطوب للبرنامج , يجب اضافتها للمكتبة.

بعد كذا يجب عليك ضبط اعدادات قاعدة بياناتك وهي في ملف hibernate.properties

hibernate.connection.url=jdbc:postgresql://localhost:5432/hib1
hibernate.connection.username=ma
hibernate.connection.password=12345

يجب تغير اسم قاعدة البيانات الى قاعدة بياناتك وكذلك اسم المستخدم وكذلك كلمة السر

شاكر لك اخ رامي ردك , وفقك الله

تم تعديل هذه المشاركة بواسطة محمد ابراهيم في 11 أبريل 2008 في 11:19

#6

بارك الله فيك أخي محمد على هذه البداية السريعة و الرائعة ...

#7

أخوي أنا مبتدئة فالجافا

بس جبيت أعرف شو يعني

import java.io.Serializable;

شو يعني private Long id;

يعني نقدر نستخدم Int ليش استخدمت بدالها long ؟؟

و ليش استخدمت كلمة assert و ما استخدمت this في الكونستركتر

assert email != null;

و شو يعني هالسطر ؟؟ و علامة @

  @SuppressWarnings({"UNUSED_SYMBOL"})

آسفة بس و الله ابي اتعلم الجافا لانه تدريس الجافا عندنا غلط .. و هذا اول كورس لي أخذ جافا

و السموحة ع الاطالة

#8

لي بعض الإستفسارات اخي الكريم محمد :

1- من أين أحصل على قاعدة بيانات postgresql

اقتباس
اخت زينب بعد تنزيل ملفات الكود وتشغيلها في النتبينز يجب عليك ان تقومي في البداية بفتح ضغط ملف libraries.zip سوف تجدي ثلاث ملفات للمكتبات الملطوب للبرنامج , يجب اضافتها للمكتبة.

2- ماهي المكتبة التي يجب إضافة هذه الملفات إليها , ارجو الإجابة بنوع من التفصيل .

#9

اخت s.alqaydi بالنسبة لاسئلتك فهي كالتالي

بالنسبة للسؤال الاول عن :

import java.io.Serializable;

في الموضوع هذا شرح لذلك

/index.php?showtopic=124637

بالنسبة للسؤال الثاني

private Long id;

هو عبارة عن اي متغير كترقيم تلاقائي لجدول الزبائن

نعم تستطيعين استخدام int

بالنسبة للسؤاك الثالث

assert email != null;

عبارة عن التأكد من ان قيمة المتغير email ليست خالية , وبعدها استخدمت this.email = email;

بالنسبة لسؤالك الرابع

@SuppressWarnings({"UNUSED_SYMBOL"})

هذه الغرض من اخماد تحذيرات المكبيلر مثلا اذا استخدم UNUSED_SYMBOL هذا الامر ليس له علاقة بالهايبرنت , لذلك نستطيع ازالته , لكن كفره بسيطه عنه , SuppressWarnings يستطيع استخدامة لاخماد وايقاف التحذيرات التي تصدر من الكمبيلر , حيث يستطاع استخدمه قبل كل داله او كلاس او تعريف متغير.

اتمنى اني استطعت التوضيح بما فيه الكفاية

#10

بالنسبة للاخ MKSoft

شكرا على سؤالك بالنسبة لقاعدة بيانات postgres تستطيع تحميلها من http://www.postgresql.org/

المكتبات المطلوبة للبرنامج مرفقه في ملف libraries.zip في الرد الاول بعد تنزيل الملف وفك ضغطه تستطيع اضافتها الى برنامج بالذهاب الى projects في النتبينز وتضغط كلك يمين على اسم المشروع بعد ذلك properties ثم libraries ثم add Jar بعد ذلك اضف الثلاث ملفات

مع العلم انه تستطيع استخدام قاعدة بيانات mysql ولكن يجب عليك تغير اعدادت قاعدة البيانات في ملف hibernate.properties الى التالي:

hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost/trails
hibernate.connection.username=ma
hibernate.connection.password=12345
hibernate.dialect=org.hibernate.dialect.MySQLSQLDialect

jdbc:mysql://localhost/trails تغيرها الى قاعده بياناتك

ma اسم المستخدم لقاعدة البيانات

12345 كلمة السر

بالاضافة ممكن استخدام قاعدة بيانات اوراكل واللي يحتاج اعدادت اوراكل يعطيني خبر وانا سوف اضيفها ان شاء الله

وبالتوفيق

#11

بالنسبة لمستخدمي قواعد بيانات اوراكل 9i و 10g

hibernate.dialect=org.hibernate.dialect.Oracle9Dialect
hibernate.connection.driver_class=oracle.jdbc.OracleDriver
hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:XE
hibernate.connection.username=system
hibernate.connection.password=system

مع الانتباه الى تغير اسم قاعدة البيانات واسم المستخدم وكلمة السر الى بيانات قاعدة بياناتك

#12

ما معنى هذه الجملة

<natural-id>

لماذا قمت بالتالي

 String username = cfg.getProperty("hibernate.connection.username");
			String usernamepw = cfg.getProperty("hibernate.connection.password");
			cfg.setProperty("hibernate.connection.username", username);
			cfg.setProperty("hibernate.connection.password", usernamepw);

بالنسب لعملية assert

كنت أتوقع أن ترمي Exception في حالة كون البريد الإلكتروني = null

لكن هذا لم يحدث

أتمنى أن لا تنزعج مني أخي

فأنا أعمل منذ فترة على JBoss وهوه يستخدم هذه التقنية

لهذا أحاول أن أستفيد منك بقدر ما أستطيع

الله معك

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#13

اخي الغالي شكرا على اسئلتك

بالعكس سعيد جدا بالاسئلة لان هذه جزء من الشرح لانه صعب في البداية شرح كل التفاصيل , لكن طرح الموضوع , ومن ثم استقبال الاستفسارات يوض الموضوع اكثر

بالنسبة عن السؤال الاول عن <natural-id>

هو لانشاء حقل كمفتاح رئسي , في حالتنا هذه استخدمنا حقل email كمفتاح رئسيي للجدول , وسوف نحتاج هذا <natural-id> كثير حينما يكون لدينا اكثر من جدول ويكون لدينا اكثر من حقل كمفتاح رئسي وسوف نتطرق لذلك في درسنا القادم

السؤال الثاني

String username = cfg.getProperty("hibernate.connection.username");
			String usernamepw = cfg.getProperty("hibernate.connection.password");
			cfg.setProperty("hibernate.connection.username", username);
			cfg.setProperty("hibernate.connection.password", usernamepw);

هذا الاجراء يقوم باستدعاء اعدادات قاعدة البيانات مثل اسم المستخدم وكلمة السر وضبطها لمتغير Configuration حتى يتم استخدامها في جلسة الاتصال مع قاعدة البيانات.

assert يجب الانتباه انها ليست الزامية في مشروعنا هذا , لكن هي تضاف من الاشياء الجيدة التي يجب استخدمها من قبل المبرمج , حاول ان تذهب الى ملف المدخلات لبيانات الى جدول الزبائن والذي تجدها في الكلاس usecases وحاول ان تجعل قيمة الايميل لاحد الزبائن = null بعد ذلك نفذ البرنامج بعد ذلك سوف تلاحظ ان البرنامج يقوم برمي exception من خلال log

بالتوفيق

#14

ننتظر درسك القادم على أحر من جمر

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15

alaadiaa شاكر لك ردك , وباذن الله الدرس القادم هو الغاية من توضيح الهدف من الهايبرنت , وسوف نرى الكثير من الاشياء المدهشة التي نستطيع عملها من خلال هذه الاداة الرائعة

بالنسبة للاخوان اللذين لم يعمل معهم البرنامج بسبب نقص بعض المكتبات المطلوبة بالاستطاعة تحميل مكتبة الهايبرنت من http://www.hibernate.org/6.html حجم المكتبة مايقارب 24 ميجا

تم تعديل هذه المشاركة بواسطة محمد ابراهيم في 12 أبريل 2008 في 00:41

#16

السلام عليكم

تحياتي اليك أخي محمد .

بارك الله فيك على الدروس , ننتظر دروسك على أحر من الجمر .

لكن عندي بعض الأستفسارت .

1- أرجو منك شرح كود XML بنوع من التفصيل .

2- أنا قمت بتحميل قاعدة البيانات postgresql-8.3.1-1-binaries-no-installer , لكن لا اعرف كيف أشغلها ولا حت كيف استخدمها فأرجو منك ان تفسر ذلك .

3- هل هناك جدول مخزن في قاعدة البيانات postgresql اسمه Customer أم ماذا ؟؟؟ , و إن كان الجواب لا .. فكيف سيتم انشاءه , هل سيتم انشاءه اتوماتيكيا باستخدام XML ام ماذا ؟؟ ارجوا التوضيح و بارك الله فيك .

#17

للرفع

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#18

جميل 100% لقد أبلغت ان احتجتني أنا معك

image-27.gif

concepteur realisateur java j2ee

php5 and asp

#19

الله يبارك فيكم

اقتباس
جميل 100% لقد أبلغت ان احتجتني أنا معك

انا بحاجة الى معلومات اكثر بارك الله فيكم انا اعمل على Nhibernate

#20

ما الذي تعرفه أكثر عن الموضوع؟

هايبرنيت هي عبارة عن طبقة بين البرمجة وقواعد البيانات

تحجب عنك أي تفاصيل عن قاعدة البيانات

وتسمح لك بالتعامل مع البيانات ككائنات

وتقوم هي بحمل عبئ التخزين والحذف وإجراء العمليات المعقدة

يمكننا أن نعتبرها object/relational persistence and query service

كما أنها لديها لغة خاصة HQL وهي عبارة عن SQL محمولة portable

بمعنى أننا لو استبدلنا قاعدة البيانات فلن يتأثر البرنامج بأي شيء

جماعة أوراكل يقولون بأنها تبطئ قاعدة بياناتهم بشكل كبير

هي بالتأكيد تبطئ التعامل مع قاعدة البيانات لأنها طبقة وسيطة

بإمكانك الإطلاع على موقعهم وستجد معلومات أكثر في دليل الاستخدام الخاص بهم

أية أسئلة سأرى إن كان بإمكاني المساعدة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#21

السلام عليكم .

بوركت أـخي الكريم .

أتمنى من الأعضاء اعطائي روابط الدروس الأخرى ل hibernate و spring . لأني لم لأجدها .

و السلام .

#22

الأخ محمد إبراهيم لم يعد يتواجد هنا

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#23

السلام عليكم و رحمه الله و بركاته

الرجاء اعلامنا كيف تقوم بتنزيل hibernate و ربطها مع eclipse وبارك الله فيك

#24

اذهب إلى موقعهم hibernate.org

وقم بتنزيل آخر نسخة

قم بإضافة المكتبات .jar إلى المسار الخاص بك

قم بكتابة الشيفرة الموجودة هنا وشغل

تحياتي

1
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#25

شكراً جزيلاً على هذا الدرس الرائع لكن متى الدرس الثاني وهي ستضيفه هنا اضافه !

ارجو الرد !

وبارك الله فيكم :happy: :)

مواضيع مشابهة