Mybatis三

$和#符号的区别

  • {} 相当于是预处理语句,会将# 换成占位符? ,字符串等数据赋值时自动拼接引号,可以避免SQL注入

  • ${} 相当于是处理语句, 直接原样将数据取出 ,直接拼接

Mybatis缓存

缓存主要目的是为了 提高查询效率 .缓存其实就是一个内存空间,存储在程序的某个地方,存储数据.
mybatis支持缓存的,且有两级缓存

  • 一级缓存
  • 二级缓存

有无缓存:

无缓存:用户在访问相同数据时,需要发起多次对数据库的直接访问,导致产生大量IO、读写硬盘的操
作,效率低下
有缓存:首次访问时,查询数据库,将数据存储到缓存中;再次访问时,直接访问缓存,减少IO、硬盘
读写次数、提高效率

MyBatis的 一级缓存是默认的 .无需配置,自动实现.
默认的 一级缓存是SqlSession级别 ,是指同一个SqlSession发起的多次查询同一条数据,会使用缓存.
image

ps:: Mybatis内部存储缓存使用的是一个HashMap对象,key为 hashCode + sqlId + sql 语句。而value值就
是从查询出来映射生成的java对象。

关闭一级缓存

一级缓存也叫本地缓存(LocalCache),Mybatis的一级缓存是会话级别(SqlSession)层面进行缓存
的。Mybatis的一级缓存是默认开启的。开发项目中不需要做任何配置,但是如果想关闭一级缓存,可以在mybatis配置文件的settings下面使用localCacheScopde=statement来关闭。

二级缓存

二级缓存是Mapper级别 ,比SqlSession级别范围更大.
使用时需要手动设置

  • 1)需要在全局配置文件中开启缓存(默认开着的
<settings>
<!-- 开启缓存(默认就是true) -->
<setting name="cacheEnabled" value="true"/>
</settings>
  • 2需要在mapper中设置caceh即可

使用二级缓存

  • 1)需要在全局配置文件中开启缓存(默认开着的)
  • 2)需要在mapper中设置caceh即可
  • 3)每个会话执行完,要关流close,才会将查询是数据放入缓存
  • 4)实体类需要系列化,实现Serializable接口
posted @ 2023-06-10 11:51  卡卡罗特kk  阅读(21)  评论(0)    收藏  举报