Hibernate は、パフォーマンスを向上させるためにキャッシュとスナップショットのメカニズムを提供します。
そのキャッシュは、一次キャッシュと二次キャッシュに分かれています。
Hibernate 1 次キャッシュ: SQL ステートメントがトランザクションで実行されると、返された結果はセッションの Map コレクションに保存されます (もちろん、スナップショットもあります)。
テスト: (以下のコードはすべてtry/catchブロック内にあります)
Configuration config=new Configuration().configure();//configure()方法是加载src/hibernate.cfg.xml配置文件 SessionFactory sf=config.buildSessionFactory(); Session s=sf.openSession();//Session是高一级的对Connection的封装 Transaction tran=null; try { tran=s.beginTransaction(); //代码在此 tran.commit(); } catch (HibernateException e) { if(tran!=null){ tran.rollback(); } e.printStackTrace(); } finally{ s.close(); sf.close(); }
Query: get()、load()、ネイティブSQL、HQL、Criteria(HQLよりもオブジェクト指向のクエリメソッドを含む)
//1.get(),load()方法测试 User u=(User) s.get(User.class, 1);//第一次查询生成SQL语句,并将结果放入缓存 User u1=(User) s.get(User.class, 1);//第二次查询并无生成SQL语句,但结果取自缓存 p(u==u1);//true //2.HQL查询 Query q=s.createQuery("from domain.User where id=1"); User u2=(User) q.uniqueResult();//第三次查询生成了SQL语句,但结果取自缓存 p(u2==u);//true //3.原生Sql SQLQuery q1=s.createSQLQuery("select * from User where id=1"); q1.addEntity(User.class); User u3=(User) q1.uniqueResult();//第四次查询生成了SQL语句,但结果取自缓存 p(u3==u);//true //4.Criteria查询 Criteria c=s.createCriteria(User.class); c.add(Restrictions.eq("id", 1)); User u4=(User) q1.uniqueResult();//第五次查询生成了SQL语句,但结果取自缓存 p(u4==u);//true
概要クエリ:
追加: save()、persistent()
User user = new User();//对象的瞬态 user.setName("xiaobai"); user.setAge(121); s.save(user);//对象的持久态 s.persist(user);
ここでの 2 つのメソッドの違いは、メソッドを実行する前に主キーを設定する問題と、メソッドの実行後に主キーを返す問題です。その方法。
1、persist() は、一時的なインスタンスを永続化しますが、識別子 (識別子の主キーに対応する属性) が永続的なインスタンスに直ちに埋められること、および識別子の埋め込みが「保証」されるわけではありません。洗い流す時間が遅れる場合があります。
2. save() は、一時的なインスタンスの永続化識別子を生成し、その識別子を返すため、SQL 挿入がすぐに実行されます。
User u = new User(); u.setName("xiaobai"); u.setAge(121); s.save(u);//插入数据库,并将对象瞬态转为持久态,将返回对象存入缓存 User u1=(User) s.get(User.class, u.getId());//这次查询没有生成SQL语句,结果取自Session的缓存 p(u1==u);//true
Delete: delete()
User u=(User) s.get(User.class, 10);//クエリ操作を実行します
s.delete(u);//オブジェクトの永続状態をフリー状態に変換しますstate
もちろん、データを削除するためにクエリ操作を実行するとパフォーマンスが低下すると思われる場合は、次のようにすることもできます。
s.delete(u);
Update: update()
u.setName("set");
でも時々 s.update( Object) メソッドを実行する必要はありません。これには、オブジェクトの永続状態の機能が含まれます ([スナップショット] もその役割を果たします)。
//当然,也可以这么做 User u=new User();//对象的瞬态,不具备自动更新功能,需要我们手动update() u.setAge(1); u.setId(1); u.setName("1"); s.update(u);まとめ: 非常に重要な点が 1 つあります。SQL ステートメントはトランザクション内で形成されますが、データベースは実際に操作されるのは、transaction.commit() の後でのみです。 Hibernate は、[キャッシュ、スナップショット、オブジェクトのスリーステート] およびデータベース操作に関するその他の事項を把握する必要があります。 オブジェクトの 3 つの状態: * 一時的な状態: 休止状態に関連しない、データベース テーブルに対応する ID なし
* 永続的な状態: 休止状態に関連する、データベース テーブルに対応する ID---OID がある
* 無料state : Hibernate とは関係ありませんが、データベーステーブルに対応する ID があります
ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ホットトピック









