mybatis 缓存
延迟加载
在真正使用数据的时候才发起查询,不用的时候就不查询,用的时候才查询
一对多,多对多,延迟加载
立即加载
不管用不用,只要一调用方法,发起查询
多对一,一对一立即加载
延迟加载的开启
<settings>
<setting name="aggressiveLazyLoading" value="false"/>
<setting name="LazyLoadingEnabled" value="true"/>
</settings>
且查询中使用子查询方式
mybatis中缓存
使用缓存的情况
数据查询并且不经常改变的
数据的正确与否对最终结果影响不大
缓存的好处
减少与数据库的交互次数,提高执行效率
一级缓存
指SqlSession对象的缓存,当我们执行查询之后,查询的结果会同时存到SqlSession为我们提供的Map。当我们再次查询同样的数据,mybatis会去SqlSession中查找,有的话拿出来用,当SqlSession消失,一级缓存消失。
一级缓存清空的时机
数据库中的数据发生改变,其实这个记录在sqlSession中,如果是别的SqlSession发生了更改,也不会去清空缓存
二级缓存
指Mybatis中的缓存,由同一个SqlSessionFactory对象创建的SqlSession对象共享缓存
注意,二级缓存中存放的是数据,不是对象
二级缓存的使用步骤
-
让Mybatis框架支持二级缓存
<setting name="cacheEnabled" value="true"/>
-
让当前的映射文件支持二级缓存
<cache/>
-
让当前操作支持二级缓存
<select id="findAll" resultMap="userMap" useCache="true"> select * from users </select>
使用注解开发
如果使用注解开发,但是对应的xml中也创建了,mybatis会报错
Log4j日志
在mybatis中配置日志
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
注意名字不要写错,大小写问题,无空格
Log4j 配置
#### 配置根 ###
log4j.rootLogger = debug,console,fileAppender
#### 配置输出到控制台 ###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
#### 配置输出到文件 ###
log4j.appender.fileAppender = org.apache.log4j.FileAppender
log4j.appender.fileAppender.File = logs/log.log
log4j.appender.fileAppender.Append = true
log4j.appender.fileAppender.Threshold = DEBUG
log4j.appender.fileAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
Logger 对象
Logger logger = Logger.getLogger(某个类的class);