ورود

View Full Version : مزایای Hibernate و امثال اینا ...



L u k e
چهارشنبه 08 دی 1389, 19:58 عصر
این Hibernate چه مزیتی نسبت به JDBC داره ؟
من شنیدام سرعتی بالاتری داره نسبت به JDBC در بعضی از کارها مانند جستجو ( از الگورتیم های خاصی استفاده می کنه )
واقعیت داره ؟

h.frend
چهارشنبه 08 دی 1389, 21:34 عصر
تبدیل مدل رابطه ای بانک اطلاعاتی به شئ گرایی، امکانات کش،عدم وابستگی به بانک اطلاعاتی، افزایش کارائی برنامه نویس و .....

javaphantom
پنج شنبه 09 دی 1389, 09:05 صبح
خوب ببین بزار اینطور بریم جلو که جاوا یک زبان شی گراست. یعنی اینکه hello world که می خوای بنویسی باید class تعریف کنی از کلاس instance بگیری و یک object تحویل جامعه بدی. این مسئله همه بصورت یک اصل یک قانون برای زبانهای خالص شی گرا وجود داره. این مقدمه رو گفتم که برم سر سوال شما که خوب ما وقتی از jdbc داریم استفاده می کنیم خیلی مسائل رو باید خودمون مدیریت کنیم و همچنین علاوه بر مدیریت باید دقت هم بکنیم. مثل هندل کردن exception ها مثل transaction ها و از طرفی هم باید کلی کار دیگه بکنیم که رکودهای گرفته شده رو تبدیل به Object کنیم. چون جاوا فقط Object می شناسه.
مدیریت و از همه مهمتر دقت برای کار develop خیلی زمان بر و از دست دادن زمان یعنی ریسک و ریسک یعنی از دست دادن پول و در نهایت خود پروژه. وجود یک ابزار یک نرم افزار یک فکر یک برنامه کاربردی یک فریم ورک هر چی که بتونه این ریسک رو برای ما کاهش بده و استفاده رو راحتر کنه خیلی سودمند هست و بدرد بخور.

داستان ORM یا همان Object Relational Mapping دقیقا با این فکر اومد جلو یک مشکلات و ریسکهای همین قسمت رو مدیریت کنه. این ORM ها چیزی فراتر از JDBC نیستند. خودشون هم دارن از JDBC یا یک لایه بالاتر استفاده می کنند. اما درست که ممکن هست دست و پای developer رو ببنده اما در عوض بقدری سود و مزیتها داره که آدم می تونه روی این ORM ها حساب باز کنه و بدی هاشو بی خیال بشه و از خوبیهاش استفاده کنه.

در پست قبلی
تبدیل مدل رابطه ای بانک اطلاعاتی به شئ گرایی، امکانات کش،عدم وابستگی به بانک اطلاعاتی، افزایش کارائی برنامه نویس و .....
به نکات خیلی قشنگی اشاره کردن که این ORM چون کاملا فکر Object Oriented ی داره نه database ی بخاطر همین خیلی هم طرفتدار پیدا کرده

L u k e
پنج شنبه 09 دی 1389, 20:07 عصر
خیلی ممنون از توضیحات کاملتون
یه سرچی کردم یه آموزش درباره ی پیاده سازی این مبحث پیدا کردم یه چند تا مشکل واسم پیش آومده
به فرض من می خوام بر روی یه جدول با مشخصات زیر عمل Insert رو انجام بدم
نام جدول Stduent ستون ها : Id,Name,Family

بانک هم MySql ه
یه سوال دیگه چه lib هایی رو باید به پروژه Add کنیم ؟

خب حالا کلاس مون که این شکلی می شه

public class Student {
int _Id;
String _Name;
String _Family;

public int getId()
{
return _Id;
}
public void setId(int Id)
{
_Id = Id;
}

public String getName()
{
return _Name;
}
public void setName(String Name)
{
_Name=Name;
}




public String getFamily()
{
return _Family;
}
public void setFamily(String Family)
{
_Family = Family;
}
}
و فایل Xml مون هم این شکلی ؟


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="Student" table="student">
<id name="id" column="id">
<generator class="increment"/>
</id>
<property name="Name" column="Name"/>
<property name="Family" column="Family" />
</class>
</hibernate-mapping>

و فایل .cfg.xml



<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-configuration (View Source for full doctype...)>
- <!-- Generated by MyEclipse Hibernate Tools.
-->
- <hibernate-configuration>
- <session-factory>
<property name="connection.username">MySqlUserName</property>
<property name="connection.url">jdbc:postgresql://localhost:5432/Test</property>
<property name="dialect">?</property>
<property name="myeclipse.connection.profile">?</property>
<property name="connection.username">MySqlUserName</property>
<property name="connection.password">MySqlPass</property>
<property name="connection.driver_class">?</property>
<mapping resource="Student.hbm.xml" />
</session-factory>
</hibernate-configuration>

h.frend
پنج شنبه 09 دی 1389, 23:10 عصر
این مقاله رو بخون
http://www.laliluna.de/articles/first-hibernate-example-tutorial.html
موفق باشید

