mybatis-210722-02---缓存-第三方缓存&ehcache

mybatis-210722-02—缓存-使用第三方缓存&ehcache


我的目录结构


EmployeeMapper.java

package com.bgy.mybatis.dao;
import com.bgy.mybatis.bean.Employee;

public interface EmployeeMapper {
	
	public Employee getEmpById(Integer id);
}

EmployeeMapper.xml(在这里使用了ehcache)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bgy.mybatis.dao.EmployeeMapper">
	<cache></cache>

	<!-- 导入第三方缓存 -->
	<cache type=" org.mybatis.caches.ehcache.EhcacheCache"></cache>
	
	<select id="getEmpById" resultType="com.bgy.mybatis.bean.Employee" useCache="true">
		select * from tbl_employee where id=#{id}
	</select>
</mapper>

DepartmentMapper.xml(这里引用了EmployeeMapper的缓存)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bgy.mybatis.dao.DepartmentMapper">
	
	<!-- 引用缓存:namespace,指定哪个名称空间下的缓存一样 -->
	<!-- <cache-ref namespace="com.bgy.mybatis.dao.EmployeeMapper"/> -->
	
</mapper>

MybatisTest.java

package com.bgy.mybatis.test;

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;
import org.junit.jupiter.api.Test;

import com.bgy.mybatis.bean.Department;
import com.bgy.mybatis.bean.Employee;
import com.bgy.mybatis.dao.EmployeeMapper;

class MybatisTest {
	
	public SqlSessionFactory getSqlSessionFactory() throws IOException {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		return new SqlSessionFactoryBuilder().build(inputStream);
	}

	
	/**·
	 * 测试第三方缓存--ehcache
	 * @throws IOException
	 */
	@Test
	public void test02() throws IOException{
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession sqlSession = sqlSessionFactory.openSession();
		SqlSession sqlSession2 = sqlSessionFactory.openSession();
		
		try {
			EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
			
			Employee employee = mapper.getEmpById(1);
			System.out.println(employee);
			sqlSession.close();
			
			EmployeeMapper mapper02 = sqlSession2.getMapper(EmployeeMapper.class);
			Employee employee02 = mapper02.getEmpById(1);
			System.out.println(employee02);
			
		} finally {
			
		}
	}
}

ehcache.xml(这里也有笔记哦)

<?xml version="1.0" encoding="utf-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
 <!-- 磁盘保存路径 -->
 <diskStore path="G:\44\ehcache" />
 
 <defaultCache 
   maxElementsInMemory="10000" 
   maxElementsOnDisk="10000000"
   eternal="false" 
   overflowToDisk="true" 
   timeToIdleSeconds="120"
   timeToLiveSeconds="120" 
   diskExpiryThreadIntervalSeconds="120"
   memoryStoreEvictionPolicy="LRU">
 </defaultCache>
</ehcache>
 
<!-- 
属性说明:
l diskStore:指定数据在磁盘中的存储位置。
l defaultCache:当借助CacheManager.add("demoCache")创建Cache时,EhCache便会采用<defalutCache/>指定的的管理策略
 
以下属性是必须的:
l maxElementsInMemory - 在内存中缓存的element的最大数目 
l maxElementsOnDisk - 在磁盘上缓存的element的最大数目,若是0表示无穷大
l eternal - 设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断
l overflowToDisk - 设定当内存缓存溢出的时候是否将过期的element缓存到磁盘上
 
以下属性是可选的:
l timeToIdleSeconds - 当缓存在EhCache中的数据前后两次访问的时间超过timeToIdleSeconds的属性取值时,这些数据便会删除,默认值是0,也就是可闲置时间无穷大
l timeToLiveSeconds - 缓存element的有效生命期,默认是0.,也就是element存活时间无穷大
 diskSpoolBufferSizeMB 这个参数设置DiskStore(磁盘缓存)的缓存区大小.默认是30MB.每个Cache都应该有自己的一个缓冲区.
l diskPersistent - 在VM重启的时候是否启用磁盘保存EhCache中的数据,默认是false。
l diskExpiryThreadIntervalSeconds - 磁盘缓存的清理线程运行间隔,默认是120秒。每个120s,相应的线程会进行一次EhCache中数据的清理工作
l memoryStoreEvictionPolicy - 当内存缓存达到最大,有新的element加入的时候, 移除缓存中element的策略。默认是LRU(最近最少使用),可选的有LFU(最不常使用)和FIFO(先进先出)
 -->

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 
 <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
   <param name="Encoding" value="UTF-8" />
   <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
   </layout>
 </appender>
 <logger name="java.sql">
   <level value="debug" />
 </logger>
 <logger name="org.apache.ibatis">
   <level value="info" />
 </logger>
 <root>
   <level value="debug" />
   <appender-ref ref="STDOUT" />
 </root>
