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