今天,在寫一個(gè)路由支付接口的時(shí)候,突然想起來數(shù)據(jù)量很大。需要不停的查詢數(shù)據(jù)比對(duì)數(shù)據(jù)。在發(fā)現(xiàn)使用JDK8之后的lambda表達(dá)式,并不能解決這個(gè)問題。
因?yàn)?,是需要?duì)數(shù)據(jù)進(jìn)行模糊查詢的。于是,就想到了MyBatis的一級(jí)緩存。使用之后發(fā)現(xiàn)Mybatis的一級(jí)緩存竟然失效了。(因?yàn)橛貌坏蕉?jí)緩存,就不需要在配置文件里面配置了)。
Google了半天,最后在一篇博客里面發(fā)現(xiàn)了解決方法。
MyBatis的一級(jí)緩存是指SqlSession。一級(jí)緩存的作用域是一個(gè)SqlSession。MyBatis默認(rèn)開啟一級(jí)緩存。
在同一個(gè)SqlSession中,執(zhí)行相同的查詢SQL,第一次會(huì)去查詢數(shù)據(jù)庫,并寫到緩存中;第二次直接從緩存中取。當(dāng)執(zhí)行SQL時(shí)兩次查詢中間發(fā)生了增刪改操作,則SqlSession的緩存清空。
你只需要在你的方法上加上@Transactional注解就行了。
但是,可能大家會(huì)想,因?yàn)橐粋€(gè)一級(jí)緩存就需要在查詢的service方法上加注解,很費(fèi)勁。
但是,我需要實(shí)現(xiàn)的功能是有CRUD中的CU的。所以,也必須加上注解。
即使加上事務(wù)注解的話,也沒關(guān)系啊。因?yàn)樾枰褂玫骄彺娴?code>service只能是極個(gè)別的,如果很多的話,則說明業(yè)務(wù)設(shè)計(jì)有問題了。
最后附上博客地址
https://blog.csdn.net/u013887008/article/details/80379938