Wiem, że mybatis ma pamięć podręczną i będzie się spłukiwaćpamięć podręczna po domyślnym wykonaniu aktualizacji. Więc czy opróżnia pamięć podręczną po uruchomieniu wybierz ... do aktualizacji? Jeśli odpowiedź brzmi „nie”, to jeśli najpierw wykonam polecenie select, a następnie natychmiast wykonaj polecenie select ... w celu aktualizacji, mybatis uzyska dostęp do bazy danych lub w pamięci podręcznej?
Odpowiedzi:
0 dla odpowiedzi № 1domyślne zachowanie opróżniania pamięci podręcznej nie jest związane z faktycznie wykonanym SQL, ale z typem Mybatis instrukcja wykonana.
Cokolwiek zawiera SQL <select>
lub @Select
a potem flushCache
właściwość nie jest określona (na @Options
w przypadku stylu adnotacji) zachowuje się domyślne zachowanie: brak koloru. i dla <update>
lub @Update
pamięć podręczna jest domyślnie opróżniana.
W każdym razie w twoim przypadku SELECT
i SELECT FOR UPDATE
to różne ciągi SQL, a następnie podczas wywoływaniaoba, baza danych zostanie trafiona dla obu, mimo że zestaw wyników jest taki sam, pamięć podręczna kojarzy ciągi SQL i parametry z wynikiem. Zmień ciąg SQL => nowe trafienie, zmień parametry => nowe trafienie. Jeśli oświadczenie <select id=stmt1>
i kolejne oświadczenie <select id=stmt2>
produkują ten sam ciąg SQL i są wywoływane za pomocąte same wartości parametrów, podczas tej samej sesji i między nimi nie występuje operacja opróżniania, wówczas drugie wywołanie powinno trafić do pamięci podręcznej. Można to sprawdzić, włączając dzienniki debugowania w pakiecie mapper.namespace.
Pamięć podręczna nie działa tak jak w ORM (Hibernacja ..): pamięć podręczna, do której odwołuje się typ jednostki i klucz podstawowy.
Pamięć podręczna trwa najwyżej do zakończenia sesji.
Jest to wygodne przy żądaniu tych samych danychwielokrotnie (ta sama instrukcja / parametry) podczas sesji, nie trzeba przechowywać wyniku do następnego użycia, wystarczy wywołać instrukcję ponownie, pamięć podręczna po prostu zapisze dostęp do bazy danych dla wyniku.