zoukankan      html  css  js  c++  java
  • Mybatis缓存(一)

    1、什么是缓存

    Mybatis提供缓存,用于减轻数据压力,提高数据库性能。

    2、Mybatis缓存分类

    Mybatis的缓存分为一级缓存和二级缓存。

    Mybatis的一级缓存

    1、一级缓存的范围

     1. 一级缓存是SqlSession级别的缓存。
     2. 在操作数据库时需要构造SqlSession,在SqlSession中有一个HashMap结构的数据结构,用来存储一级缓存。
     3. 一级缓存是SqlSession级别的缓存,因此不同的SqlSession对象之间的缓存是互不影响的,每个SqlSession对象都有自己的缓存。
     4. Mybatis的一级缓存是默认开启的。

    2、工作原理

    说明:

     1. 当一次执行查询的时候,首先会去查询一级缓存,如果一级缓存中没有数据,然后才回去查询数据库,数据库返回后会将返回的数据保存到一级缓存之中。
     2. 第二次再去查询相同的数据时,就会直接从一级缓存中取数据,不再需要去查询数据库。
     3. 如果在两次查询之间执行了SqlSession的commit操作(执行插入、更新、删除),则会清空一级缓存,这样是为了防止读到脏数据。

    3、一级缓存的测试

     1. mapper.xml文件

      <select id="findUser" parameterType="int" resultType="User">
            SELECT * FROM User WHERE id = #{value}
        </select>
    
        <select id="updateUser" parameterType="User" >
            UPDATE  User SET username=#{username}  WHERE id = #{id}
        </select>
    

     2. mapper接口文件

    public User findUser(int id) throws Exception;
    public User updateUser(User user) throws Exception;
    

     3. 测试代码

      public void testFi() throws Exception{
            SqlSession session = sessionFactory.openSession();
            Mapper mapper = session.getMapper(Mapper.class);
            //第一次查询,会发送SQL语句,去数据库查询
            User user = mapper.findUser(1);
            System.out.println(user);
            //执行修改的commit操作
            user.setUsername("小明");
            mapper.updateUser(user);
            session.commit();
            //第二次查询,如果没有执行commit操作,直接在缓存中取数据,不会发生sql语句查询数据库
            //如果执行了commit操作,会发生sql语句查询数据库
            User user1 = mapper.findUser(1);
            System.out.println(user1);
    
        }
    

    4、一级缓存的应用

     1. 在实际开发中,是将Mybatis和Spring进行整合开发,事务的控制放在service中。
     2. 一个service中会存在很多的方法去调用mapper方法。
     3. 如果执行两次service去调用同一个mapper方法,不会走一级缓存,因为第一次调用结束会清空一级缓存。
     4. 一个SqlSession方法结束时,会关闭SqlSession对象,关闭时会清空一级缓存。

  • 相关阅读:
    Python基础-博客
    已开发程序查询
    新语法
    html基础
    python操作excel
    Selenium
    练习2---(request,ajax爬取头条数据)
    练习1---request+正则(猫眼电影)
    框架---scrapy(基本用法)
    框架---Scrapy (框架安装)
  • 原文地址:https://www.cnblogs.com/jack1995/p/7260724.html
Copyright © 2011-2022 走看看