Mybatis三

Posted xuweiweiwoaini

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis三相关的知识,希望对你有一定的参考价值。

1 Mybatis的缓存

1.1 Mybatis的缓存机制

  • Mybatis包含非常求昂达的查询缓存特性,它可以非常方便的配置和定制。缓存可以极大的提高查询效率。

 

  • Mybatis系统中默认定义了一级缓存和二级缓存。
    • ①默认情况下,只有一级缓存开启。
    • ②二级缓存需要手动开启和配置,它是基于namespace级别的缓存。
    • ③为了提高扩展性。Mybatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存。  

1.2 什么是一级缓存

  • 和数据库同一次会话期间查询到数据会放在一级缓存中。以后如果需要获取相同的数据,直接从缓存中拿,没必要再去从数据库中查询,提高了效率。

1.3 证明Mybatis的一级缓存

  • 强调一点:必须在同一次会话期间。

 

  • 示例:
    • EmployeeMapper.java  
package com.xuweiwei.mybatis.mapper;

import com.xuweiwei.mybatis.pojo.Employee;
import org.apache.ibatis.annotations.ResultType;
import org.apache.ibatis.annotations.Select;

public interface EmployeeMapper {

    @Select("select id as id,last_name as lastName,gender as gender,email as email from employee where id = #{id}")
    @ResultType(Employee.class)
    Employee getBemployeeById(Integer id);

}
    • 测试  
package com.xuweiwei.mybatis.test;

import com.xuweiwei.mybatis.mapper.EmployeeMapper;
import com.xuweiwei.mybatis.pojo.Employee;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MybatisTest {

    /**
     * 测试增加
     *
     * @throws IOException
     */
    @Test
    public void test() throws IOException {
        /**
         * 创建SqlSessionFactory对象
         */
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        /**
         * 创建SqlSession
         */
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        EmployeeMapper employeeMapper = sqlSession.getMapper(EmployeeMapper.class);

        Employee employee = employeeMapper.getBemployeeById(1);
        System.out.println("====employee===:"+employee);


        Employee employee2 = employeeMapper.getBemployeeById(1);
        System.out.println("====employee2===:"+employee2);

        sqlSession.close();
    }
}

技术分享图片

1.4 Mybatis的一级缓存失效情况

  •  一级缓存失效(就是没有使用到当前的一级缓存的勤快,效果就是,还需要向数据库发送查询)

 

  • 一级缓存失效情况:
  • ①sqlSession不同。
  • ②sqlSession相同,查询条件不同。(当前一级缓存中还没有这个数据)
  • ③sqlSession相同,两次查询之间执行了增删改操作(这次操作可能会对当前数据有影响,所以,一级缓存中的数据当然不能用)
  • ④sqlSession相同,但是手动清空了一级缓存。

 

以上是关于Mybatis三的主要内容,如果未能解决你的问题,请参考以下文章

日常Geetest滑动验证码(三代canvas版)处理小结(以B站登录验证为例)

markdown [mybatis参考]关于mybatis #mybatis的一些片段

mybatis学习(39):动态sql片段

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis动态sql片段与分页,排序,传参的使用

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段