更新時(shí)間:2023年04月20日14時(shí)50分 來源:傳智教育 瀏覽次數(shù):
Mybatis 是一個(gè)流行的Java ORM(Object-Relational Mapping)框架,用于將數(shù)據(jù)庫和Java對(duì)象之間進(jìn)行映射。Mybatis框架提供了一級(jí)緩存和二級(jí)緩存,以提高應(yīng)用程序的性能。
Mybatis的一級(jí)緩存是默認(rèn)開啟的,它是指在同一個(gè)SqlSession對(duì)象中,如果執(zhí)行了相同的查詢語句,那么第二次執(zhí)行時(shí),Mybatis將會(huì)從緩存中獲取查詢結(jié)果,而不是再次去執(zhí)行SQL語句。這可以顯著提高查詢的性能。一級(jí)緩存是作用于SqlSession級(jí)別的,也就是在同一個(gè)SqlSession中執(zhí)行的查詢語句才會(huì)使用相同的緩存。
下面是一個(gè)簡(jiǎn)單的代碼演示:
SqlSession sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); // 第一次查詢 User user1 = userMapper.selectById(1); // 第二次查詢,從緩存中獲取結(jié)果 User user2 = userMapper.selectById(1);
在上面的代碼中,第一次查詢時(shí),Mybatis會(huì)執(zhí)行SQL語句并將結(jié)果存入緩存。第二次查詢時(shí),Mybatis會(huì)從緩存中獲取結(jié)果,而不是再次執(zhí)行SQL語句。
Mybatis的二級(jí)緩存是作用于Mapper級(jí)別的。它可以將同一個(gè)Mapper下的查詢結(jié)果緩存到內(nèi)存中,以減少對(duì)數(shù)據(jù)庫的訪問次數(shù)。當(dāng)多個(gè)SqlSession對(duì)象都使用同一個(gè)Mapper時(shí),它們可以共享這個(gè)緩存。二級(jí)緩存默認(rèn)是關(guān)閉的,需要手動(dòng)進(jìn)行配置。
下面是一個(gè)簡(jiǎn)單的代碼演示:
// 配置 UserMapper.xml 文件 <cache type="org.mybatis.caches.ehcache.EhcacheCache"/> // 在 Mybatis 配置文件中啟用二級(jí)緩存 <settings> <setting name="cacheEnabled" value="true"/> </settings> SqlSession sqlSession1 = sqlSessionFactory.openSession(); UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class); // 第一次查詢,從數(shù)據(jù)庫中獲取結(jié)果 User user1 = userMapper1.selectById(1); // 開啟新的 SqlSession SqlSession sqlSession2 = sqlSessionFactory.openSession(); UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class); // 第二次查詢,從緩存中獲取結(jié)果 User user2 = userMapper2.selectById(1);
在上面的代碼中,第一次查詢時(shí),Mybatis會(huì)執(zhí)行SQL語句并將結(jié)果存入緩存。第二次查詢時(shí),Mybatis會(huì)從緩存中獲取結(jié)果,而不是再次執(zhí)行SQL語句。這是因?yàn)榈诙€(gè)SqlSession對(duì)象與第一個(gè)SqlSession對(duì)象共享同一個(gè)Mapper的二級(jí)緩存。需要注意的是,為了使用二級(jí)緩存,需要將Mapper對(duì)象進(jìn)行序列化,否則會(huì)出現(xiàn)序列化異常。
北京校區(qū)