هایبرنیت (جاوا): تفاوت میان نسخه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
جز تمیزکاری و اصلاح متن با استفاده از AWB
Rezabot (بحث | مشارکت‌ها)
جز ربات:زیباسازی+شابک+تمیز (۱۰.۵)
خط ۶: خط ۶:


هایبرنیت به هیچ وجه جایگزین [[رابط پایگاه داده جاوا]] (JDBC) نمی شود بلکه یک لایه بالاتر از و مبتنی بر ان است در واقع هایبرنیت رابطی است که به برنامه نویسان کمک می کند، بدون درگیر شدن با جزئیات یک پایگاه داده، تمام اعمال مربوط به ذخیره و بازیابی اشیا را مستقل از نوع پایگاه داده انجام دهند.
هایبرنیت به هیچ وجه جایگزین [[رابط پایگاه داده جاوا]] (JDBC) نمی شود بلکه یک لایه بالاتر از و مبتنی بر ان است در واقع هایبرنیت رابطی است که به برنامه نویسان کمک می کند، بدون درگیر شدن با جزئیات یک پایگاه داده، تمام اعمال مربوط به ذخیره و بازیابی اشیا را مستقل از نوع پایگاه داده انجام دهند.
==پایستاری ==
== پایستاری ==
هایبرنیت ابزار ذخیره اشیا جاوا را به طور شفاف فراهم آورده است. روابط بین اشیا از هر نوعی از جمله یک به یک و چند به چند هم توسط هایبرنیت پشتیبانی می شود. هایبرنیت قابلیت ذخیره و بازیابی مجموعه‌ها و گروههای داده در جاوا که معمولاً در Set و یا List ذخیره می شود، را نیز دارد. هایبرنیت قابلیت [[بارگیری دیرهنگام (نرم افزار)|بارگیری دیرهنگام]] مجموعه‌های مرتبط با یک شی خاص را دارد. این، رفتار پیش فرض در هایبرنیت ۳ است.
هایبرنیت ابزار ذخیره اشیا جاوا را به طور شفاف فراهم آورده است. روابط بین اشیا از هر نوعی از جمله یک به یک و چند به چند هم توسط هایبرنیت پشتیبانی می شود. هایبرنیت قابلیت ذخیره و بازیابی مجموعه‌ها و گروههای داده در جاوا که معمولاً در Set و یا List ذخیره می شود، را نیز دارد. هایبرنیت قابلیت [[بارگیری دیرهنگام (نرم افزار)|بارگیری دیرهنگام]] مجموعه‌های مرتبط با یک شی خاص را دارد. این، رفتار پیش فرض در هایبرنیت ۳ است.
==پیکره بندی و نگاشت==
== پیکره بندی و نگاشت ==
نگاشت کلاس‌های جاوا به جدولهای پایگاه داده به کمک یک یا چند فایل پیکره بندی با فرمت XML و یا از طریق [[حاشیه نویسی جاوا]] انجام می شود. این فایلها مشخص می‌کند هر عضو یک کلاس چگونه در جدول مربوط ذخیره شود.
نگاشت کلاس‌های جاوا به جدولهای پایگاه داده به کمک یک یا چند فایل پیکره بندی با فرمت XML و یا از طریق [[حاشیه نویسی جاوا]] انجام می شود. این فایلها مشخص می‌کند هر عضو یک کلاس چگونه در جدول مربوط ذخیره شود.


علاوه بر این فایل ها، برای پیکره بندی خود هایبرنیت نیاز به یک فایل پیکره بندی اصلی است. برخی از متغیرهایی که می توان در این فایل پیکره بندی (با نام پیش فرض hibernate.cfg.xml) مشخص کرد عبارتند از :
علاوه بر این فایل ها، برای پیکره بندی خود هایبرنیت نیاز به یک فایل پیکره بندی اصلی است. برخی از متغیرهایی که می توان در این فایل پیکره بندی (با نام پیش فرض hibernate.cfg.xml) مشخص کرد عبارتند از :

* hibernate.connection.driver_class- درایور مختص پایگاه داده که معمولاً با پسوند jar وجود دارد.
* hibernate.connection.driver_class- درایور مختص پایگاه داده که معمولاً با پسوند jar وجود دارد.
* hibernate.connection.url- آدرس سرور پایگاه داده
* hibernate.connection.url- آدرس سرور پایگاه داده
خط ۲۰: خط ۱۹:


امکان ترکیب همه اطلاعات مربوط به نگاشت کلاس‌ها و اطلاعات پیکره بندی هایبرنیت در یک فایل نیز وجود دارد.
امکان ترکیب همه اطلاعات مربوط به نگاشت کلاس‌ها و اطلاعات پیکره بندی هایبرنیت در یک فایل نیز وجود دارد.
==کلاس‌ها و رابط‌های اصلی==
== کلاس‌ها و رابط‌های اصلی ==
* رابط Session : اصلی‌ترین رابط برای ذخیره، بازیابی و یا به روز رسانی یک شی. برای انجام تمام اعمال هایبرنیت نیاز به یک شی از این نوع داریم.
* رابط Session : اصلی‌ترین رابط برای ذخیره، بازیابی و یا به روز رسانی یک شی. برای انجام تمام اعمال هایبرنیت نیاز به یک شی از این نوع داریم.
* رابط SessionFactory : یک برنامه مبتنی بر هایبرنیت برای تولید یک Session از SessionFactory استفاده می کند. به طور معمول برای کار با یک پایگاه داده تنها نیاز به یک SessionFactory است که از ان برای تولید هر تعداد Session استفاده می شود. از فایل پیکره بندی و یا حاشیه نویسی جاوا برای تولید یک SessionFactory از استفاده می کنیم.در کد زیر از فایل پیکره بندی hibernate.cfg.xml موجود در پوشه ریشه پروژه برای تولید یک SessionFactory استفاده می کنیم:
* رابط SessionFactory : یک برنامه مبتنی بر هایبرنیت برای تولید یک Session از SessionFactory استفاده می کند. به طور معمول برای کار با یک پایگاه داده تنها نیاز به یک SessionFactory است که از ان برای تولید هر تعداد Session استفاده می شود. از فایل پیکره بندی و یا حاشیه نویسی جاوا برای تولید یک SessionFactory از استفاده می کنیم.در کد زیر از فایل پیکره بندی hibernate.cfg.xml موجود در پوشه ریشه پروژه برای تولید یک SessionFactory استفاده می کنیم:
خط ۳۱: خط ۳۰:
<source lang=java5>Session session=factory.openSession();</source>
<source lang=java5>Session session=factory.openSession();</source>


==زبان پرس جوی هایبرنیت (HQL)==
== زبان پرس جوی هایبرنیت (HQL) ==
هایبرنیت قابلیت اجرای دستورات Sql را داراست با این حال برای راحتی بیشتر یک زبان شبیه Sql را با نام HQL پشتیبانی میکند. برای مثال دستور <code>from Product</code> تمام اشیا موجود در جدول مرتبط با کلاس <code>Product</code> در برنامه جاوا را بر می گرداند. معادل Sql این دستور <code>Select * from product_table</code> است.برای اجرای این دستور در یک برنامه در محیط جاوا استانداد کد زیر اجرا می شود:
هایبرنیت قابلیت اجرای دستورات Sql را داراست با این حال برای راحتی بیشتر یک زبان شبیه Sql را با نام HQL پشتیبانی میکند. برای مثال دستور <code>from Product</code> تمام اشیا موجود در جدول مرتبط با کلاس <code>Product</code> در برنامه جاوا را بر می گرداند. معادل Sql این دستور <code>Select * from product_table</code> است.برای اجرای این دستور در یک برنامه در محیط جاوا استانداد کد زیر اجرا می شود:
<source lang=java5>
<source lang=java5>
خط ۴۲: خط ۴۱:
</source>
</source>


==یکپارچگی==
== یکپارچگی ==
هایبرنیت را هم در [[جاوا نسخه استاندارد|برنامه‌های استاندارد جاوا]] (Java SE) و هم در [[جاوا نسخه سازمانی|برنامه‌های سازمانی جاوا]] (Java EE) می توان استفاده کرد. همچنین می توان هایبرنیت را با برنامه‌های دیگر ترکیب کرد مثلا شرکت [[آدوبی]] در نسخه ۹ برنامه ColdFusion خود از هایبرنیت استفاده کرده است.
هایبرنیت را هم در [[جاوا نسخه استاندارد|برنامه‌های استاندارد جاوا]] (Java SE) و هم در [[جاوا نسخه سازمانی|برنامه‌های سازمانی جاوا]] (Java EE) می توان استفاده کرد. همچنین می توان هایبرنیت را با برنامه‌های دیگر ترکیب کرد مثلا شرکت [[آدوبی]] در نسخه ۹ برنامه ColdFusion خود از هایبرنیت استفاده کرده است.
==تاریخچه==
== تاریخچه ==
گوین کینگ راهبری گروه نرم افزاری توسعه دهنده هایبرنیت را به عهده داشت. بعدها شرکت JBoss (که الان جزئی از شرکت [[ردهت]] است) تیم را خرید. در سال ۲۰۱۰ آخرین نسخه هایبرنیت شماره ۳ است. این نسخه شامل ویژگی‌های جدیدی مانند فیلترهای سلیقه ای و پشتیبانی از حاشیه نویسی جاوا ۵ است. در حال حاضر هایبرنیت پیاده سازی تایید شده نسخه یکم Java persistence API است که با استاندارد JSR ۲۲۰ JPA سازگاری کامل دارد.
گوین کینگ راهبری گروه نرم افزاری توسعه دهنده هایبرنیت را به عهده داشت. بعدها شرکت JBoss (که الان جزئی از شرکت [[ردهت]] است) تیم را خرید. در سال ۲۰۱۰ آخرین نسخه هایبرنیت شماره ۳ است. این نسخه شامل ویژگی‌های جدیدی مانند فیلترهای سلیقه ای و پشتیبانی از حاشیه نویسی جاوا ۵ است. در حال حاضر هایبرنیت پیاده سازی تایید شده نسخه یکم Java persistence API است که با استاندارد JSR ۲۲۰ JPA سازگاری کامل دارد.
==مثال==
== مثال ==
===نمونه فایل پیکره بندی هایبرنیت===
=== نمونه فایل پیکره بندی هایبرنیت ===
<source lang=xml>
<source lang=xml>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
خط ۶۷: خط ۶۶:
</hibernate-configuration>
</hibernate-configuration>
</source>
</source>
===نمونه کلاس جاوا===
=== نمونه کلاس جاوا ===
<source lang=java5>
<source lang=java5>
public class User {
public class User {
خط ۹۴: خط ۹۳:
</source>
</source>


===نمونه فایل نگاشت===
=== نمونه فایل نگاشت ===
<source lang=xml>
<source lang=xml>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
خط ۱۱۰: خط ۱۰۹:
</hibernate-mapping>
</hibernate-mapping>
</source>
</source>
===نمونه کد استفاده کننده===
=== نمونه کد استفاده کننده ===
<source lang=java5>
<source lang=java5>
//
//
خط ۱۴۳: خط ۱۴۲:
== پیوند به خارج ==
== پیوند به خارج ==
* [http://www.hibernate.org/ وب‌گاه هایبرنیت]
* [http://www.hibernate.org/ وب‌گاه هایبرنیت]
==منابع==
== منابع ==
{{پانویس}}
* Hibernate in Action، by Gaving King and Christian Bauer، Printed by Manning، ISBN ۱-۹۳۲۳۹۴-۱۵-X
* Hibernate in Action، by Gaving King and Christian Bauer، Printed by Manning، ISBN 1-932394-15-X
* [http://en.wikipedia.org/wiki/Hibernate_(Java)/ ویکی‌پدیای انگلیسی]
* [http://en.wikipedia.org/wiki/Hibernate_(Java)/ ویکی‌پدیای انگلیسی]



نسخهٔ ‏۸ اوت ۲۰۱۶، ساعت ۰۱:۲۱

هایبرنیت (به انگلیسی: Hibernate) یک کتابخانه نگاشت شی-رابطه ای (object-relational mapping) برای زبان جاوا است که چارچوبی را برای نگاشت یک شی به یک پایگاه داده رابطه ای فراهم می آورد.

هایبرنیت نرم افزاری آزاد است که تحت مجوز GNU Lesser General Public توزیع می شود.

کاربرد اصلی هایبرنیت نگاشت یک کلاس جاوا به یک جدول در پایگاه داده است. هایبرنیت همچنین ابزاری را برای بازیابی داده‌ها فراهم می آورد. هایبرنیت کمک می‌کند یک برنامه نویس بدون استفاده مستقیم از دستورات مربوط به پایگاه داده با آن رابطه برقرار و شی‌ها را بازیابی، ذخیره و یا به روزرسانی کند.

هایبرنیت به هیچ وجه جایگزین رابط پایگاه داده جاوا (JDBC) نمی شود بلکه یک لایه بالاتر از و مبتنی بر ان است در واقع هایبرنیت رابطی است که به برنامه نویسان کمک می کند، بدون درگیر شدن با جزئیات یک پایگاه داده، تمام اعمال مربوط به ذخیره و بازیابی اشیا را مستقل از نوع پایگاه داده انجام دهند.

پایستاری

هایبرنیت ابزار ذخیره اشیا جاوا را به طور شفاف فراهم آورده است. روابط بین اشیا از هر نوعی از جمله یک به یک و چند به چند هم توسط هایبرنیت پشتیبانی می شود. هایبرنیت قابلیت ذخیره و بازیابی مجموعه‌ها و گروههای داده در جاوا که معمولاً در Set و یا List ذخیره می شود، را نیز دارد. هایبرنیت قابلیت بارگیری دیرهنگام مجموعه‌های مرتبط با یک شی خاص را دارد. این، رفتار پیش فرض در هایبرنیت ۳ است.

پیکره بندی و نگاشت

نگاشت کلاس‌های جاوا به جدولهای پایگاه داده به کمک یک یا چند فایل پیکره بندی با فرمت XML و یا از طریق حاشیه نویسی جاوا انجام می شود. این فایلها مشخص می‌کند هر عضو یک کلاس چگونه در جدول مربوط ذخیره شود.

علاوه بر این فایل ها، برای پیکره بندی خود هایبرنیت نیاز به یک فایل پیکره بندی اصلی است. برخی از متغیرهایی که می توان در این فایل پیکره بندی (با نام پیش فرض hibernate.cfg.xml) مشخص کرد عبارتند از :

  • hibernate.connection.driver_class- درایور مختص پایگاه داده که معمولاً با پسوند jar وجود دارد.
  • hibernate.connection.url- آدرس سرور پایگاه داده
  • hibernate.connection.username- نام کاربری برای ورود به پایگاه داده
  • hibernate.connection.password- رمز ورود به پایگاه داده
  • ...

امکان ترکیب همه اطلاعات مربوط به نگاشت کلاس‌ها و اطلاعات پیکره بندی هایبرنیت در یک فایل نیز وجود دارد.

کلاس‌ها و رابط‌های اصلی

  • رابط Session : اصلی‌ترین رابط برای ذخیره، بازیابی و یا به روز رسانی یک شی. برای انجام تمام اعمال هایبرنیت نیاز به یک شی از این نوع داریم.
  • رابط SessionFactory : یک برنامه مبتنی بر هایبرنیت برای تولید یک Session از SessionFactory استفاده می کند. به طور معمول برای کار با یک پایگاه داده تنها نیاز به یک SessionFactory است که از ان برای تولید هر تعداد Session استفاده می شود. از فایل پیکره بندی و یا حاشیه نویسی جاوا برای تولید یک SessionFactory از استفاده می کنیم.در کد زیر از فایل پیکره بندی hibernate.cfg.xml موجود در پوشه ریشه پروژه برای تولید یک SessionFactory استفاده می کنیم:
SessionFactory factory = new Configuration().configure().buildSessionFactory();
//or
SessionFactory factory = new Configuration().configure(hibernate.cfg.xml).buildSessionFactory();

برای تولید Session از این SessionFactory:

Session session=factory.openSession();

زبان پرس جوی هایبرنیت (HQL)

هایبرنیت قابلیت اجرای دستورات Sql را داراست با این حال برای راحتی بیشتر یک زبان شبیه Sql را با نام HQL پشتیبانی میکند. برای مثال دستور from Product تمام اشیا موجود در جدول مرتبط با کلاس Product در برنامه جاوا را بر می گرداند. معادل Sql این دستور Select * from product_table است.برای اجرای این دستور در یک برنامه در محیط جاوا استانداد کد زیر اجرا می شود:

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session=sessionFactory.openSession();
session.beginTransaction();
Query query = session.createQuery("from Product”)
List results = query.list();
session.commitTransaction();

یکپارچگی

هایبرنیت را هم در برنامه‌های استاندارد جاوا (Java SE) و هم در برنامه‌های سازمانی جاوا (Java EE) می توان استفاده کرد. همچنین می توان هایبرنیت را با برنامه‌های دیگر ترکیب کرد مثلا شرکت آدوبی در نسخه ۹ برنامه ColdFusion خود از هایبرنیت استفاده کرده است.

تاریخچه

گوین کینگ راهبری گروه نرم افزاری توسعه دهنده هایبرنیت را به عهده داشت. بعدها شرکت JBoss (که الان جزئی از شرکت ردهت است) تیم را خرید. در سال ۲۰۱۰ آخرین نسخه هایبرنیت شماره ۳ است. این نسخه شامل ویژگی‌های جدیدی مانند فیلترهای سلیقه ای و پشتیبانی از حاشیه نویسی جاوا ۵ است. در حال حاضر هایبرنیت پیاده سازی تایید شده نسخه یکم Java persistence API است که با استاندارد JSR ۲۲۰ JPA سازگاری کامل دارد.

مثال

نمونه فایل پیکره بندی هایبرنیت

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC 'PUBLIC:-//Hibernate/Hibernate Configuration DTD 3.0//EN' 'http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd'>
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class" >org.hsqldb.jdbcDriver</property>
        <property name="hibernate.connection.url" >jdbc:hsqldb:hsql://localhost</property>
        <property name="hibernate.connection.username" >sa</property>
        <property name="hibernate.dialect" >org.hibernate.dialect.HSQLDialect</property>
        <property name= "current_session_context_class">thread</property>
        
        <property name="hbm2ddl.auto">create</property> 
        
        <mapping resource="mapProduct.xml"/>
    </session-factory>
    
</hibernate-configuration>

نمونه کلاس جاوا

public class User {
    String id;
    String productName;

    public User(String id, String productName) {
        this.id = id;
        this.productName = productName;
    }
    public User() {
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getProductName() {
        return productName;
    }
    public void setProductName (String productName) {
        this.productName= productName;
    }
}

نمونه فایل نگاشت

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC 'PUBLIC:-//Hibernate/Hibernate Mapping DTD 3.0//EN' 'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
<hibernate-mapping>
    <class name="Product" table="product_table" >
        <id name="id" column="product_id"  type="string" >
            <generator class="assigned" ></generator>
        </id>
        
        <property name="productName" column="product_name" type="string" />      
    </class>
    
</hibernate-mapping>

نمونه کد استفاده کننده

//
//create product object
//
Product product=new Product(12000,Computer Monitor);
//
//create session factory
//
SessionFactory factory= new Configuration().configure().buildSessionFactory();
//
//get a session
//
Session session =factory.getCurrentSession();

//
//save a product in database
//
session.beginTransaction();
session save(product);//saved!
session.getTransaction().commit();

//
//retrive first product with id 12000 from database
//
session.beginTransaction();
Product prod = (Prodcut) session.createQuery("from Product as productObj where prodcutObj.id=12000").list().get(0);
session.getTransaction().commit();

پیوند به خارج

منابع