MyBatis 的 XML 配置文件和缓存使用步骤

MyBatis缓存介绍

正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持

1.一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。
2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。

3. 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被clear。

MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。下面给大家详细介绍 MyBatis 的 XML 配置文件和缓存使用步骤,内容如下所示:

MyBatis的XML整体介绍

MyBatis 的 XML 配置文件结构如下: 
configuration 配置 
	properties 属性
	settings 设置
	typeAliases 类型命名
	typeHandlers 类型处理器
	objectFactory 对象工厂
	plugins 插件
	environments 环境 
		environment 环境变量 
		transactionManager 事务管理器
	dataSource 数据源

	databaseIdProviderchinese?
	mappers 映射器

一、整体配置文件介绍


	





    
    
        
    
    
    
        
        
        
        
        
        
    
    
    
        
    
    
    
        
        
        
        
        
        
    

二、Mybatis拦截器【不做要求】

拦截器名 作用
Executor 拦截执行器的方法
ParameterHandler 拦截参数的处理
ResultHandler 拦截结果集的处理
StatementHandler 拦截Sql语法构建的处理

实际上、Executor就能处理所有、其他的并不怎么好用

参考案例

//@Intercepts:标识该类是一个拦截器
//@Signature:指明自定义拦截器需要拦截哪一个类型,哪一个方法;
//	type:对应四种类型中的一种;
//	method:对应接口中的哪类方法(因为可能存在重载方法);
//	args:方法参数
@Intercepts({
	@Signature(type = Executor.class, method = "update", args = { MappedStatement.class,Object.class }),
	@Signature(type = Executor.class, method = "query", args = { 				MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class })
})
public class MyPlugin implements Interceptor {
	@Override
	public Object intercept(Invocation invocation) throws Throwable {
		if ("update".equals(invocation.getMethod().getName())) {
			MappedStatement mstt = (MappedStatement) invocation.getArgs()[0];
			Object object = invocation.getArgs()[1];
			Student info=(Student)object;
            //修改用户sql语句的参数
			info.setName("我不是汉武帝");
		}
		System.out.println("方法执行");
		return invocation.proceed();
	}
	@Override
	public Object plugin(Object target) {
		return Plugin.wrap(target, this);
	}
	@Override
	public void setProperties(Properties properties) {
	}
}


	
	    
	

三、缓存

一级缓存 session级别、【默认开启】、增删改默认刷新一级缓存(一定要commit哦)

一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,mybatis 使用HashMap 来存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap),所以是互不影响的

二级缓存【默认是关闭、不常用】

是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的

使用步骤

1、修改mybatis-config.xml的setting设置
	
2、Mapper.XML:加入:
3、缓存的bean要实现序列化接口 Serializable
4、一定要关闭第一个sqlSession

//SqlSession:连接对象Connection、mybatis的session并不是会话,指的就是Sql的Connection
		SqlSession session1 = sqlSessionFactory.openSession();
		SqlSession session2 = sqlSessionFactory.openSession();
		
		//为了使用缓存、sql语句一定要统一规范
		StudentDao dao1=session1.getMapper(StudentDao.class);
		System.out.println("查询一次数据");
		List list1 = dao1.getStudentAll();
		for (Student student : list1) {
			System.out.println(student);
		}
		session1.close();
		System.out.println("第二次查询数据");
		Thread.sleep(10000);
		StudentDao dao2=session2.getMapper(StudentDao.class);
		System.out.println("查询一次数据");
		List list2 = dao2.getStudentAll();
		for (Student student : list2) {
			System.out.println(student);
		}

到此这篇关于MyBatis 的 XML 配置文件和缓存的文章就介绍到这了,更多相关MyBatis XML 配置文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(MyBatis 的 XML 配置文件和缓存使用步骤)