ThreadLocal与缓存

1.ThreadLocal:线程容器,给线程绑定一个 Object 内容,后只要线程不变,可以随时取出.如果改变线程,无法取出内容

应用:

借助于线程绑定编写mybatis工具类

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

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtils {
	private static SqlSessionFactory factory;
	private static ThreadLocal<SqlSession>tl=new ThreadLocal<SqlSession>();
	static {
		try {
			InputStream in=Resources.getResourceAsStream("mybatis.xml");
//读取全局配置文件
			factory= new SqlSessionFactoryBuilder().build(in);
			
		} catch (IOException e) {
			
			e.printStackTrace();
		}
		
	}
//调用getSession方法,从线程容器中取出SqlSession对象
	public static SqlSession getSession(){
		SqlSession session = tl.get();
		if(session==null){
			tl.set(factory.openSession());
		}
		return tl.get();
	}
	
	public static void closeSession(){
		SqlSession session = tl.get();
		if(session!=null){
			session.close();
		}
		tl.set(null);
	}

}

2.开启mybatis中的缓存 

1. 应用程序和数据库交互的过程是一个相对比较耗时的过
2. 缓存存在的意义:让应用程序减少对数据库的访问,提升程序运行 效率

3. MyBatis 中默认 SqlSession 缓存开启

在Mapper.xml中添加

<cache readOnly="true"/>

3.1 同一个 SqlSession 对象调用同一个时,只有第一次访问 数据库,第一次之后把查询结果缓存到 SqlSession 缓存区(内存)中

3.2 缓存的是 statement 对象.(简单记忆必须是用一个)

3.2.1 在 myabtis 时一个对应一个 statement 对象

3.3 有效范围必须是同一个 SqlSession 对象

4. 缓存流程

4.1 步骤一: 先去缓存区中找是否存在 statement

4.2 步骤二:返回结果

4.3 步骤三:如果没有缓存 statement 对象,去数据库获取数据

4.4 步骤四:数据库返回查询结果

4.5 步骤五:把查询结果放到对应的缓存区中  

5. SqlSessionFactory 缓存

5.1 又叫:二级缓存

5.2 有效范围:同一个 factory 内哪个 SqlSession 都可以获取

5.3 什么时候使用二级缓存:

5.3.1 当数据频繁被使用,很少被修改

5.4 使用二级缓存步骤

5.4.1 在 mapper.xml 中添加

5.4.2 如果不写 readOnly=”true”需要把实体类序列化

5.5 当 SqlSession 对象 close()时或 commit()时会把 SqlSession 缓存 的数据刷(flush)到 SqlSessionFactory 缓存区中 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城南皮卡丘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值