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

دروس في الـ Hibernate باستخدام MySQL , Eclipse

رائج
بدأه Mahmoud Kelany في 5 يوليو 2011 · 56 رد · 9,478 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#26

السلام عليكم

قومت بعمل فئه تتعامل مع الHibernate

لكى توفر عمليه كتابه الكود وعمليه التنظيم

كان فى معظم شروحاتنا اننا نكتب كل شى فى داله الـ main لكن هذا ليس من مبادئ الـ OOP

لذا عملت الفئه HibernateBuilder لكى نتعامل معها وسوف تعجبكم كثيرا :)

اى اقتراحات او تعديلات او اى اخطاء يرجى ذكر ذلك :)

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
 * 
 * @author JKelany
 * 
 */
public class HibernateBuilder {
	private Session session;
	private AnnotationConfiguration config;

	/**
	 * <ol>
	 * <li>
	 * <u>configFileName</u> is the xml configuration file path it may take null
	 * the default name is <b>hibernate.cfg.xml</b> <br/>
	 * if the name is null or isEmpty or not end with extension xml <br/>
	 * the default name is used.</li>
	 * <li>
	 * <u>create</u> is boolean if <b>true</b> make tables <br/>
	 * 
	 * @see SchemaExport </li> <li>
	 *  	<u>cls</u> is array of classes <br/>
	 *  	that have @Entity Annotation <br/>
	 *  	it may be one or more. <br/>
	 *  	then get the current session</li>
	 * 
	 * @param configFileName
	 * @param create
	 * @param cls
	 * @see AnnotationConfiguration
	 */
	@SuppressWarnings("rawtypes")
	public void makeConfigurationProcess(String configFileName, boolean create,
			Class... cls) {
		AnnotationConfiguration config = new AnnotationConfiguration();
		for (Class c : cls) {
			System.out.println(c.getName());
			config.addAnnotatedClass(c);
		}
		if (configFileName != null && !configFileName.isEmpty()
				&& configFileName.endsWith("xml")) {
			config.configure(configFileName);
		} else {
			config.configure();
		}
		if (create) {
			new SchemaExport(config).create(true, true);
		}
		this.config = config;
		makeSession();
	}

	/**
	 * take the current session and return it
	 * 
	 * @see SessionFactory
	 * @see Session
	 * @return Session object
	 * @throws HibernateException
	 *         	, SessionException
	 */
	private Session makeSession() {
		if (config != null) {
			SessionFactory sessionFactory = config.buildSessionFactory();
			session = sessionFactory.getCurrentSession();
			if (session == null) {
				session = sessionFactory.openSession();
				if (session == null) {
					throw new SessionException(
							"problem : can't creating the session");
				}
			}
		} else {
			throw new HibernateException(
					"You should have AnnotationConfiguration refrence first \n"
							+ "by using the makeConfigurationProcess method");
		}
		return session;
	}

	/**
	 * take the classes that has @Entity Annotation <br/>
	 * and add them to the session <br/>
	 * to be added to the database after commit {@link #commit()}
	 * 
	 * @see Session
	 * @param objects
	 */
	public void save(Object... objects) {
		for (Object ob : objects) {
			getSession().save(ob);
		}
	}

	/**
	 * take the classes that has @Entity Annotation <br/>
	 * and delete them from the session <br/>
	 * to be deleted from the database after commit
	 * 
	 * @see Session
	 * @param objects
	 */
	public void delete(Object... objects) {
		for (Object ob : objects) {
			getSession().delete(ob);
		}
	}

	/**
	 * take the classes that has @Entity Annotation <br/>
	 * and update them in the session <br/>
	 * to be updated in the database after commit
	 * 
	 * @see Session
	 * @param objects
	 */
	public void update(Object... objects) {
		for (Object ob : objects) {
			getSession().update(ob);
		}
	}

	/**
	 * this is ask the session to begin the transaction process
	 * 
	 * @see Session
	 */
	public void beginTransaction() {
		getSession().beginTransaction();
	}

	/**
	 * to rollback for any saved , updated, deleted objects in the session
	 * 
	 * @see Session
	 */
	public void rollback() {
		getSession().getTransaction().rollback();
	}

	/**
	 * close the session
	 * 
	 * @see Session
	 */
	public void close() {
		getSession().close();
	}

	/**
	 * commit all objects that in the session<br/>
	 * to make impact in the database
	 * 
	 * @see Session
	 */

	public void commit() {
		getSession().getTransaction().commit();
	}

