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的一些片段