summary
MyBatis
MyBatis是怎么判断某两次查询是完全相同的查询?
条件一:要求查询的StatementId必须相同,否则无法命中缓存,即使两个查询语句、参数等完全一样。
条件二:要求传递给SQL的查询参数必须相同,否则无法命中缓存
条件三:要求分页参数必须相同,否则无法命中缓存。缓存粒度是整个分页查询结果,而不是结果中的每个对象。
条件四:要求传递给JDBC的SQL必须完全相同。
条件五:要求执行环境必须相同。
名称一样
参数一样
分页一样
SQL一样
以上条件满足其一都会命中缓存
mybatis 一级缓存 命中原则:
接口方法名一致 ,mapper中查询标签id相同
在mapper中的 实际参数 必须一致
分页参数必须相同,否则无法命中缓存
传入数据库中的sql语句必须是一致的
要求环境一致
一级缓存命中条件
课程总结
MyBatis通过以下五种条件判断某两次查询时完全相同的查询:
StatementID、查询参数、分页参数、SQL语句、环境
条件五:要求执行环境必须相同。
条件四:要求传递给数据库的SQL语句必须完全相同。
条件三:要求分页参数必须相同,否则无法命中缓存。缓存力度使整个分页查询结果,而不是结果的每个对象。
条件二:要求传递给SQL的查询参数必须相同,否则无法命中缓存。
MyBatis一级缓存命中原则
条件一:要求查询的StatementId必须相同,否则无法命中缓存,即使两个查询语句、参数等完全一样。
mybatis命中缓存的原则(必须同时满足):
1、statementid:即mapper接口中的方法,也就是xml文件中select语句的id
2、查询参数值必须相同
3、分页参数(实际上是2的一种特殊情况)必须相同
4、sql语句必须相同(where 1=1 and a=1和where a=1是两个不同的sql语句)
5、mybatis配置文件中的enviroenment值
mybatis使用缓存的条件:
条件一:查询语句的id必须相同。
条件二:查询的参数必须相同。
条件三:分页参数必须相同。
条件四:sql语句必须相同。
条件五:要求执行的环境必须相同。