検索

休止状態の概要

Oct 31, 2016 pm 02:24 PM
hibernate

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()

User u=(User) s.get(User.class, 1);

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 があります



声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

mPDF

mPDF

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