Im vorherigen Artikel haben Sie den Cache der ersten Ebene von mybatis kennengelernt.
Im Vergleich zum Cache der ersten Ebene hat der Cache der zweiten Ebene einen größeren Umfang und kann von mehreren SqlSession gemeinsam genutzt werden.
In ähnlicher Weise sucht SQL beim Senden derselben Abfrage zuerst im Cache danach und fragt dann die Datenbank ab, wenn sie nicht gefunden werden kann.
Jeder Namespace-Mapper verfügt über einen eigenen Cache-Speicherplatz.
Wenn die Namespaces der beiden Mapper gleich sind, werden die durch Ausführen des Mappers abgefragten Daten im selben Cache der zweiten Ebene gespeichert.
Ähnlich gilt, wenn eine sqlSession ein Commit ausführt Der Cache der zweiten Ebene wird geleert.
Konfigurationsdatei (standardmäßig ohne Konfiguration aktiviert):
in sqlMapConfig.xml:
<setting name="cacheEnabled" value="true"/>
in der entsprechenden Mapper.xml:
Wenn Sie den Second-Level-Cache nicht benötigen, können Sie den Second-Level-Cache in den Einstellungen deaktivieren
<select useCache="false"></select>
Auf diese Weise werden jedes Mal alle aus der Datenbank gelesen
Nach dem Ausführen von Einfügen, Aktualisieren, Löschen wird der Cache aktualisiert (Cache leeren). , Sie können festlegen, dass die Aktualisierung nicht erfolgt
Im Allgemeinen nicht eingestellt, die Einstellung kann zu fehlerhaftem Lesen führen.
<insert flushCache="false"></insert>
Kleines Beispiel:
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();
Beachten Sie die hier zwischenzuspeichernden Objekte. Die Serilisierbare Schnittstelle muss implementiert werden, da diese zwischengespeicherten Daten möglicherweise deserialisiert und auf die Festplatte oder anderswo geschrieben werden.
Das Obige ist der vom Herausgeber eingeführte Mybatis-Cache der zweiten Ebene. Ich hoffe, er wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der chinesischen PHP-Website bedanken!
Für ein tieferes Verständnis der Artikel zum Second-Level-Cache von Mybatis beachten Sie bitte die chinesische PHP-Website!