2017-05-05 91 views
0

私はmybatisにキャッシュがあることを知っており、デフォルトで更新を実行するとキャッシュをフラッシュします。それで、select ...を実行するとキャッシュをフラッシュするのですか?答えがノーならば、最初にselectを実行してすぐにselect select ...を実行してmybatisがデータベースにアクセスするか、キャッシュにヒットしますか?mybatisは、select ...を実行したときにキャッシュをフラッシュしますが、デフォルトで更新されますか?

答えて

0

キャッシュフラッシュのデフォルトの動作は実際に実行されたSQLのタイプはMybatisステートメントに実行されます。 flushCacheプロパティが(注釈スタイルに@Optionsに)指定されていない間、SQLが、その後<select>@Selectにあるものは何でも

は、デフォルトの動作が適用されない:何のフラッシュを。 <update>または@Updateの場合、キャッシュはデフォルトでフラッシュされます。

いずれにしても、SELECTSELECT FOR UPDATEは異なるSQL文字列です。両方を呼び出すと、結果セットは同じですが、キャッシュは結果にSQL文字列とパラメータを関連付けます。 SQL文字列の変更=>新しいヒット、パラメータの変更=>新しいヒット。ステートメント<select id=stmt1>と別のステートメント<select id=stmt2>が同じSQL文字列を生成し、同じパラメーター値で呼び出された場合、同じセッション中にそれらの間でフラッシング操作が行われないと、2番目の呼び出しがキャッシュにヒットするはずです。これは、mapper.namespaceパッケージのデバッグログを有効にすることで確認できます。

キャッシュは、ORM(Hibernate ..)のように機能しません。エンティティタイプと主キーで参照されるキャッシュ。

キャッシュはセッションが終了するまで長く続きます。

セッション中に同じデータを繰り返し(同じ文/パラメータ)要求すると、次回の使用のために結果を格納する必要がなく、単に文を再度呼び出すだけでキャッシュは結果のDBへのアクセスを保存するだけです。

+0

ありがとうございます。私は別の質問があります。@ selectでid * = 1のテーブルからselect *を実行すると、結果はキャッシュに保存されます。同じセッションで同じsqlを2回実行するのか、2回目にキャッシュにアクセスするのか、DBにアクセスするのだろうかと思います。 2回目にキャッシュにヒットした場合は、間違っていることがあります。 –

+0

あなたは正しいです、私はその点について答えを明確にしました。 – blackwizard

関連する問題