文档详情

JavaEE企业级项目开发(第3版)教学课件微课3-9:MyBatis一级缓存.pptx

发布:2025-03-05约3.01千字共11页下载文档
文本预览下载声明

主讲人:吴佳云

延迟符

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

显示全部
相似文档