Mybatis-----缓存与简单配置

尊重原创。该文章是对 https://www.cnblogs.com/jian0110/p/9387941.html 进行了简单整理,便于自己理解。

1、Mybatis简单配置介绍
  本文介绍的是基于XML的配置,并不是关于注解的Mybatis配置。当然复杂SQL情况下都建议使用XML配置。

(1)配置步骤
  
编写POJO即JavaBean,最终的目的是将数据库中的查询结果映射到JavaBean上;
配置与POJO对应的Mapper接口:里面有各种方法,对应mapper.xml中的查询语句;
配置与POJO对应的XML映射:编写缓存,SQL查询等;
配置mybatis-config.xml主要的Mybatis配置文件:配置数据源、扫描mapper.xml等。

(2)配置总结
  可以这么总结Mybatis或者帮助理解Mybatis的配置:
 
一切Mybatis配置都是为了创建SqlSession进行SQL查询;
归根结底程序代码中我们屏蔽了各种配置映射,只显式调用使用Mapper接口,那么接口实现类的获得是通过SqlSession.getMapper()获得;
那么mapper接口实现类的获得是通过mybatis-config.xml->SqlSessionFactoryBuilder- >SqlSessionFacotry->SqlSession->mapper;
2、Mybatis生命周期 
  正确理解SqlSessionFactory、SqlSessionFactoryBuilder、SqlSession和Mapper的生命周期对于优化Mybatis尤为重要,这样可以使Mybatis高效正确完成;同为重要时Mybatis的生命周期对于理解Myabtis缓存的配置也尤为重要,我这里只做简单的文字介绍(其实也好理解):

(1)SqlSessionFactoryBuilder:作用就是创建一个构建器,一旦创建了SqlSessionFactory,它的任务就算完成了,可以回收。

(2)SqlSessionFactory:作用是创建SqlSession,而SqlSession相当于JDBC的一个Connection对象,每次应用程序需要访问数据库,我们就要通过SqlSessionFactory创建一个SqlSession,所以SqlSessionFactory在整Mybatis整个生命周期中(每个数据库对应一个SqlSessionFactory,是单例产生的)。

(3)SqlSession:生命周期是存在于请求数据库处理事务的过程中,是一个线程不安全的对象(在多线程的情况下,需要特别注意),即存活于一个应用的请求和申请,可以执行多条SQL保证事务的一致性。

(4)Mapper:是一个接口,并没有实现类它的作用是发送SQL,返回我们需要的结果,或者发送SQL修改数据库表,所以它存活于一个SqlSession内,是一个方法级别的东西。当SqlSession销毁的时候,Mapper也会销毁。

3、Myabtis缓存介绍
  (1)系统缓存:包括一级缓存与二级缓存

一级缓存:默认情况下Myabtis对于同一个SqlSession开启一级缓存

在默认没有配置的情况下,只会开启一级缓存(只针对同一个SqlSession而言);
在参数与SQL完全一样的情况下并且不声明刷新缓存没超时的,使用同一个SqlSession对象调用同一个Mapper方法时(SqlSession对象生命周期为方法级别),SqlSession只会取出当前缓存数据,不会再到数据库中进行查询;
如果不同的SqlSession,即使同一个Mapper也会进行到数据库中进行不同的查询,即不同的SqlSession一级缓存是无效的。
  二级缓存:在不同SqlSession中所有相同的SELECT语句将会被缓存
  
  这里可以结合SqlSessionFactory等的生命周期能加深理解

不同的SqlSession是隔离的,为了解决这个问题,我们可以在SqlSessionFactory层面上设置二级缓存提供各个对象SqlSession
二级缓存默认是不开启的,需要进行配置,Mybatis要求返回的POJO必须是可序列化的,即POJO实现Serializable接口。
  缓存的配置只需要在XML配置即可,或者指定算法,刷新时间间隔,缓存状态,大小等


    A. 映射语句文件中所有select语句将会被缓存;

B. 映射语句文件中所有insert、update和delete语句会被刷新缓存;

C. 缓存使用默认的LRU最近最少使用算法回收;

D. 根据时间表,缓存不会任何时间顺序刷新;

E. 缓存会存储列表集合或对象的1024个引用

F. 缓存被视为可read/write的缓存,意味着是不可以被共享的,而可以被安全地修改。

(2)自定义缓存:结合Redis等主流缓存配置

我们可以使用比如现在比较火的Redis缓存,需要实现Myabtis为我们提供的接口org.apache.ibatis.cache.Cache。虽然现在主流Mybatis用的都是自定义缓存,但是这里先不过多介绍,我一步一步来学习记录!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值