mazdadoost
یک شنبه 12 دی 1389, 12:16 عصر
دوست عزیز :
کلا ORM ها برای یک هدف واحد طراحی شدن Object/relational mismatch .
در این رابطه میتونید جستجو کنید.
Hibernate میتونه تا حدی در این رابطه کمک کنه و تا حدی نه
تجربه :
1-از اون جایی که Orm روی لایه JDBC میشینه میتونه کارایی برنام رو کم کنه این برای تمام ORM ها مشترکه منتها چند مطلب میتون به ORM کمک کنه تا در عمل از JDBC سریعتر و قابل اعتماد تر بشه
- میدونیم که n عدد RDBMS داریم و هر کدوم برای اینکه بهترین کارایی رو چه در DML و چه در DDL داشته باشند علاوه بر اینکه بنا بر پارامتر های پیکربندی Hint های غیر استاندارد و حتی زبان اختصاصی مخصوص به خودشون و.... کلی مسائل دیگه نیاز یه تخصص زیادی برای اشراف به یک بانک اطلاعاتی خاص نیاز این یعنی علاوه بر نیروی کار ماهر در اون زمینه( Oracle DBA -MS SQL admin -SQL developer -PL/SQL-T-Cat SQL -MySQL Expert-,,,,,,) احتمال خطا در این موارد میتونه حسابی کارایی برنامه رو کاهش بده .
در Hibernate یا سایر ORM ها این مسئله با ارائه Dialect های مختلف برای سیستم های مختلف تا حد زیادی حل شده که به ما اجازه میده علاوه بر کاهش نیروی متخصص مورد نیاز خطای کمتر انسانی رو در این زمینه داشته باشیم.
2-شما میتونید سیاست هایی رو برای DAL خودتون طراحی کنید که نیازی به کد نویسی ندارند .
مثلا جایی از برنامه که با دستورات Select درگیره(گزارشات)میتونه گزینه خوبی برای انواع کش ها باشه و این با Config و نه Coding انجام میشه و بعدا هم میتونه با یک کشینگ دیگه عوض شه (چون سیستم های کشینگ میتونن Plug بشند در Hibernate .این یعنی وقتی یک Query دارید که 3 GB اطلاعات واکشی میکنه میتونید با Terracotta یک کش Distributed داشته باشید که کدی براش ننوشتید! ) این سیاست ها رو با عملیاتی شدن برنامه و تغیر نیاز ها میتونید بدون دستکاری برنامه و فقط با کانفیگ تغیر بدین. و وقتی در یک محیط عملی قرار گرفتید میفهمید که این یعنی نفس کشیدن با آرامش بیشتر.
3-Hibernate به ما این امکان رو میده که بعد از آنالیز مدل برنامه به سرعت اونرو از نمودار های ER مفهومی (نمودار هایی که روی کاغذ کشیدیم یا کلاس دیاگرام های UML ی که در برنامه UML مورد علاقمون طراحی کردیم ) به اشیاء مورد نظرمون در XML (که اون هم Object Friendly هست) نگاشت کنیم. و به Hibernate اجازه بدیم کل ساختار (قسمتی از Schema )رو با DDL برامون بسازه با هر تغیری در آنالیز برنامه این تغیرات رو سریعا در بانک منعکس کنیم این یعنی Prototyping FastوFast Re factor و در نهایت Agile !
4-Hibernate حالا یک JPA خوب هم هست . شما میتونید کدتون رو هم برای Managed ENV و Unmanaged ENV به یک شکل بنویسید.
5-در کنار این ویژگی ها ی خوب شما باید چیز های جدیدی یاد بگیرید مثلا HQL-Criteria و حتی زیر ساخت های عملی Hibernate که میتونه وقت گیر باشه و این یعنی هزینه زمانی که ممکنه به عنوان یک تیم یا شخص نتونید این هزینه رو برای ریئس یا کارفرماتون توجیه کنید.
6- و یکی از عیوب Hibernate و هر ORM دیگه ای که در اصل به RDBMS مربوط میشه مدیریت نسبتا ضعیف مدل هایی با اشیاء سهمگین هست!یعنی چی !؟

فرض کنید شما اشیایی دارید با 2000 خصوصیت که هر خصوصیت یک شی هست و اون شی هم چند خصوصیت داره و اون خصوصیات هم خصوصیت هایی دارند . جدای از حجم کار در نگاشت این اشیاء به مدل رابطه ای و واکشی و یا تغیر ات که پیچیدگی زیادی رو به ORM تحمیل میکنند فرض کنید شما برای تغییر یک خصوصیت Event ی (تریگری ) دارید که سایر اشیاء و خصوصیات را بروز کند . این یعنی تعداد بسیار زیادی Triger که میتواند در عمل به سرعت Database شما را حتی در یک محیط کلاستر شده Down کند.

در این موارد استفاده از دیتابیس های Pure Object Oriented میتواند کمک کننده باشد. مثلا.Versant!

مثالی از این دست نرم افزار های شرکت Siemens میباشد که برای کار در صنعت (روبوتیک -اتوماسیون ووو) یا پزشکی (Medical Imagin ) از Versant استفاده می کنند.

ببخشید که کشدار شد.
موفق باشید.