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

网友投稿 628 2022-11-07

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

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

目录MyBatis缓存介绍MyBatis的XML整体介绍一、整体配置文件介绍二、Mybatis-【不做要求】参考案例三、缓存使用步骤

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 配置文件结构如下:

http://configuration 配置

properties 属性

settings 设置

typeAliases 类型命名

typeHandlers 类型处理器

objectFactory 对象工厂

plugins 插件

environments 环境

environment 环境变量

transactionManager 事务管理器

dataSource 数据源

databaseIdProviderchinese?

mappers 映射器

一、整体配置文件介绍

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

二、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);

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:1737: 太空飞行计划问题——最大权闭合子图
下一篇:CodeForces 833B The Bakery ——dp+线段树
相关文章

 发表评论

暂时没有评论,来抢沙发吧~