	/**
	 * return the current session
	 * 
	 * @see Session
	 * @return session
	 */
	public Session getSession() {
		if (session == null) {
			throw new HibernateException(
					"you should create your session first\n"
							+ "by calling makeConfigurationProcess method");
		}
		return session;
	}

	/**
	 * return the AnnotationConfiguration object<br/>
	 * that have all configured classes
	 * 
	 * @see AnnotationConfiguration
	 * @return AnnotationConfiguration object
	 */
	public AnnotationConfiguration getConfig() {
		return config;
	}
}

مثال عليها

سنستشهد بأخر درس موجود لدينا الا وهو الدرس السادس

public class TestManyToMany {
	public static void main(String[] args) {
		HibernateBuilder hibernateBuilder = new HibernateBuilder();
		hibernateBuilder.makeConfigurationProcess("hibernate.cfg.xml", true,
				Student.class, Courses.class);
		hibernateBuilder.beginTransaction();
		{
			Courses java = new Courses();
			java.setCourseName("JAVA");

			Courses oracle = new Courses();
			oracle.setCourseName("C++");

			Student jkelany = new Student();
			jkelany.setStudentName("Mahmoud Kelany");

			Student omnia = new Student();
			omnia.setStudentName("Omnia");

			Student rawan = new Student();
			rawan.setStudentName("Rawan");

			Student mai = new Student();
			mai.setStudentName("Mai");

			java.getStudents().add(jkelany);
			java.getStudents().add(rawan);
			java.getStudents().add(omnia);

			oracle.getStudents().add(mai);
			oracle.getStudents().add(jkelany);

			hibernateBuilder.save(mai, rawan, omnia, jkelany, oracle, java);
		}
		hibernateBuilder.commit();

	}
	}

Software Developer
Mahmoudkelany.com


 

#27

ذكرنا من قبل طريقه لعمل Compound Key

لكن هناك طريقتين

الطريقه 1 تم شرحها من قبل

الطريقه 2

import java.io.Serializable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;

@Entity
public class Student {

	private StudentPrimaryKey primaryKey;
	private String name;
	private String className;

	@EmbeddedId
	@GeneratedValue
	public StudentPrimaryKey getPrimaryKey() {
		return primaryKey;
	}

	public void setPrimaryKey(StudentPrimaryKey primaryKey) {
		this.primaryKey = primaryKey;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public static class StudentPrimaryKey implements Serializable {
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		private int studentId;
		private int deptId;

		public int getStudentId() {
			return studentId;
		}

		public void setStudentId(int studentId) {
			this.studentId = studentId;
		}

		public int getDeptId() {
			return deptId;
		}

		public void setDeptId(int deptId) {
			this.deptId = deptId;
		}
	}
}

public class TestStudentCompoundKey {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		HibernateBuilder hibernateBuilder = new HibernateBuilder();
		hibernateBuilder.makeConfigurationProcess(null, true, Student.class);
		hibernateBuilder.beginTransaction();

		Student.StudentPrimaryKey compoundKey = new Student.StudentPrimaryKey();
		compoundKey.setDeptId(10);
		compoundKey.setStudentId(1);

		Student jkelany = new Student();
		jkelany.setName("Mahmoud Kelany");
		jkelany.setClassName("3rd Year");
		jkelany.setPrimaryKey(compoundKey);

		hibernateBuilder.save(jkelany);

		hibernateBuilder.commit();

	}

}

الطريقه 3

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;

@Entity
@IdClass(Student.StudentPrimaryKey.class)
public class Student {

	private String name;
	private String className;
	private int studentId;
	private int deptId;

	@Id
	public int getStudentId() {
		return studentId;
	}

	public void setStudentId(int studentId) {
		this.studentId = studentId;
	}

	@Id
	public int getDeptId() {
		return deptId;
	}

	public void setDeptId(int deptId) {
		this.deptId = deptId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public static class StudentPrimaryKey implements Serializable {
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;
		private int studentId;
		private int deptId;

		public int getStudentId() {
			return studentId;
		}

		public void setStudentId(int studentId) {
			this.studentId = studentId;
		}

		public int getDeptId() {
			return deptId;
		}

		public void setDeptId(int deptId) {
			this.deptId = deptId;
		}
	}
}

public class TestStudentCompoundKey {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		HibernateBuilder hibernateBuilder = new HibernateBuilder();
		hibernateBuilder.makeConfigurationProcess(null, true, Student.class);
		hibernateBuilder.beginTransaction();

		Student jkelany = new Student();
		jkelany.setName("Mahmoud Kelany");
		jkelany.setClassName("3rd Year");
		jkelany.setDeptId(10);
		jkelany.setStudentId(1);

		hibernateBuilder.save(jkelany);
		hibernateBuilder.commit();
	}

}

بالتوفيق :)

Software Developer
Mahmoudkelany.com


 

#28

فاضل فيديو عن كيفيه التعامل مع قاعده البيانات اازاى احضر بيانات وازاى اعمل Query , HQL Query

وفيديو مشروع عن كيفيه استخدام الهيبرنيت فى المشاريع

والمكتبه الصغيره اللى عملتها JHibernate للتعامل مع الهيبرنيت اعتقد انك مش هتحتاج غيرها فالتعامل وهتوفر عليك كتير

كل هذه الاشياء جاهزه معموله بالفعل لكن باقى تسجيلها فيديو

و لكن تكمن المشكله فى الكسل ROFL.gif

مفيش حد عنده دوا للكسل blink.gif؟

Software Developer
Mahmoudkelany.com


 

#29

جازاك الله الف خيير على هالمجهود الرائع

وإحنا طامعين بكرمك اتكمل لنا الفديو بالشروحات تاعتك الرائعه

واتمنا لك التوفيق الدائم بحياتك الدنيا والآخره جازاك الله الف خيير :)

تم تعديل هذه المشاركة بواسطة عاشق الكون في 23 أغسطس 2011 في 14:46

#30
عاشق الكون كتب:

جازاك الله الف خيير على هالمجهود الرائع

وإحنا طامعين بكرمك اتكمل لنا الفديو بالشروحات تاعتك الرائعه

واتمنا لك التوفيق الدائم بحياتك الدنيا والآخره جازاك الله الف خيير :)

واياكم يارب العالمين

الحمدلله شغال فيه بس سجلت نصه بس

ربنا يسهل واسجل النص التانى

يااااارب

Software Developer
Mahmoudkelany.com


 

#31

جازاك الله الف خير

لكن بدي اسألك كيف بدنا نعمل

select

او السؤال بطريقه اخرى كيف بدنا نسترجع البيانات عن طريق ال Hibernate

؟؟؟؟؟؟؟؟؟؟ :sad:

#32
عاشق الكون كتب:

جازاك الله الف خير

لكن بدي اسألك كيف بدنا نعمل

select

او السؤال بطريقه اخرى كيف بدنا نسترجع البيانات عن طريق ال Hibernate

؟؟؟؟؟؟؟؟؟؟ :sad:

وهذا هو الدرس المتقبى

Software Developer
Mahmoudkelany.com


 

#33

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

ان شاء الله سننهى مسيرة شرح الHibernate مع الـ MySQL باستخدام الـ Eclipse

وسأضع ان شاء الله الدرس السابع والاخير - بدايتى مع الـ Hibernate باستخدام MySQL , Eclipse

سنتكلم اليوم عن كيفية استرجاع البيانات وعن الاستعلامات

لتحميل الكود والPresentation

Java Hibernate Seventh Lesson.zip

ولمشاهدة الفيديو

منتظر اى اسئله ان شاء الله

ان شاء الله ان كان هناك وقت ساقوم بشرح مشروع بسيط

الشرح سيكون عباره عن كيفيه الربط داخله وليس الـ GUI والاشياء الاخرى فقط طريقه ربطه مع الهيبرنيت

هذا هو المشروع لمن يريد الاطلاع عليه واى اسئله فيه ان شاء الله ساقوم بالاجابه عليها

Student Registeration Hibernate.zip

بالتوفيق واتمنى ان اكون وفقت فى شرح الكورس

ولا تنسونا من صالح دعائكم

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

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 25 أغسطس 2011 في 14:06

1

Software Developer
Mahmoudkelany.com


 

#34

لتحميل الدرس السابع والاخير من على الميديافير

http://www.mediafire.com/?flb4xc4ufdo319t

بالتوفيق ان شاء الله

Software Developer
Mahmoudkelany.com


 

#35

ولمشاهده الكورس كاملا من على الميديافير بالاكواد الخاصه بكل درس

http://www.mediafire.com/?wlzdtw4kd3h42

V1 تعنى الفيديو رقم 1

C1 تعنى الكود رقم 1 الخاص بالفيديو رقم 1

Software Developer
Mahmoudkelany.com


 

#36

السلام عليكم

جزاك الله خيرا على كل هدا الخير الدي تفيدنا به.

شرح جميل ل Hibernate , في اليوتوب الدروس غير مرتبة, لو سمحت هل يمكن ترقيمها ؟

نطمع أن تتفضل علينا بشرح Spring MVC

جزاك الله خيرا

#37
mlotfi كتب:

السلام عليكم

جزاك الله خيرا على كل هدا الخير الدي تفيدنا به.

شرح جميل ل Hibernate , في اليوتوب الدروس غير مرتبة, لو سمحت هل يمكن ترقيمها ؟

نطمع أن تتفضل علينا بشرح Spring MVC

جزاك الله خيرا

كنت انتوى ترتيبها ولكنها مرتبه فى اخر اسم الدرس مثلا first lesson و second lesson

وهكذا

لا اعلم شىء عن الـ Spring لكن كلمه MVC تشغالنى سابحث فى الموضوع

ولن ابخل بأى شىء استطيع تقديمه

see this

http://maestric.com/doc/java/spring

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 26 أغسطس 2011 في 05:11

Software Developer
Mahmoudkelany.com


 

#38

شكرااااااااااااااً كثييراً وبارك الله فيك يارب وجازاك الله الف خير

اتمنى ان تشرح لنا شوي عن EJB بنفس طريقتك الي شرحت لنا فيها ال Hibernate

اتنمى انت تبلغني عن ردك في شرح الموضوع ام لا لاني محتاجه اكثير

ومشكووووووووووووووور كثيييير

ودعيتلك من قلبي والله

سلمت يمناك

#39
عاشق الكون كتب:

شكرااااااااااااااً كثييراً وبارك الله فيك يارب وجازاك الله الف خير

اتمنى ان تشرح لنا شوي عن EJB بنفس طريقتك الي شرحت لنا فيها ال Hibernate

اتنمى انت تبلغني عن ردك في شرح الموضوع ام لا لاني محتاجه اكثير

ومشكووووووووووووووور كثيييير

ودعيتلك من قلبي والله

سلمت يمناك

اللهم امين يارب العالمين

اختى الكريمه صدقينى ان كنت اعلم عنها شىء او عن غيرها من الـ struts , Spring لقومت بذلك

يعنى حاولت فى الـ Struts , Spring لكن صراحه لا اعلم حتى الان ماذا يفعلون ROFL.gif

لكن بحاول ان شاء الله

حاليا لا استطيع :(

وشكرا جزيلا على الدعوه فانا فى امس الحاجه الى هذه الدعوات :) ( ولك مثلها ان شاء الله )

Software Developer
Mahmoudkelany.com


 

#40

برضو مشكور يا غالي

:)بس عنا طلب صغير منك إذا بدك تشرح مشروع المسويه بال JDBC اشرحلنا اياه على echipse يعني كمل على مابدأت عليه

وبس اتبدا فيه حطلنا اللينك هون على شان انتابع معك :) :wink: :wink: ومشكووووووووور يا غالي :wink:

#41
عاشق الكون كتب:

برضو مشكور يا غالي

:)بس عنا طلب صغير منك إذا بدك تشرح مشروع المسويه بال JDBC اشرحلنا اياه على echipse يعني كمل على مابدأت عليه

وبس اتبدا فيه حطلنا اللينك هون على شان انتابع معك :) :wink: :wink: ومشكووووووووور يا غالي :wink:

المشروع اللى هاشرحه ان شاء الله ان كان هناك وقت واشك فى ذلك هيكون على الهيبرنيت وليس JDBC

وبما انها كان مبرمج على netbeans IDE فمضطر انى اشرحه عليه وبعدين مش هتفرق كتير

الاكواد واحده ومفيش اى اختلافات

اللينك محطوط فى اخر مشاركه

Software Developer
Mahmoudkelany.com


 

#42

مشكور يا غالي

بس بدي اسأل إذا تم شرح موضوع EJB وخصوصاً session bean في المنتدى

يا ريت إذا كان موجود شرح تعطيني اللينك وبكون ممنونك لانه دورت عليه اكثير ما لفيته

:)

#43
عاشق الكون كتب:

مشكور يا غالي

بس بدي اسأل إذا تم شرح موضوع EJB وخصوصاً session bean في المنتدى

يا ريت إذا كان موجود شرح تعطيني اللينك وبكون ممنونك لانه دورت عليه اكثير ما لفيته

:)

لا اعتقد ذلك

Software Developer
Mahmoudkelany.com


 

#44

Thanks a lot eng\Mahmoud Kelany

I was really needing this tutorial

:D

#45

اريد ان اسأل بخصوص

hibernate annotations

ماهي ال annotations التي نستخدمها ل صوره ؟

وكيف تخزن بقاعده البيانات ؟

وكيف يتم استدعائها ؟

اتمنى الاجابه على اسئلتي

والمس منكم ان تزودونا بالبرنامج على هذه الموضوع ان وجد

جازاك الله الف خير

