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

使用二级缓存

  • 1)需要在全局配置文件中开启缓存(默认开着的)
  • 2)需要在mapper中设置caceh即可
  • 3)每个会话执行完,要关流close,才会将查询是数据放入缓存
  • 4)实体类需要系列化,实现Serializable接口
posted @   卡卡罗特kk  阅读(8)  评论(0编辑  收藏  举报
相关博文:
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
展开