</log4j:configuration>

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	<!-- 
		1. mybatis可以使用properties引入外部properties配置文件內容
			resource=""		引入类路径下的资源
			url=""			引入网络路径或者磁盘路径下的资源
	-->
	<properties resource="dbconfig.properties"></properties>
    
    <!-- ====================================================================================== -->
	
	<!--
		 2. settings包含很多重要的设置项
		 	setting用来设置每一个设置项
		 		name:设置项名
		 		value:设置项取值
	-->
	<settings>
		<!-- 开启驼峰命名法 -->
		<setting name="mapUnderscoreToCamelCase" value="true"></setting>
		<setting name="jdbcTypeForNull" value="NULL"/>
		
		<!-- 开启二级缓存机制 -->
		<setting name="cacheEnabled" value="true"/>
		
		<!-- 开启延迟加载 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<setting name="aggressiveLazyLoading" value="false"/>
	</settings>
	
    <!-- ====================================================================================== -->
	
	<!--
		3. typeAliases:别名处理器,可以为我们的java类型起别名 
		   别名不区分大小写
	-->
	<typeAliases>
		<!--
			方法1.
				type:指定要起的别名的类型全类名,默认别名就是类名小写,employee
				alias:指定新的别名
		-->
		<typeAlias type="com.bgy.mybatis.bean.Employee" alias="employee"/>
		
		<!--
			方法2.
				package:为某个包下的所有类批量起别名
				name:指定包名(为当前包以及下面所有的后代包的每一个类都起一个默认别名【类名小写】)
		-->
		<package name="com.bgy.mybatis.bean"/>
		
		<!-- 
			方法3.
				批量起别名的情况下,如果类名重复,使用@Alias注解为某个类型执指定新的别名 
		-->
	</typeAliases>
    
    <!-- ====================================================================================== -->
	
	<!-- 
		4.
		environments:环境,mybatis可以配置多种环境;default指定使用某种环境
			environment:配置一个具体的环境信息;必须要一下两个标签;id代表当前环境的唯一标识
				transactionManager:事务管理器
					type:事务管理器的类型
						JDBC | MANAGED
						自定义事务管理器:实现TransactionFactory接口.type指定为全类名
				dataSource:数据源
					type:数据源类型
						UNPOOLED | POOLED | JNDI
						自定义数据源:实现DataSourceFactory接口,type是群类名
					
	-->
	<environments default="dev_mysql">
	
		<environment id="dev_oracle">
			<transactionManager type=""></transactionManager>
			<dataSource type=""></dataSource>
		</environment>
		
		<environment id="dev_mysql">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
    
     <!-- ====================================================================================== -->
    <!--
    	5.
		databaseIdProvider:支持多数据库厂商
			type="DB_VENDOR"
				作用就是得到数据库厂商的标识,mybatis就能根据数据库厂商标识来执行不同的sql
				MySQL | Oracle | SQL Server ....
	-->
	<databaseIdProvider type="DB_VENDOR">
		<!-- 为不同的数据厂商起别名 -->
		<property name="MySQL" value="mysql"/>
		<property name="Oracle" value="oracle"/>
		<property name="SQL Server" value="sqlserver"/>
	</databaseIdProvider>
    
    <!-- ====================================================================================== -->

	<!-- 
		6.
		将我们写好的sql映射文件(EmployeeMapper.xml)注册到全局配置文件(mybatis-config.xml)中	
	-->
	<mappers>
		<!--
			mapper:注册一个sql映射
				注册配置文件:
					resource:引用类路径下的sql映射文件
					url:引用网络路径或者磁盘路径下的sql映射文件
						file:///var/mappers/AuthorMapper.xml
				注册接口:
					class:引用(注册)接口
						方法1)有sql映射文件,映射文件名必须和接口名相同,并且放在与接口同一目录下
						方法2)没有sql映射文件,所有的sql都是利用注解写在接口上的
		-->
		<!-- <mapper url="file:///var/mappers/AuthorMapper.xml"/> -->
		
		<!-- <mapper resource="EmployeeMapper.xml" /> -->
		
		<!-- 方法1)有sql映射文件,映射文件名必须和接口名相同,并且放在与接口同一目录下 -->
		<!-- <mapper class="com.bgy.dao.EmployeeMapper"/> -->
		
		<!-- 方法2)没有sql映射文件,所有的sql都是利用注解写在接口上的 -->
		<!-- <mapper class="com.bgy.mybatis.dao.EmployeeMapperAnnotation"/> -->
		
		<!-- 
			批量注册 
			映射文件名必须和接口名相同,并且放在与接口同一目录下
			把EmployeeMapper.xml文件和EmployeeMapper.java文件,都放在com.bgy.dao包下
		-->
		<!-- <package name="com.bgy.dao"/> -->
		<package name="com.bgy.mybatis.dao"/>
	</mappers>
</configuration>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值