Hibernate HQL入門その1 - HQLの基本的な書き方及びその利用方法

2008/09/12 21:20Update
TAGS: Hibernate | HQL | 入門

Hibernate HQLの基本的な書き方について学びます。


HQLとは



HQLとはHibernate Query Languageの略で、SQLに似たような強力なデータベースの問い合わせ言語です。とは言え、HQLはSQLと全く違う言語であることをよく理解してください。HQL自体は完全にオブジェクト指向であり、継承、ポリモーフィック、関連などの概念があります。

HQLの書き方(概要)



■HQL基本的な書き方1:基本(FROM)
FROM    Order
FROM    Order AS o
FROM    Order o
SELECT o FROM Order o


■HQL基本的な書き方2:条件式(WHERE)
FROM    Order WHERE id=:id
※ :idはクエリのダイナミックパラメータです。クエリを実行する前に、パラメータ:idを設定する必要があります。
FROM    Order AS o WHERE o.id='1'

■HQL基本的な書き方3:指定する項目を取出す(SELECT ... FROM ... WHERE ...)
SELECT id, name FROM Order

SELECT o.id as orderId, o.name as orderName,
    p.id as productId, p.name as productName
FROM Order o, Product p
WHERE o.id=:oid AND o.productId = p.id


■HQL基本的な書き方4:関連性のある複数のオブジェクト(SELECT ..., ... FROM ..., ..., WHERE ...)
FROM    Order o, Product p WHERE o.id=:oid AND o.productId = p.id


※OrderやProductはJavaクラス名です。「パッケージ名」を省略したクラス名は、Hibernate(hibernate.cfg.xmlなどにより)に登録する必要があります。また、「パッケージ名・クラス名」の形でも指定できます。
※o.idやo.productIdなどはクラスのプロパティ名です。
※HQLはJavaクラス名とクラスのプロパティを除いて大文字、小文字を区別しません。即ち、Orderはorderとは違い、o.idはo.IDとも違います。しかし、selectはSELECTとは同じです。

HQLの利用方法


■方法1:HQLをソースの中で直接書く
例:
Javaコード
List list = session.createQuery("FROM    Order").list();


■方法2:HQLを外部XMLにて定義する
Query.hbm.xml(クエリ定義ファイル)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <query name="OrderDao.getOrderListById">
        <![CDATA[
            FROM     Order
            WHERE    id=:id
        ]]>
    </query>
</hibernate-mapping>


Javaコード
OrderDao.Java
//クエリの名前からQueryを取得する
Query query = session.getNamedQuery("OrderDao.getOrderListById");
//パラメータを設定する
query.setString("id", "1");
//問い合わせ
List list = query.list();



hibernate.cfg.xml
...
<mapping resource="Query.hbm.xml"/>

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments