آموزش هوش مصنوعی از صفر ، بدون پیش‌نیاز آموزش هوش مصنوعی ، از صفر بدون پیش‌نیاز!
🎯 شروع یادگیری

درس 36 : آموزش Hibernate Named Query

آموزش Hibernate Named Query :

Hibernate Named Quer راهی است برای استفاده از Query در سطح برنامه با استفاده از نام های معنی دار. به عبارت دیگر یک نام هم معنی با کارکرد Query برای آن انتخاب کرده و به وسیله آن نام Query مورد نطر را در برنامه های Hibernate فراخوانی و اجرا می کنیم.
Hibernate Named Quer همانند کاربرد alias در زبان SQL است. چهارچوب کاری Hibernate امکان استفاده از Named Query ها را فراهم کرده و به همین دلیل دیگر برنامه نویسان جاوا نیاز ندارند تا Query را در کل سطح برنامه پراکنده کنند.
دو روش برای تعیین Named Query در Hibernate وجود دارد :

  • استفاده از annotation.
  • استفاده از فایل mapping file.

آموزش Hibernate Named Query با استفاده از annotation :

اگر می خواهید از قابلیت Named Query در Hibernate استفاده کنید، بایستی با نحوه کار با annotation های @NamedQueries و @NamedQuery آشنا باشید.
@NamedQueries annotation برای تعیین Query های چند نامه به کار می رود.
@NamedQuery برای تعیین Query تک نام به کار می رود.
در کد زیر، مثال عملی استفاده از Named Query در Hibernate نشان داده شده است :

1
2
3
4
5
6
7
8
9
@NamedQueries
    
        @NamedQuery
        name = "findEmployeeByName"
        query = "from Employee e where e.name = :name" 
        
    
            <button></button>

مثال عملی آموزش Hibernate Named Query با استفاده از annotation :

در این مثال، از annotation برای تعیین Named Query در کلاس Persistant Class استفاده می کنیم. این مثال دارای 3 فایل اصلی به شرح زیر است :

  • Employee.java.
  • hibernate.cfg.xml.
  • FetchDemo.

فایل Employee.java :

فایل زیر کد یک کلاس Persistent Classs است که از annotation برای تعیین Named Query استفاده کرده و آن را به عنوان یک موجودیت یا entity می گیرد.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.javatpoint; 
   
import javax.persistence.*; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
   
@NamedQueries
    
        @NamedQuery
        name = "findEmployeeByName"
        query = "from Employee e where e.name = :name" 
        
    
   
@Entity 
@Table(name="em"
public class Employee { 
       
    public String toString(){return id+" "+name+" "+salary+" "+job;} 
       
    int id; 
    String name; 
    int salary; 
    String job; 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
        
    //getters and setters 
            <button></button>

فایل hibernate.cfg.xml :

فایل زیر یک فایل تنظیمات یا Configuration file است که اطلاعات مهم برنامه از قبیل driver class، Url، User name، password، mapping class و غیره را نگهداری می کند.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!--?xml version='1.0' encoding='UTF-8'?--> 
   
   
<hibernate-configuration> 
   
    <session-factory> 
        <property name="hbm2ddl.auto">update</property> 
        <property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> 
        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property> 
        <property name="connection.username">system</property> 
        <property name="connection.password">oracle</property> 
        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> 
    <mapping class="com.javatpoint.Employee"></mapping> 
    </session-factory> 
   
</hibernate-configuration> 
            <button></button>

فایل FetchData.java :

کد زیر کلاس FetchData است که از Named Query تعیین شده استفاده کرده و اطلاعات مورد نظر را بر مبنای Query از پایگاه داده استخراج می کند. متد getNamedQuery از Named Query استفاده کرده و یک نسخه یا instance از Query را بر می گرداند.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.javatpoint; 
   
import java.util.Iterator; 
import java.util.List; 
   
import org.hibernate.cfg.AnnotationConfiguration; 
import org.hibernate.*; 
   
public class FetchData { 
 public static void main(String[] args) { 
   
  AnnotationConfiguration configuration=new AnnotationConfiguration(); 
   configuration.configure("hibernate.cfg.xml"); 
   SessionFactory sFactory=configuration.buildSessionFactory(); 
    Session session=sFactory.openSession(); 
                   
    //Hibernate Named Query 
    Query query = session.getNamedQuery("findEmployeeByName"); 
    query.setString("name", "amit"); 
           
    List< Employee > employees=query.list(); 
           
    Iterator< Employee > itr=employees.iterator(); 
     while(itr.hasNext()){ 
    Employee e=itr.next(); 
    System.out.println(e); 
     
           
    session.close(); 
       
  
            <button></button>

مثال عملی آموزش Named Query با استفاده از mapping file :

اگر بخواهید Named Query را با استفاده از mapping file تعیین کنید، بایستی از المنت query فایل hibernate-mapping برای این کار استفاده کنید.
در چنین حالتی، شما بایستی hbm فایل مورد نظر جهت تعیین Named Query را ایجاد نمایید. فایل های دیگر این مثال به جز فایل کلاس Persistent Class به نام Employee.java که در آن نیازی نیست برای تعیین Named Query از هیچ annotation ای استفاده کرده و فایل تنظیمات به نام hibernate.cfg.xml که در آن بایستی منبع لازم جهت mapping را در فایل hbm تعین کنید، همانند مثال قبل هستند.

فایل hbm مثال Named Query با استفاده از mapping file بایستی به صورت زیر باشد :

فایل emp.hbm.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--?xml version='1.0' encoding='UTF-8'?--> 
   
   
<hibernate-mapping> 
<class name="com.javatpoint.Employee" table="em"
<id name="id"
<generator class="native"></generator> 
</id> 
<property name="name"></property> 
<property name="job"></property> 
<property name="salary"></property> 
</class
   
<query name="findEmployeeByName"
<!--[CDATA[from Employee e where e.name = :name]]--> 
</query> 
    
</hibernate-mapping> 
            <button></button>

همچنین فایل کلاس Persistent Class نیز بایستی همانند زیر باشد :

1
2
3
4
5
6
7
8
9
package com.javatpoint; 
public class Employee { 
    int id; 
    String name; 
    int salary; 
    String job; 
    //getters and setters 
            <button></button>

سپس در مرحله آخر، منبع لازم جهت mapping یعنی mapping resource را در فایل hbm به صورت کد زیر اضافه کنید :

1
2
    <mapping resource="emp.hbm.xml"></mapping> 
<button></button>
1395/07/13 2433 892
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...