#46
عاشق الكون كتب:

اريد ان اسأل بخصوص

hibernate annotations

ماهي ال annotations التي نستخدمها ل صوره ؟

وكيف تخزن بقاعده البيانات ؟

وكيف يتم استدعائها ؟

اتمنى الاجابه على اسئلتي

والمس منكم ان تزودونا بالبرنامج على هذه الموضوع ان وجد

جازاك الله الف خير

من المستحب والافضل عدم وضع الصور فى قاعده البيانات

لان الصور تاخد مساحات كبيره مما تزيد من حجم قاعده البيانات

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

لكن من حيث التعامل مع الهيبرنيت

فهى تتعامل عن طريق الـ

@Lob Annotation

لكن طبعا الصورة بتكون عباره عن Bytes

فمثلا يكون التعامل هكذا

 @Lob  
public byte[] getFullCode() {
 	return fullCode; 
}

يتم تحويل الصورة الى bytes لكى يتم التعامل معها وتخزينها

وفى حاله الاسترجاع تعود لك على هيئة bytes ايضا تقوم ببنائها مره اخرى صورة

بم ان ذكرت ان هذا بيسبب الكثير من المشاكل منها كبر قاعده البيانات مما يؤدى الى صعوبة اصلاحها

فلذلك يفضل ان تخزن فقط مسار الصورة او اسمها فقط

وتقوم بوضع الصور فى مجلد خاص بك على المساحه التخزينية لك مثلا مجلد على الـ D

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

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

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 16 مارس 2012 في 12:26

1

Software Developer
Mahmoudkelany.com


 

#47

اشكرك جزييييييل الشكر

جزاك الله الف خير

انا هذه المعلومات تفيدني بالمشروع تاعي

والي هو عن ال face detection and recognition وهو قائم بالماتلاب

لكن هناك موقع بالمشروع انشأته بالجافا

وخصوصاً بال jsp وservlet

وانا كثييييييييييير استفدت منك ان شاء الله الله يجعلها بميزان حسناتك

جازاك الله الف خير

وبس عندي سؤال آخر إذا اردنا ان نخزن text في الداتا بيز شو نوع ال data member الي بدي استخدمه بدال ال string وهل في اله annotation خاص فيه؟

اذا يوجد اي برنامج عن face detection بالجافا مجرب يكون يعمل face detection لصوره فبكون ممنونك إذا توفر

وإذا في شرح الك عن HQL

جازاك الله الف خير

وان شاء الله موفق بمشروعك ياااااااااااارب

وان شاء الله يكون مشروع ممتاااز

مشكووووووووووووووووور

تم تعديل هذه المشاركة بواسطة عاشق الكون في 16 مارس 2012 في 13:49

#48
عاشق الكون كتب:

اشكرك جزييييييل الشكر

جزاك الله الف خير

انا هذه المعلومات تفيدني بالمشروع تاعي

والي هو عن ال face detection and recognition وهو قائم بالماتلاب

لكن هناك موقع بالمشروع انشأته بالجافا

وخصوصاً بال jsp وservlet

وانا كثييييييييييير استفدت منك ان شاء الله الله يجعلها بميزان حسناتك

جازاك الله الف خير

وبس عندي سؤال آخر إذا اردنا ان نخزن text في الداتا بيز شو نوع ال data member الي بدي استخدمه بدال ال string وهل في اله annotation خاص فيه؟

اذا يوجد اي برنامج عن face detection بالجافا مجرب يكون يعمل face detection لصوره فبكون ممنونك إذا توفر

وإذا في شرح الك عن HQL

جازاك الله الف خير

وان شاء الله موفق بمشروعك ياااااااااااارب

وان شاء الله يكون مشروع ممتاااز

مشكووووووووووووووووور

بالتوفيق ان شاء الله فى مشروعك

جزانا واياكم كل خير

التخزين فى قاعده البيانات بالنسبه للـ Text او Integer , double , .... ليس له اى annotation فقط بيكون بنوع الـ data typeاللى انت معرفه منه

بصراحه ليس لدى برنامج يتكلم عن face detection

بالنسبه لشرح الـ HQL

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html

بالتوفيق جميعا ان شاء الله

1

Software Developer
Mahmoudkelany.com


 

#49

مشكوووووووووووووور :)

#50
اقتباس

من المستحب والافضل عدم وضع الصور فى قاعده البيانات

لان الصور تاخد مساحات كبيره مما تزيد من حجم قاعده البيانات

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

هذه النقطة أنا لا أؤيدها بالمطلق بالعكس

تحياتي

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

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

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

728x90.png

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