mybatis 4

Scroll Down

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对象共享缓存

注意,二级缓存中存放的是数据,不是对象

二级缓存的使用步骤

  1. 让Mybatis框架支持二级缓存

    <setting name="cacheEnabled" value="true"/>
    
  2. 让当前的映射文件支持二级缓存

    <cache/>
    
  3. 让当前操作支持二级缓存

    <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);