JavaEE企业级项目开发(第3版)教学课件微课3-9:MyBatis一级缓存.pptx
主讲人:吴佳云
延迟符
MyBatis一级缓存
动态SQL与关联映射
什么是MyBatis缓存
在实际项目开发中,通常对数据库查询的性能要求很高,MyBatis中通过缓存机制来减轻数据库压力,提高数据库性能。Mybatis的查询缓存分为一级缓存和二级缓存,下面将分别对MyBatis的一级缓存和二级缓存进行详细讲解。
一级缓存
在应用运行过程中,我们有可能在一次数据库会话中,执行多次查询条件完全相同的SQL,MyBatis提供了一级缓存的方案优化这部分场景。MyBatis的一级缓存是SqlSession级别的缓存,具体执行过程如图所示。
一级缓存
MyBatis的配置文件中,添加如下语句,就可以使用一级缓存。
settings
!--开启MyBatis一级缓存--
settingname=localCacheScopevalue=SESSION/
/settings
mybatis-config.xml
其中value共有两个选项,SESSION或者STATEMENT,MyBatis默认配置是SESSION级别,即在一个MyBatis会话中执行的所有语句,都会共享这一个缓存。另一种是STATEMENT级别,可以理解为缓存只对当前执行的这一个Statement有效。
一级缓存案例
(1)数据库准备
CREATETABLEtb_book(
`id`INTNOTNULLAUTO_INCREMENT,
`name`VARCHAR(45)NULL,
`price`DECIMAL(10,2)NULL,
PRIMARYKEY(`id`));
INSERTINTOtb_book(`id`,`name`,`price`)VALUES(1001,JavaEE企业级项目开发,50.00);
一级缓存案例
(2)实体类
@Data
publicclassBook{
/**id*/
privateIntegerid;
/**书名*/
privateStringname;
/**价格*/
privateBigDecimalprice;
}
Book.java
一级缓存案例
(3)创建Mapper接口
BookMapper.java
publicinterfaceBookMapper{
BookgetById(Integerid);
IntegerupdateBy(Bookbook);
}
一级缓存案例
(4)创建Mapper映射文件
BookMapper.xml
mappernamespace=com.my.ccit.mapper.BookMapper
selectid=getByIdresultType=com.my.ccit.entity.BookparameterType=integer
select*fromtb_book
whereid=#{id}
/select
updateid=updateByparameterType=com.my.ccit.entity.Book
updatetb_book
set
iftest=name!=nullname=#{name},/if
iftest=price!=nullprice=#{price},/if
/set
whereid=#{id}
/update
/mapper
一级缓存案例
(5)log4j日志
!--日志log4j依赖包--
dependency
groupIdlog4j/groupId
artifactIdlog4j/artifactId
version1.2.17/version
/dependency
pom.xml
perties
#全局日志配置
#log4j.rootLogger=DEBUG,stdout
log4j.rootLogger=stdout
#控制台输出配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout