一:缓存
应用程序和数据库交互的过程是一个相对比较耗时的过程。
缓存存在的意义:让应用程序减少对数据库的访问,提升程序运行效率。
Mybatis中默认SqlSession缓存开启,
缓存中存放的是statement对象,在MyBatis中一个select对应一个statetment对象,有效范围必须是同一个sqlsession对象,
同一个sqlsession对象,对应同一个select标签,对应同一个statement.
下例中两个select对应两个statement对象,运行的时候两条sql命令。
LogMapper.xml:
Test.java:
下例中两个不同的sqlsession,对应执行两个sql:
Test.java中:
二:存储过程
数据库所在的服务器中的一块内存中存在类似java的方法,方法中存在多个sql逻辑,这个方法叫做数据库的存储过程,客户端访问数据库的时候,不需要执行多个sql,只需要执行这个方法即可。
好处:1减少了网络流量 2因为sql已经存在,不需要编译,提高了效率 缺点:存储过程内存占用率大
LogMapper.xml中:
statementType默认为STATEMENT,其中的CALLABLE代表的就是存储过程
三:二级缓存(sqlSessionFactory缓存,一级为sqlSession缓存)
当前命名空间下的select放入二级缓存:
Test.java:
在执行session.close()的时候,session缓存放入二级缓存。
缓存流程: