ホームページ > Java > &#&チュートリアル > Java の Hibernate フレームワークで SQL ステートメントを使用するための簡単な紹介

Java の Hibernate フレームワークで SQL ステートメントを使用するための簡単な紹介

高洛峰
リリース: 2017-01-23 11:32:54
オリジナル
1194 人が閲覧しました

Hibernate には HQL クエリ構文があります。しかし、私たちは SQL ステートメントの方がよく知っているので、Hibernate で SQL をサポートするにはどうすればよいでしょうか?これについては考える必要はありません。Hibernate チームはすでにそれを行っています。
早速、例を挙げてみましょう。

select * from t_user usr
ログイン後にコピー
ログイン後にコピー

上記は SQL ステートメントですが、誰もがそれを知っています。 Hibernate にこのステートメントを実行させたいのですが、どうすればよいでしょうか?コードを見てください:

Query query = session.createSQLQuery("select * from t_user usr");
ログイン後にコピー

以上です。残りの通常のクエリは誰もが知っているはずです。クエリ後のリターンは何ですか?

while(iter.hasNext()){
 Object[] objs = (Object[])iter.next();
 for (int i = 0; i < objs.length; i++) {
 System.out.print(objs[i]);
 }
 System.out.println();
}
ログイン後にコピー
-すべての結果が返されたすべての結果はオブジェクトです[]配列、

、自分自身が彼女自身に彼女自身が彼女に彼女を彼女に彼女が彼女に彼女が彼女自身と一緒にいることを彼女に彼女は彼女に彼女を彼女に言いました、と彼女は言いました。はい、それはオブジェクト指向ですが、残念ながら、方法はありません。

私たちは引き続き見ます: re
select {usr.*} from t_user usr
ログイン後にコピー



これを見ると、一部の子供たちの靴がチキンを動かし始めたと推定されます、その大きなブラケットは何ですか?
焦らず、ゆっくり時間をかけてください。まずはコードを見ていきましょう。

Query query = session.createSQLQuery("select {usr.*} from t_user usr").addEntity(TUser.class);
ログイン後にコピー

以前との違いは、addEntity を追加したことです。これは何を意味しますか?

API に直接アクセスすると、次のような一連の説明が表示されました:

addEntity
SQLQuery addEntity(String tableAlias,
   Class entityType)
Declare a "root" entity
Parameters:
tableAlias - The SQL table alias
entityType - The java type of the entity to add as a root
ログイン後にコピー

同じものではありませんが、もったいないです。自分だけが使用できます。
最初のパラメータはテーブルのエイリアスを参照します。上記のステートメントと同様に、テーブルのエイリアスは usr であるため、最初のパラメータは usr で、2 番目のパラメータはクエリ結果をマッピングする必要があるクラスを参照します。ここでは、TUser をマッピング ファイルの t_user テーブルにマップしているため、当然、ここには TUser があります。それで確認すると SQL 文が出てきて、結果は TUser 型でした。

私たちが見つけた結果は次のとおりです:

org.hibernate.tutorial.domain6.TUser@198cb3d
ログイン後にコピー


もちろん、あなたのものは私のものとは異なるはずです。動かないで下さい。

おそらく、それらをすべてチェックする必要はありません。現時点で必要なのは、エイリアスを設定することだけです:

select u.id as {usr.id},u.name as {usr.name},u.age as {usr.age} from t_user u
ログイン後にコピー


フィールドのエイリアスを指定するために as を使用していることがわかりますが、プログラムはまだです。同じ:
rreee

これは簡単なので、あまり多くを言わないでください。

一部のチームは、構成ファイルを必要とするコード内に SQL ステートメントを記述しないことを規定していることを前に述べました。

設定ファイルに追加できます:

Query query = session.createSQLQuery("select u.id as {usr.id},u.name as {usr.name},u.age as {usr.age} from t_user u").addEntity("usr",TUser.class);
ログイン後にコピー



ここでのエンティティ名は完全なパッケージ名である必要があることに注意してください。そうしないと、エラーが報告されます。ここにはサブタグ return があり、テーブルのエイリアスとクラス名を指定するため、実行時に addEntity を行う必要がありません。
コードを見てください:

<sql-query name="queryTUser">
 <return alias="usr" entity-name="org.hibernate.tutorial.domain6.TUser" />
 select {usr.*} from t_user usr where name=:name
</sql-query>
ログイン後にコピー


これを実行しましょう。主に構成ファイル内の構成が原因で、addEntity を追加しなかったことに注意してください。

構成ファイルで構成されている場合は、テーブルのエイリアスとクラス名を指定する return サブタグが必要であることに注意してください。これは主に、声明を読むときに繰り返し判断することを避けるためです。

エイリアスを持つテーブルについて長い間話してきましたが、テーブルにエイリアスがなく、返された結果をオブジェクトにカプセル化したい場合はどうすればよいでしょうか。

Query query = session.getNamedQuery("queryTUser");
query.setParameter("name","shun");
List list = query.list();
Iterator iter = list.iterator();
ログイン後にコピー



これは非常に簡単で、addEntity のオーバーロードされたメソッド addEntity(Class clazz) を呼び出すだけです。テーブルのエイリアスは必要なく、クラス名を指定するだけです。

もちろん、hibernate はストアド プロシージャもサポートしています。構成ファイルで sql-query の callable 属性を true に設定するだけです。これは、ストアド プロシージャが現在呼び出されていることを意味します。ストアドプロシージャについては、今後も勉強して一緒に勉強していきましょう。

session.save およびその他の対応するデータ操作メソッドを呼び出すと、それは Hibernate の組み込み SQL ステートメントに変換されますが、SQL ステートメントの形式を自分で制御したい場合はどうすればよいでしょうか?

Hibernate も実際にそれを考えました。
これをマッピング ファイルに直接追加します:

select * from t_user usr
ログイン後にコピー
ログイン後にコピー

これはクラス タグ内にサブタグとして追加する必要があることに注意してください。ここではすべて大文字を使用していますが、これは Hibernate のデフォルトのステートメントと区別するためであり、他の意味はありません。
まず挿入の呼び出しを見てみましょう:
<sql-insert>
 INSERT INTO T_USER (NAME,AGE) values (?,?)
 </sql-insert>
 <sql-update>
 UPDATE USER SET USER_NAME=?,AGE=? WHERE uSER_ID=?
</sql-update>
ログイン後にコピー

save を呼び出すと、hibernate のステートメントは次のようになります:
Hibernate:

User user = new User();
user.setName("shun123123");
user.setAge(23);
ログイン後にコピー

これは、設定した sql-insert タグ内のステートメントを呼び出します
戻りましょうupdate 呼び出しを見てください:

INSERT INTO USER(USER_NAME,AGE) values(?,?)
ログイン後にコピー

save を呼び出すと、自動的に update が呼び出されます:
Hibernate:

User user = (User)session.get(User.class,new Long(29));
user.setName("shun123123");
user.setAge(23);
session.save(user);
ログイン後にコピー

出力ステートメントが大文字であることがわかります。つまり、構成ステートメントと呼ばれます。

delete ステートメントも同じ方法で設定されます。

Java の Hibernate フレームワークで SQL ステートメントを使用する簡単な紹介に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート