缓存
默认开启一级缓存(我i发关闭),sqlSession级别。
- 一级缓存
- sqlsession级别,同一个sqlSession(参数和sql完全一样的情况下)调用同一个Mapper方法,只执行一次sql。因sqlSession第一次查询后,mybatis会将其放在缓存中,再次查询(select)没有要求刷新直接获取缓存。增删改,commit(),close()时也会清空。
- 手动清空缓存:使用sqlsession调用clearCache()方法。
- 如何判断同一个sql?
- 传入的statementId
- 查询要求结果集中的结果范围
- 查询产生的最终要传递给jdbc java.sql.Preparedstatement的sql语句字符串
- 传递给java.sql.Statement要设置的参数值。
二级缓存
- 二级缓存是Application级别的缓存,默认不开启,实现二级缓存的时候,mybatis要求返回的pojo必须是可序列化的(因不一定存在内存中)。二级缓存存放的是数据而不是对象。
配置方法:
config.xml配置支持
<settings>
<srtting name="cacheEnabled" value="true"/>
</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
- XML
xml
```