全國(guó)咨詢(xún)/投訴熱線:400-618-4000

首頁(yè)技術(shù)文章正文

Mybatis的一級(jí)、二級(jí)緩存怎樣使用?

更新時(shí)間:2023-04-20 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

一級(jí)緩存

一級(jí)緩存基于PerpetualCache的HashMap本地緩存,其存儲(chǔ)作用域?yàn)镾ession,當(dāng)Session進(jìn)行flush或close之后,該Session中的所有Cache就將清空,默認(rèn)打開(kāi)一級(jí)緩存。

//2.獲取SqlSession對(duì)象,用它來(lái)執(zhí)行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 執(zhí)行 sql
//3.1 獲取UserMapper接口的代理對(duì)象
UserMapper userMapper1 = sqlSession.getMapper(UserMapper.class);
UserMapper userMapper2 = sqlSession.getMapper(UserMapper.class);

User user = userMapper1.selectById(6);
System.out.println(user);

System.out.println("---------------------");
User user1 = userMapper2.selectById(6);
System.out.println(user1);

二級(jí)緩存

二級(jí)緩存是基于namespace和mappe的作用域起作用的,不是依賴(lài)于SQL session,默認(rèn)也是采用PerpetualCache,HashMap存儲(chǔ)

//2.獲取SqlSession對(duì)象,用它來(lái)執(zhí)行sql
SqlSession sqlSession1 = sqlSessionFactory.openSession();

//3.執(zhí)行sql
//3.1獲取 UserMapper接口的代理對(duì)象
UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
User user1 = userMapper1.selectByld(6);
System.out.println(user1);
sqlSession1.close();
SqlSession sqlSession2 = sqlSessionFactory.openSession();
System.out.println("---------------------");
UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
User user2 = userMapper2.selectByld(6);
System.out.printin(user2);

//4.關(guān)閉資源
sqlSession2.close();

當(dāng)某一個(gè)作用域(一級(jí)緩存Session/二級(jí)緩存Namespaces)的進(jìn)行了新增、修改、刪除操作后,默認(rèn)該作用域下所有select中的緩存將被clear。

注意事項(xiàng):1,對(duì)于緩存數(shù)據(jù)更新機(jī)制,當(dāng)某一個(gè)作用域(一級(jí)緩存Session/二級(jí)緩存Namespaces)的進(jìn)行了新增、修改、刪除操作后,默認(rèn)該作用域下所有select中的緩存將被clear2,二級(jí)緩存需要緩存的數(shù)據(jù)實(shí)現(xiàn)Serializable接口3,只有會(huì)話提交或者關(guān)閉以后,一級(jí)緩存中的數(shù)據(jù)才會(huì)轉(zhuǎn)移到二級(jí)緩存中。


分享到:
在線咨詢(xún) 我要報(bào)名
和我們?cè)诰€交談!