Mybatis缓存

缓存:将相同查询条件的sql语句执行一遍后所得到的结果存在内存或者某种缓存介质当中,当下次遇到一模一样的查询sql时候不在执行sql与数据库交互,而是直接从缓存中获取结果,减少服务器的压力;
mybatis的查询缓存又分为一级缓存和二级缓存,一级缓存的作用范围为同一个sqlsession,而二级缓存的作用范围为同一个namespace和mapper


一级缓存:
1.Mybatis自带一级缓存默认开启也叫本地缓存
2.Mybatis一级缓存作用域在SqlSession之间
3.当执行查询时Mybatis会去当前SqlSession找,没有就会去数据库
3.当SqlSession关闭缓存销毁,也可clearCache()手动清理,当执行curd后
缓存失效,需重新访问数据库

//按id查,验证一级缓存 
	/*mybatis默认开启一级缓存。第一次查询后放入Sqlsession,范围是同一个session
	第二次相同sql查询从Sqlsession拿。commit后清空。观察日志发现sql只执行了一次*/
		public static void findId2() throws IOException{
			SqlSession session=MybatisUtil.getSession();
			StudentMapper sm=session.getMapper(StudentMapper.class);
			Student student=sm.FindstuNo(3);
			//模仿commit
			//session.commit();
			Student student1=sm.FindstuNo(3);
			System.out.println(student.getStuNo()+","+student.getStuName());
			System.out.println(student1.getStuNo()+","+student1.getStuName());
			session.close();
		}

二级缓存:
1.二级缓存也叫全局缓存,因为一级缓存作用域太低
2.Mybatis自带二级缓存,也可通过第三方缓存插件。需要手动开启
3.基于namespace级别的缓存
4.被缓存的对象需要序列化接口
5.手动开启配置,通过实现Cache接口可以自定义二级缓存
二级缓存工作机制
1.一个会话查询一条数据,该数据会被放入当前会话一级缓存
2.当前会话关闭对应一级缓存消失,该数据就会被放入二级缓存
3不同mapper有自己对应的缓存


在mapper.xml中配置

<!-- 声明开启二级缓存 -->
	<cache
	eviction="FIFO"
	flushlnterval="60000"
	size="512"
	readOnly="true"/>

这里一般只写

<cache"/>

手动设置全局缓存

<!-- 开启二级缓存 -->
		<setting name="cacheEnabled" value="true"/>

demo

/**
		 * 二级缓存
		 * mybatis默认没有开启二级缓存
		 * 准备缓存的对象必须序列化接口
		 * 1:mybatis自带二级缓存
		 * 范围:同一个namespace生成mapper对象
		 * 2第三方提供二级缓存
		 * @throws IOException
		 */
		public static void findId3() throws IOException{
			SqlSession session=MybatisUtil.getSession();
			StudentMapper sm=session.getMapper(StudentMapper.class);
			Student student=sm.FindstuNo(3);
			session.close();//,把一级缓存的放进二级
			//第二次查询
			SqlSession session2=MybatisUtil.getSession();
			StudentMapper sm2=session2.getMapper(StudentMapper.class);
			Student student2=sm2.FindstuNo(3);
			System.out.println(student.getStuNo()+","+student.getStuName());
			System.out.println(student2.getStuNo()+","+student2.getStuName());
			session2.close();
		}

二级缓存流程
查询:从二级缓存拿到数据
存放:暂时放到一级缓存待销毁
销毁:转移到二级缓存

python+opencv简谱识别音频生成系统源码含GUI界面+详细运行教程+数据 一、项目简介 提取简谱中的音乐信息,依据识别到的信息生成midi文件。 Extract music information from musical scores and generate a midi file according to it. 二、项目运行环境 python=3.11.1 第三方库依赖 opencv-python=4.7.0.68 numpy=1.24.1 可以使用命令 pip install -r requirements.txt 来安装所需的第三方库。 三、项目运行步骤 3.1 命令行运行 运行main.py。 输入简谱路径:支持图片或文件夹,相对路径或绝对路径都可以。 输入简谱主音:它通常在第一页的左上角“1=”之后。 输入简谱速度:即每分钟拍数,同在左上角。 选择是否输出程序中间提示信息:请输入Y或N(不区分大小写,下同)。 选择匹配精度:请输入L或M或H,对应低/中/高精度,一般而言输入L即可。 选择使用的线程数:一般与CPU核数相同即可。虽然python的线程不是真正的多线程,但仍能起到加速作用。 估算字符上下间距:这与简谱中符号的密集程度有关,一般来说纵向符号越稀疏,这个值需要设置得越大,范围通常在1.0-2.5。 二值化算法:使用全局阈值则跳过该选项即可,或者也可输入OTSU、采用大津二值化算法。 设置全局阈值:如果上面选择全局阈值则需要手动设置全局阈值,对于.\test.txt中所提样例,使用全局阈值并在后面设置为160即可。 手动调整中间结果:若输入Y/y,则在识别简谱后会暂停代码,并生成一份txt文件,在其中展示识别结果,此时用户可以通过修改这份txt文件来更正识别结果。 如果选择文件夹的话,还可以选择所选文件夹中不需要识别的文件以排除干扰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值