缓存

默认开启一级缓存(我i发关闭),sqlSession级别。

  • 一级缓存
    • sqlsession级别,同一个sqlSession(参数和sql完全一样的情况下)调用同一个Mapper方法,只执行一次sql。因sqlSession第一次查询后,mybatis会将其放在缓存中,再次查询(select)没有要求刷新直接获取缓存。增删改,commit(),close()时也会清空。
    • 手动清空缓存:使用sqlsession调用clearCache()方法。
    • 如何判断同一个sql?
    1. 传入的statementId
    2. 查询要求结果集中的结果范围
    3. 查询产生的最终要传递给jdbc java.sql.Preparedstatement的sql语句字符串
    4. 传递给java.sql.Statement要设置的参数值。

image.png

  • 二级缓存

    • 二级缓存是Application级别的缓存,默认不开启,实现二级缓存的时候,mybatis要求返回的pojo必须是可序列化的(因不一定存在内存中)。二级缓存存放的是数据而不是对象。
    • 配置方法:

      • config.xml配置支持

        1. <settings>
        2. <srtting name="cacheEnabled" value="true"/>
        3. </settings>
      • 映射配置文件开启 ```xml

- 注解,Dao的类名上添加@CacheNamespace(blocking = true)注解 - 缓存意味着 1. 映射语句的所有select将会被缓存 1. 映射语句的所有insert、update和delete语句会刷新缓存。 1. 缓存默认LRU(最近最久未使用使用)算法回收。(常用的放栈顶,满了丢栈底) ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12844611/1630333309483-430fbb86-843a-4de4-b660-09e7d4a8cb0b.png#clientId=ufc67ab63-3bc8-4&from=paste&height=369&id=ue608dc91&margin=%5Bobject%20Object%5D&name=image.png&originHeight=738&originWidth=965&originalType=binary&ratio=1&size=179406&status=done&style=none&taskId=u9dbce3f0-ac4d-4cc7-ac3c-063ccfc59fc&width=482.5) <a name="Z1OER"></a> ### 支持多种数据库 [链接](https://blog.csdn.net/qq_35981283/article/details/79503571) - Mybatis配置java @Configuration @MapperScan(“com.xx.xx.**.mapper“) public class MybatisPlusConfig{ //自动识别使用的数据库 //不指定databaseId说明sql支持所有库 @Bean public DatabaseIdProvider getDatabaseIdProvider(){ DatabaseIdProvider databaseIdProvider = new DatabaseIdProvider(); Properties properties = new Properties(); properties.setProperty(“MySQL”,”mysql”); properties.setProperty(“Oracle”,”oracle”); properties.setProperty(“DB2”,”db2”); properties.setProperty(“H2”,”h2”); properties.setProperty(“HSL”,”hsql”); properties.setProperty(“PostgreSQL”,”postgresql”); properties.setProperty(“Sybase”,”sybase”); databaseIdProvider.setProperties(properties); return databaseIdProvider; } } - 项目配置yaml database: type: oracle # mybatis设置 mybatis: mapper-locations: classpath:mapper/.xml configuration: database-id: ${database.type} log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - XMLxml

```