/ / mybatis svuota la cache quando si seleziona select ... per l'aggiornamento di default? - primavera, mybatis, spring-mybatis

mybatis svuota la cache quando si seleziona select ... per l'aggiornamento di default? - primavera, mybatis, spring-mybatis

So che mybatis ha cache e si svuoteràcache quando si esegue l'aggiornamento per impostazione predefinita. Quindi scarica la cache quando si seleziona select ... per l'aggiornamento? Se la risposta è no, allora se eseguo select in un primo momento e immediatamente seguito da execute select ... per l'aggiornamento, mybatis accederà al database o colpirà la cache?

risposte:

0 per risposta № 1

il comportamento predefinito di svuotamento della cache non è correlato all'SQL effettivamente eseguito, ma al tipo di Mybatis dichiarazione eseguita.

Qualunque sia l'SQL in <select> o @Select allora mentre flushCache la proprietà non è specificata (in @Options per lo stile di annotazione), si applica il comportamento predefinito: no flush. e per <update> o @Update la cache viene svuotata per impostazione predefinita.

Comunque nel tuo caso, il SELECTe SELECT FOR UPDATE sono diverse stringhe SQL, quindi quando si chiamaentrambi, il database verrà colpito per entrambi, anche se il set di risultati è lo stesso, la cache associa le stringhe SQL e i parametri al risultato. Cambia stringa SQL => nuovo hit, modifica parametri => nuovo hit. Se una dichiarazione <select id=stmt1> e un'altra affermazione <select id=stmt2> produce la stessa stringa SQL e viene chiamata constessi valori dei parametri, durante la stessa sessione e non si verificano operazioni di flushing tra di loro, quindi la seconda chiamata dovrebbe colpire la cache. Questo può essere verificato abilitando i log di debug sul pacchetto mapper.namespace.

La cache non funziona come in ORM (Hibernate ..): cache a cui fa riferimento il tipo di entità e la chiave primaria.

La cache dura al massimo fino alla fine della sessione.

È conveniente quando si richiedono gli stessi datiripetutamente (stessa istruzione / parametri) durante una sessione, non è necessario memorizzare i risultati per l'utilizzo successivo, basta richiamare l'istruzione nuovamente, la cache salverà semplicemente un accesso al DB per il risultato.