クライアントは、同じSQLクエリステートメントをデータベースサーバーに送信します。毎回データベースにアクセスすると、パフォーマンスが低下します。
では、どのように改善するのですか?
MyBatisは、レベル1キャッシュの戦略を提供します
SQLSessionの開閉の間に、SQLSessionオブジェクト(実際には執行者)がキャッシュされたオブジェクトを維持します。データを照会するときは、最初にデータがキャッシュから存在するかどうか、そしてそれが存在する場合、直接取得されます。存在しない場合は、SQLクエリをデータベースに送信してから、クエリデータをキャッシュに保存してプログラムに戻します。
これには問題があります。
プログラムが最初のクエリと2番目のクエリ中にチェックするデータベースのデータを変更すると、読み取りデータが間違っています。つまり、つまり、
Dirty Readingは実際にMyBatisがSQLSessionでCommit()メソッドを実行した後にキャッシュをクリアします。 2回目のクエリに行くと、データベースから照会します。
また、sqlsessionのClearCache()メソッドを手動で呼び出してキャッシュをクリアすることもできます
小さな例:
@test public void testcachelever1()スロー例外{sqlsession session = factory.opensession(); usermapper mapper = session.getMapper(usermapper.class); //最初の要求は、ID 1ユーザー= mapper.finduserbyid(1)でユーザーを照会することです。 System.out.println(user); //データを変更すると、キャッシュはcleared user.setusername( "yyyy"); mapper.updateuser(user); session.commit(); // 2番目のクエリでは、ユーザーユーザー2 = mapper.finduserbyid(1)を探します。 System.out.println(user2); session.close(); }質問:
sqlsessionが閉じられている場合、キャッシュがクリアされます。キャッシュを使用して効率を改善しますか?
さて、次の記事では、MyBatisレベル2キャッシュを紹介します。
上記は、編集者によって導入されたMyBatisの第1レベルのキャッシュです。私はそれが誰にでも役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は、すべての人に時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!