Maison > Java > javaDidacticiel > Compréhension approfondie du cache de deuxième niveau Mybatis

Compréhension approfondie du cache de deuxième niveau Mybatis

高洛峰
Libérer: 2017-01-23 09:35:03
original
1449 Les gens l'ont consulté

L'article précédent vous a présenté le cache de premier niveau mybatis. Les amis dans le besoin peuvent s'y référer.

Par rapport au cache de premier niveau, le cache de deuxième niveau a une portée plus grande et peut être partagé par plusieurs SqlSession.

De même, envoyer la même requête, SQL la recherchera d'abord dans le cache, puis interrogera la base de données s'il ne la trouve pas.

Chaque mappeur d'espace de noms aura son propre espace de cache.

Si les espaces de noms des deux mappeurs sont identiques, les données interrogées en exécutant le mappeur seront stockées dans le même cache de deuxième niveau.

De même, si une sqlSession exécute un commit, le le cache de deuxième niveau sera vidé.

Fichier de configuration (il est activé par défaut sans configuration) :

dans sqlMapConfig.xml :

<setting name="cacheEnabled" value="true"/>
Copier après la connexion

dans le mapper.xml correspondant :

Si vous n'avez pas besoin du cache de deuxième niveau, vous pouvez désactiver le cache de deuxième niveau dans les paramètres

<select useCache="false"></select>
Copier après la connexion

De cette façon à chaque fois Ils sont tous lus à partir de la base de données

Après avoir exécuté insert, update, delete, le cache sera rafraîchi (vider le cache) , vous pouvez le configurer pour qu'il ne s'actualise pas

Généralement non défini, le paramètre peut provoquer une lecture sale .

<insert flushCache="false"></insert>
Copier après la connexion

Petit exemple :

SqlSession session1 = factory.openSession();
   SqlSession session2 = factory.openSession();
   SqlSession session3 = factory.openSession();
   UserMapper mapper1 = session1.getMapper(UserMapper.class);
   UserMapper mapper2 = session2.getMapper(UserMapper.class);
   UserMapper mapper3 = session3.getMapper(UserMapper.class);
   //第一次请求,查询id为1的用户
   User user1 = mapper1.findUserById(1);
   System.out.println(user1);
   //close 将数据写入二级缓存
   session1.close();
   //清空二级缓存,UserMapper下的
   user1.setUsername("mmm");
   mapper3.updateUser(user1);
   session3.commit();
   //第二次查询会从缓存中找
   User user2 = mapper2.findUserById(1);
   System.out.println(user2);
   session2.close();
Copier après la connexion

Notez ici les objets à mettre en cache. L'interface Serilisable doit être implémentée car ces données mises en cache peuvent être désérialisées et écrites sur le disque dur ou ailleurs.

Ce qui précède est le cache de deuxième niveau Mybatis introduit par l'éditeur. J'espère qu'il vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !

Pour une compréhension plus approfondie des articles liés au cache de deuxième niveau de Mybatis, veuillez prêter attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal