클라이언트는 동일한 SQL 쿼리 문을 데이터베이스 서버에 보냅니다. 매번 데이터베이스에 액세스하면 성능 저하가 발생합니다.
그래서 어떻게 개선 하는가?
Mybatis는 레벨 1 캐시에 대한 전략을 제공합니다.
sqlsession의 개방 및 닫기 사이에서 sqlsession 객체 (실제로 집행자)는 캐시 된 객체를 유지합니다. 데이터를 쿼리 할 때 먼저 캐시에서 데이터가 존재하는지 여부를 확인하고 존재하면 직접 검색됩니다. 존재하지 않으면 SQL 쿼리를 데이터베이스에 보내고 쿼리 된 데이터를 캐시에 저장하고 프로그램에 반환하십시오.
문제가 발생합니다.
프로그램이 첫 번째 및 두 번째 쿼리 중에 확인할 데이터베이스의 데이터를 변경하면 읽기 데이터가 잘못되게됩니다.
Dirty Reading은 실제로 mybatis가 sqlsession에서 commit () 메소드를 실행 한 후 캐시를 지우는 것입니다. 두 번째로 쿼리로 이동하더라도 여전히 데이터베이스에서 쿼리합니다.
캐시를 지우려면 SQLSESSION의 CLEARCACHE () 메소드를 수동으로 호출 할 수도 있습니다.
작은 예 :
@Test public void testCachelEver1 ()은 예외를 {sqlsession session = factory.opensession (); usermapper mapper = session.getMapper (usermpper.class); // 첫 번째 요청은 id 1 사용자 user = mapper.finduserByid (1)로 사용자를 쿼리하는 것입니다. System.out.println (사용자); // 데이터를 변경하면 캐시가 user.setusername ( "yyyy"); mapper.updateuser (사용자); 세션 .commit (); // 두 번째 쿼리는 사용자 user2 = mapper.finduserByid (1)를 찾습니다. System.out.println (user2); session.close (); }질문:
sqlsession이 닫히면 캐시가 지워집니다. 캐시를 사용하여 효율성을 향상시키는 방법은 무엇입니까?
좋아, 다음 기사에서는 Mybatis Level 2 캐시를 소개합니다.
위는 편집기가 소개 한 Mybatis 1 단계 캐시입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!