MyBatis contient une fonction de cache de requête très puissante qui peut être configurée et personnalisée très facilement. Par défaut, le cache n'est pas activé. Pour activer le cache de niveau 2, vous devez ajouter une ligne à votre fichier de mappage SQL:
<cache />
C'est ça littéralement. L'effet de cette déclaration simple est le suivant:
1. Toutes les instructions de sélection dans le fichier de l'instruction de mappage seront mises en cache.
2. Carte toutes les instructions Insérer, Mettre à jour et supprimer dans le fichier de remise en état de réapprovisionnement du cache.
3. Le cache sera récité en utilisant l'algorithme le moins récemment utilisé (LRU, le moins récemment utilisé).
4. Selon le calendrier (comme aucun intervalle de rinçage, pas d'intervalle de rafraîchissement), le cache ne sera rafraîchi dans aucun ordre chronologique.
5. Le cache stocke 1024 références à une collection ou un objet de liste (quelle que soit ce que la méthode de requête renvoie).
6. Le cache sera considéré comme un cache de lecture / écriture (lisible / écrivable), ce qui signifie que la récupération d'objets n'est pas partagée et peut être modifiée en toute sécurité par l'appelant sans interférer avec des modifications potentielles apportées par d'autres appelants ou threads.
Toutes ces propriétés peuvent être modifiées par les propriétés des éléments de cache. Par exemple:
<cache expection = "fifo" flushinterval = "60000" size = "512" readonly = "true" />
Cette configuration plus avancée crée un cache FIFO et actualise toutes les 60 secondes, stockant 512 références à l'objet ou à la liste du résultat, et l'objet retourné est considéré comme en lecture seule, donc les modifier entre les appelants dans différents threads entraîne des conflits.
Les stratégies de récupération disponibles sont:
La valeur par défaut est LRU.
FlushInterval peut être réglé sur n'importe quel entier positif, et ils représentent une période raisonnable de temps des millisecondes. La valeur par défaut n'est pas définie, c'est-à-dire qu'il n'y a pas d'intervalle de rafraîchissement et le cache n'est actualisé que lorsque l'instruction est appelée.
La taille (nombre de références) peut être définie sur n'importe quel entier positif, en rappelant le nombre d'objets que vous cachez et le nombre de ressources de mémoire disponibles dans votre environnement de fonctionnement. La valeur par défaut est 1024.
La propriété ReadOnly peut être définie sur True ou False. Un cache en lecture seule renvoie la même instance de l'objet de cache à tous les appelants. Par conséquent, ces objets ne peuvent pas être modifiés. Cela offre des avantages de performance importants. Un cache lisible et écrivain renvoie une copie de l'objet de cache (par sérialisation). Ce sera plus lent, mais sûr, il est donc faux par défaut.
Utilisation de cache personnalisé
En plus de ces méthodes de cache personnalisées, vous pouvez également remplacer complètement le comportement du cache en implémentant votre propre cache ou en créant des adaptateurs pour d'autres scénarios de cache tiers.
<cache type = ”com.domain.something.mycustomCache” />
Cet exemple montre comment utiliser une implémentation de cache personnalisée. La classe spécifiée par l'attribut Type doit implémenter l'interface org.mybatis.cache.cache. Cette interface est l'une des nombreuses interfaces complexes dans le cadre MyBatis, mais il est bien de simplement lui donner ce qu'il fait.
Cache d'interface publique {String getID (); int getSize (); void putObject (clé d'objet, valeur objet); Objet getObject (clé d'objet); Boolean Haskey (clé d'objet); Object SupporObject (Key Object); void clear (); ReadWriteLock getReadWriteLock (); } Cache de référence
Peut-être que dans le futur, vous voudrez partager la même configuration de cache et instances dans l'espace de noms. Dans ce cas, vous pouvez utiliser l'élément de réfaction de cache pour référencer un autre cache.
<cache-ref namespace = ”com.someone.application.data.somemapper" />