Mapper@Test单元测试01

本文详细介绍了如何进行MyBatis的二级缓存测试,包括在SqlMapConfig.xml中开启二级缓存,禁止二级缓存的配置,以及MyBatis与Ehcache的整合步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.开启二级缓存

config/SqlMapConfig.xml

<span style="white-space:pre">	</span><settings>
		<setting name="lazyLoadingEnabled" value="true" />
		<setting name="aggressiveLazyLoading" value="false" />
		<strong><!-- 开启二级缓存 -->
		<setting name="cacheEnabled" value="true" /></strong>
	</settings>


test单元测试

	// 二级缓存测试
	@Test
	public void testCache1() throws Exception{
		SqlSession sqlSession1 = sqlSessionFactory.openSession();
		SqlSession sqlSession2 = sqlSessionFactory.openSession();
		SqlSession sqlSession3 = sqlSessionFactory.openSession();
		
		UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
		// 第一次发起请求
		User user1 = userMapper1.findUserById(1);
		System.out.println(user1);
		
		sqlSession1.close();
		
		// 使用sqlSession3执行commit()操作
		UserMapper userMapper3 = sqlSession3.getMapper(UserMapper.class);
		User user = userMapper3.findUserById(1);
		user.setUsername("张明明");
		userMapper3.updateUser(user);
		// 执行提交,清空二级缓存
		sqlSession3.commit();
		sqlSession3.close();
		
		// 第二次发起请求
		UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
		User user2 = userMapper2.findUserById(1);
		System.out.println(user2);
		
		sqlSession2.close();
	}


2.开启禁止二级缓存

src/mapper包UserMapper.xml配置文件

	<!-- R  根据id查询一条记录结果 -->
	<select id="findUserById" parameterType="int" resultType="user" <strong><span style="color:#ff0000;">useCache="false"</span></strong>>
		SELECT * FROM USER WHERE id=#{value}
	</select>



test单元测试

	// 二级缓存测试
	@Test
	public void testCache1() throws Exception{
		SqlSession sqlSession1 = sqlSessionFactory.openSession();
		SqlSession sqlSession2 = sqlSessionFactory.openSession();
		SqlSession sqlSession3 = sqlSessionFactory.openSession();
		
		UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
		// 第一次发起请求
		User user1 = userMapper1.findUserById(1);
		System.out.println(user1);
		
		sqlSession1.close();
		
//		// 使用sqlSession3执行commit()操作
//		UserMapper userMapper3 = sqlSession3.getMapper(UserMapper.class);
//		User user = userMapper3.findUserById(1);
//		user.setUsername("张明明");
//		userMapper3.updateUser(user);
//		// 执行提交,清空二级缓存
//		sqlSession3.commit();
//		sqlSession3.close();
		
		// 第二次发起请求
		UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
		User user2 = userMapper2.findUserById(1);
		System.out.println(user2);
		
		sqlSession2.close();
	}


3.mybatis整合ehcache

src/mapper包UserMapper.xml

	<!-- 开启本mapper的namespace下的二缓存 -->
	<cache type="org.mybatis.caches.ehcache.EhcacheCache" />

config/ehcache.xml

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
	<diskStore path="F:\develop\ehcache" />  一种方法:如果控制台报错,把这个注释。  另一种方法:先删除<span style="font-weight: bold; color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">useCache="false"</span><span style="font-family: Arial, Helvetica, sans-serif;">,也可以不用了注释这个。</span><span style="font-weight: bold; color: rgb(255, 0, 0); font-family: Arial, Helvetica, sans-serif;">
</span>

	<defaultCache 
		maxElementsInMemory="1000" 
		maxElementsOnDisk="10000000"
		eternal="false" 
		overflowToDisk="false" 
		timeToIdleSeconds="120"
		timeToLiveSeconds="120" 
		diskExpiryThreadIntervalSeconds="120"
		memoryStoreEvictionPolicy="LRU">
	</defaultCache>
</ehcache>
src/mapper包UserMapper.xml

	<!-- R  根据id查询一条记录结果 -->
	<select id="findUserById" parameterType="int" resultType="user" <span style="color:#ff0000;"><strong>useCache="false"</strong></span>>  如果控制台禁止开启二级缓存,就删除红色的。
		SELECT * FROM USER WHERE id=#{value}
	</select>



4

5

6

在基于Spring Boot的工程中进行Mapper层的单元测试时,可以利用IDEA的goto功能自动生成对应的测试类和测试方法,并在生成的测试类上加上@SpringBootTest注解,然后执行对应的test方法即可。然而,默认情况下,这样会启动整个Spring Boot应用,包括启动Web容器,导致测试时间较长且不够优雅。\[1\] 在执行单元测试时,可能会遇到报错,提示找不到相关的Mapper。这是因为MyBatis尝试在启动类所在的包路径下扫描Mapper,而实际上Mapper类可能位于其他模块中的不同包路径下。\[2\] 解决这个问题的方法是,在单元测试类上使用@MapperScan注解,指定Mapper类所在的包路径。例如,如果Mapper类位于infrastructure模块的com.alibaba.模糊.模糊.infrastructure包下,可以在单元测试类上加上@MapperScan("com.alibaba.模糊.模糊.infrastructure")注解。这样就能正确扫描到Mapper类了。\[3\] #### 引用[.reference_title] - *1* [Springboot优雅单元测试mapper的测试(基于mybatis-plus)](https://blog.youkuaiyun.com/xiaocy66/article/details/126716098)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [springboot学习笔记:执行单元测试时,mapper默认扫描路径为启动类的包名](https://blog.youkuaiyun.com/u013066244/article/details/123099207)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值