1、Session 在调用数据库查询功能之前,首先会在一级缓存中通过实体类型和主键进行查找,如果一级缓存查找命中且数据状态合法,则直接返回;
2、如果一级缓存没有命中,接下来 Session 会在当前 NonExists 记录(相当于一个查询黑名单,如果出现重复的无效查询可以迅速做出判断,从而提升性能)中进行查找,如果 NonExists 中存在同样的查询条件,则返回 null;
3、如果一级缓存查询失败则查询二级缓存,如果二级缓存命中则直接返回;
4、如果之前的查询都未命中,则发出 SQL 语句,如果查询未发现对应记录则将此次查询添加到 Session 的NonExists 中加以记录,并返回null;
5、根据映射配置和 SQL 语句得到 ResultSet,并创建对应的实体对象;
6、将对象纳入 Session(一级缓存)的管理;
7、如果有对应的拦截器,则执行拦截器的 onLoad() 方法;
8、如果开启并设置了要使用二级缓存,则将数据对象纳入二级缓存;
9、返回数据对象。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.