zoukankan      html  css  js  c++  java
  • SSM(五)Mybatis配置缓存

    1.在没有配置的情况下,mybatis默认开启一级缓存。

    1 Object object=mapper.getXxx(object);
    2 Object object2=mapper.getXxx(object);

    打个断点测试一下就知道了。

    在同一个SqlSession中,第一次查询后,调用mapper相同方法,SqlSession会从一级缓存中取数据,而且得到的是相同的对象。不会发送SQL。

    如果SqlSession进行了提交,那么一级缓存将会清除。

     1 public void test(){
     2         SqlSession session = MyBatisUtil.getSession();
     3         IUserDAO mapper = session.getMapper(IUserDAO.class);
     4         UserOneToMany user = new UserOneToMany();
     5         user.setUsercode("zhangsan");
     6         UserOneToMany userOneToMany = mapper.getUserOneToManyBills(user);
     7         System.out.println("======"+userOneToMany);
     8         session.commit();
     9         UserOneToMany userOneToMany2 = mapper.getUserOneToManyBills(user);
    10         System.out.println("======"+userOneToMany2);
    11         session.close();
    12     }

    打印结果不同,且发送了两次SQL,获得了两个不同的对象:

     

    2.MyBatis开启二级缓存第一步:大配置中settings节点加入:<setting name="cacheEnabled" value="true"/>

    第二步:命名空间加入节点:<cache/>

    这里<cache/>节点可以设置得更详细些,比如:

    <cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>

    其中eviction代表回收策略(LRU|FIFO|SOFT|WEAK);flushInterval代表刷新间隔时间,单位是毫秒;size是引用数目,就是缓存中可以存放多少个对象;readOnly只读,缓存只能读取不能修改。

    简单说明下四个回收策略:

    1.LRU(默认):最近最少使用,移除最长时间不用的对象。

    2.FIFO:先进先出,按对象进入缓存的顺序移除它们。

    3.SOFT:软引用,移除基于垃圾回收器状态和软引用规则的对象。

    4.WEAK:弱引用,移除基于垃圾回收器状态和弱引用规则的对象。

    第三步:相应实体类实现Serializable接口

    测试方法不变,观察结果:

    首先,程序只发送了一次SQL。其次,第二次取到的数据是从缓存中获得的,同样获取的是两个不同的对象。

     

  • 相关阅读:
    orm 对象关系映射 指 表与类之间的映射 # 40
    事务 视图 触发器 函数 (内置) 存储过程 流程控制 索引 # 39
    exist 存在 Python操作mysql pymysql sql注入问题 # 38
    基本查询语句与方法 多表查询 # 37
    外键 #36
    存储引擎 索引 数据类型 约束条件 # 35
    mysql安装 登录 修改密码 库,表,记录(增删改查) # 34
    进程池和线程池 协程 # 33
    GIL全局解释器锁
    # 并发编程 -进程理论-进程的方法
  • 原文地址:https://www.cnblogs.com/tomasman/p/7668664.html
Copyright © 2011-2022 走看看