جاوا و تکنولوژی های آن

java programming language

در این وبلاگ به بررسی نکات موجود در جاوا و تکنولوژی های آن می پردازیم

طبقه بندی موضوعی

HQL :

زبانی شبیه SQL برای کوئری زدن در هایبرنیت که به جای بکار گرفتن نام جداول و ستون‌ها با entity ها و فیلد ها کار میکند

نمونه : from Cat as cat  برای select زدن روی جدولی که در کلاس Cat تعریف شده است

 

میتوانیم از دو جدول هم کوئری بگیریم که جواب آن بصورت ضرب دکارتی بر میگردد  

from Formula , Parameter

و خروجی را بصورت ArrayList ای از آرایه ها خواهیم داشت و اندیس اول از Formula و اندیس دوم از Parameter خواهد بود و اگر بخواهیم لیست برگشتی فقط لیستی از Formula باشد میتوان HQL را به این صورت نوشت :

select f from Formula f , Parameter 

و اگر بخواهیم بجای List ای از آرایه ها List ای از List ها بگیریم میتوان HQL را به این صورت تغییر داد :

select new List(f) from Formula f , Parameter 

 

از همین روش بالا میتوان ابجکت های model ای داشت که در constractor آرگومان هایی را دریافت کند و در HQL صراحتا مقادیر دریافتی را به آن ارگومان ها پاس بدهیم و خروجی List ای از آن ابجکت دریافت کنیم

**نکته : اصولی نیست که کوئری را برای دو Entity بزنیم و باید تا آنجا که ممکن است دوری کنیم

 

fetch : در کوئری های join زدن ها اگر بخواهیم ستون های جدول دوم را هم دریافت کنیم میتوانیم بعد از کلمه join از fetch استفاده کنیم 

 

**نکته : left join پرفرمانس دیتابیس را تا حد زیادی کم میکنم و راه حل این است که بجای اینکه مقادیر f.key را optional بگیریم حتما برای مقادیر optional از یک مقدار پیش فرض که توسط خودمان تعیین میشود استفاده کنیم که همیشه بتوانیم از inner join استفاده کنیم

 

Named Query :

میتوان در کلاس های Entity کوئری های از پیش تعریف شده ای با یک نام ایجاد کرد و در طول برنامه با استفاده از نام کوئری از آن استفاده کرد

@Entity
@NamedQueries(
     @NamedQuery(name="getUserById" , query="from User where userId = :pUserId")
)
public class User {

private int userId;
private String username;
...
}

با استفاده از Name Query ها کوئری ها از لحاظ ساختاری و اجر چک میشوند و آنها در حافظه cache می شوند

 

Query query = session.createNamedQuery("getUserById")
                    .setParameter("pUserId",1);

List<User> list = query.list();

 

Native Query :

هایبرنیت از کلیه دستورات و امکانات SQL استفاده نمیکند مثل Union و یا میخواهیم بجای HQL از SQL استفاده کنیم ، ما میتوانیم با استفاده از Native Query از آنها استفاده کنیم

 

session.createNativeQuery ("select * from user" , User.class).list();

 

که همانند NamedQueries@ میتوان از NativeQueries@ استفاده کرد و دسته ای از Native Query ها را ایجاد کرد 

 

 

 

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی