有关Mybatis中缓存的理解(个人)

区别

一级缓存(Local Cache)的作用域:一个SqlSession(底层是hashmap,线程不安全,所以每个Sqlsession不会共享一级缓存)
二级缓存(Second Level Cache)的作用域:namespace(底层是LinkedHashMap,线程安全,不同的SqlSession可以共享二级缓存)

Mybatis中缓存原理简图如下在这里插入图片描述

Demo

package com.cy.pj.sys.dao;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import com.cy.pj.sys.entity.SysRole;

@SpringBootTest
public class DaoMemoryTests {

	@Autowired
	private SqlSessionFactory sqlSessionFactory;
	//MyBatis一级缓存测试
	//特点:默认开启,不可以跨SqlSession共享。
	@Test
	public void testFirstLevelCache() {
		//1.获取sqlSession对象(DefaultSqlSession-线程不安全)
		SqlSession sqlSession=sqlSessionFactory.openSession();
		System.out.println("sqlSession="+sqlSession);
		//2.执行查询操作
		String statement="com.cy.pj.sys.dao.SysRoleDao.findPageObjects";
		Map<String,Object> parameterMap=new HashMap<>();
		parameterMap.put("name", "");
		parameterMap.put("startIndex", 0);
		parameterMap.put("pageSize", 3);
		List<SysRole> list=sqlSession.selectList(statement, parameterMap);
		System.out.println("list.size="+list.size());
		//使用同一个sqlSession执行同样的查询,第二查询会从cache中获取。
		list=sqlSession.selectList(statement, parameterMap);
		System.out.println("list.size="+list.size());
		//3.释放资源
		sqlSession.close();
	}
	@Test
	public void testSecondLevelCache() {
		doQueryRoles();
		doQueryRoles();
	}
	private void doQueryRoles() {
		//1.获取sqlSession对象(DefaultSqlSession-线程不安全)
		SqlSession sqlSession=sqlSessionFactory.openSession();
		System.out.println("sqlSession="+sqlSession);
		//2.执行查询操作
		String statement="com.cy.pj.sys.dao.SysRoleDao.findPageObjects";
		Map<String,Object> parameterMap=new HashMap<>();
		parameterMap.put("name", "");
		parameterMap.put("startIndex", 0);
		parameterMap.put("pageSize", 3);
		List<SysRole> list=sqlSession.selectList(statement, parameterMap);
		System.out.println("list.size="+list.size());
		//3.释放资源
		sqlSession.close();
	}
}

关于Mybatis使用的模式

~装饰模式:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值