1. Введение в кеш mybatis
Как и в большинстве структур настойчивости, Mybatis также обеспечивает поддержку кэша L1 и L2.
1. Кэш уровня 1:
Локальный кэш HashMap, основанный на PerpetualCache, имеет сессию сессии. После промывки или закрытия сессия все кэши в сеансе будут очищены.
2. Кэш уровня 2:
Кэш второго уровня такой же, как и кэш первого уровня, а по умолчанию есть постоянное хранилище и хранение. Разница в том, что его масштаб хранения - это Mapper (пространство имен), и он может настроить источник хранения, такой как ehcache.
3. Для механизма обновления данных кэша , когда выполняется определенная область (сеанс кэша первого уровня/пространства имен кэша второго уровня), все кэши в выборах по этой области будут очищены по умолчанию.
1.1. Mybatis Level 1 тест кэша
Пакет me.gacl.test; import me.gacl.domain.user; import me.gacl.util.mybatisutil; import org.apache.ibatis.session.sqlsession; import org.junit.test;/*** @author gacl*test*cash*/public class testonelevc {/** {/** rome 1-le-le-le-le-le-le-le-le-le-leve-levech {/* по умолчанию)*/@testpublic void testCache () {sqlSession session = mybatisutil.getSqlSession (); string atportion = "me.gacl.maping.usermapper.getUser"; пользователь пользователь = сеанс. ); System.out.println (пользователь); session.close ();/*. Это должен быть тот же сеанс. Если объект сеанса был закрыт (), его невозможно использовать */session = mybatisutil.getsqlsession (); user = session.selectone (оператор); system.out.println (user);/ *. Условия запроса одинаковы */user = session.selectone (оператор,); System.out.println (user);/ *. No Session.ClearCache () был выполнен для очистки кэша*/// session.clearcache (); user = session.selectone (оператор,); system.out.println (user);/*. Не было выполнено операции добавления/удаления (эти операции очищают кэш)*/session.update ("me.gacl.mapping.usermapper.updateuser", новый пользователь ("user",)); user = session.selectone (attervation,); System.out.println (user ",);}}}}}}}}}}}} 1.2. Тест кеша Mybatis уровня 2
1. Включите вторичный кэш и добавьте следующую конфигурацию в файл usermapper.xml
<mapper namespace = "me.gacl.mapping.usermapper"> <!-Включите кеш 2-го уровня-> <cache/>
2. Проверьте вторичный кэш
Пакет me.gacl.test; импортировать me.gacl.domain.user; import me.gacl.util.mybatisutil; import org.apache.ibatis.session.sqlsession; импорт org.apache.ibatis.session.sqlsessionFate; Testtwolevelcache {/** Кэш тестового уровня 2* Используйте два разных объекта SQLSession для выполнения запросов с одинаковыми условиями запроса. Загламенты SQL не будут отправлены во время второго запроса, но данные непосредственно извлекаются из кэша*/@testpublic void testcache () {string atportion = "me.gacl.mapping.usermapper.getUser"; sqlSessionFactActory = mybatisutil.getsqlSessionFactory (); // Open Differs SepsionSsions = SepsionSsion = SQLSENSENSENSESSENSENSENSENSENSENSENSENSENSENSENSENSENSENSENSENSENSENSENSENCESSENCESSESSENCESSENCESSENCESSENCENCERCESTORY (); factory.opensession ();; sqlSession session = factory.opensession (); // При использовании вторичного кэша пользовательский класс должен реализовать сериализуемый интерфейс ===> Пользователь реализует сериализуемый пользователь = Session.seectone (оператор,); session.commit (); // Я не понимаю, почему это место должно быть отправлено после того System.out.println ("user ="+user); // Поскольку используются два разных объекта sqlSession, даже если условия запроса одинаковы, кэш первого уровня не будет включен. user = session.selectone (anatter,); // session.commit (); system.out.println ("user ="+user);}} 1.3. Дополнительные инструкции для вторичного кеша
1. Все выбранные операторы в файле операторов сопоставления будут кэшированы.
2. Сопоставьте все операторы вставки, обновления и удаления в файле операторов обновлять кэш.
3. Кэш будет повторно подключен с использованием наименее недавно используемого (LRU, наименьшего недавно используемого) алгоритма.
4. Кэш будет обновляться в соответствии с указанным интервалом времени.
5. Кэш будет хранить объекты 1024.
Общие свойства тегов кеша:
<cache eviction = "fifo" <!-Стратегия утилизации первой в первую очередь-> flushInterval = "60000" <!-Автоматическое время обновления 60-е годы-> size = "512" <!-Кэш до 512 Справочных объектов-> readonly = "true"/> <!-Read-nely->
Я дам вам некоторые знания:
Как и Hibernate, у Mybatis также есть механизм кеша
Кэш уровня 1 основан на локальном кэше HashMap of PerpetualCache (Mybatis), а его объем - это сеанс, поэтому, когда сеанс совершает или закрывается, кэш будет очищен.
Кэш второго уровня также основан на PerpetualCache по умолчанию, но его можно использовать для создания источников хранения, таких как Ehcache.
Кэш кэша первого уровня кэша SQL, в то время как кэш кэша второго уровня кэширует объект результата. См. Следующий пример (уровень журнала Mybatis установлен на отладцию)