package com.et.mybatis.cache;
import java.io.InputStream;
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.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
/**
* 缓存的意义在于 减少和数据库的交互的次数
* @author Administrator
*
*/
public class TestMybatis {
/**
* 获取Sqlsession对象 他是sql操作的主类
* @return
*/
public SqlSession openSession(){
InputStream inputStream=TestMybatis.class.getResourceAsStream("/mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=sqlSessionFactory.openSession();
return session;
}
/**
* 一级缓存 也就是SqlSession级别的缓存
* 相同的session对象 相同的条件查询的结果 如果已经被查询过一次 下一次去查询直接从缓存中获取
*/
@Test
public void testCache(){
SqlSession session=openSession();
Arctice arc=session.selectOne("cache.selectArcticle",1);
System.out.println(arc);
arc=session.selectOne("cache.selectArcticle",2);
System.out.println(arc);
}
/**
* 不同的session之间不能共享缓存
*/
@Test
public void testSessionCache(){
SqlSession session=openSession();
Arctice arc=session.selectOne("cache.selectArcticle",1);
System.out.println(arc);
SqlSession session1=openSession();
arc=session1.selectOne("cache.selectArcticle",1);
System.out.println(arc);
}
/**
* 二级缓存是sessionFacotry级别的缓存 二级缓存必须依赖外部缓存 比如ehcache
* 相同的sessionFactory对象 必须要关闭上一次操作的session 对象必须要实现序列化接口
* 相同的条件查询的结果 如果已经被查询过一次 下一次去查询直接从缓存中获取
*/
@Test
public void testSessionFactoryCache(){
InputStream inputStream=TestMybatis.class.getResourceAsStream("/mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过同一个SqlSessionFactory对象来创建session
SqlSession session=sqlSessionFactory.openSession();
Arctice arc=session.selectOne("cache.selectArcticle",1);
System.out.println(arc);
session.close();
SqlSession session1=sqlSessionFactory.openSession();
arc=session1.selectOne("cache.selectArcticle",1);
System.out.println(arc);
}
}
mybatis缓存
最新推荐文章于 2023-05-30 19:11:15 发布