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

	databaseIdProviderchinese?
	mappers 映射器

一、整体配置文件介绍

<properties resource="jdbc.property">
	<property name="password" value="123456"/>
</properties>

<?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>
    <!--其他地方可以使用${password}来引用这个变量-->
    <properties resource="jdbc.property">
        <property name="password" value="123456"/>
    </properties>
    <!--MyBatis设置信息-->
    <settings>
        <!--启用延迟加载数据、cacheEnabled,lazyLoadingEnabled-->
        <!--
			1、延迟加载:用的时候就查询、不用的时候并不会查询
			2、即使加载:不管你用不用、都会去数据库查询出来
		-->
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--选择日志、选择后需要导入对应的jar包和配置-->
        <setting name="logImpl" value="log4j"/>
    </settings>
    <!--别名扫描包-->
    <typeAliases>
        <package name="package.mybatis.bean"/>
    </typeAliases>
    <!--数据源设置、可以设置多个数据源environment---
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
	<!--Mapper映射文件设置-->
    <mappers>
        <!--XML配置-->
        <mapper resource="package/mybatis/mapper/StudentMapper.xml"/>
        <!--单个接口配置-->
        <mapper class="package.mybatis.dao.StudentDao"/>
        <!--多个接口配置、包扫描模式、一次性配置package.mybatis.dao包下面的所有接口-->
        <package name="package.mybatis.dao"/>
    </mappers>
</configuration>

二、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) {
	}
}
<!--配置文件-->
<plugins>
	<plugin interceptor="package.plugin.MyPlugin">
	    <property name="name" value="admin"/>
	</plugin>
</plugins>

三、缓存

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

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

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

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

使用步骤

1、修改mybatis-config.xml的setting设置
	<setting name="cacheEnabled" value="true"/>
2、Mapper.XML:加入:<cache/>
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<Student> 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<Student> list2 = dao2.getStudentAll();
		for (Student student : list2) {
			System.out.println(student);
		}

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

(0)

相关推荐

  • SpringBoot集成Mybatis+xml格式的sql配置文件操作

    SpringBoot集成Mybatis+xml格式的sql配置文件 最近一直在研究SpringBoot技术,由于项目需要,必须使用Mybatis持久化数据.所以就用SpringBoot集成Mybatis. 由于项目使用的是xml配置文件格式的SQL管理,所以SpringBoot必须配置Mybatis文件.但这样做的话又与SpringBoot的零xml配置冲突. 所以索性使用java类来配置Mybatis. 下面是Mybatis的配置类: import java.util.Properties;

  • mybatis的dtd约束文件及配置文件xml自动提示操作

    一.mybatis的dtd约束文件位置 我使用的是mybatis-3.2.7这个版本的mybatis,里面的核心jar包是:mybatis-3.2.7.jar,将这个jar包解压缩后进入\org\apache\ibatis\builder\xml 二.mybatis的dtd约束文件下载 (1)mybatis-3-config.dtd约束文件下载: http://mybatis.org/dtd/mybatis-3-config.dtd (2)mybatis-3-mapper.dtd约束文件下载:

  • Java的MyBatis框架中XML映射缓存的使用教程

    MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.默认情况下是没有开启缓存的,要开启二级缓存,你需要在你的SQL映射文件中添加一行: <cache/> 字面上看就是这样.这个简单语句的效果如下: 1.映射语句文件中的所有select语句将会被缓存. 2.映射语句文件中的所有insert,update和delete语句会刷新缓存. 3.缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回. 4.根据时间表(比如 no Flush Inter

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

    目录 MyBatis缓存介绍 MyBatis的XML整体介绍 一.整体配置文件介绍 二.Mybatis拦截器[不做要求] 参考案例 三.缓存 使用步骤 MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 1.一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空.2. 二级缓存与一级缓存其机制相同

  • Mybatis中的config.xml配置文件详细解析

    经过前面的文章,我觉得对Mybatis的正题理解已经足够了,但是对Mybatis的使用,我觉得还是会有一点的模糊,就我个人而言,我觉得掌握好Mybatis框架,主要要明白三个文件,第一个就是等下要谈论的Mybatis-comfig.xml文件,还有就是**Mapper.xml,以及我们所定义的Mapper类,理解了这三个东西,然后有sql的基础,还有java的基础的话,后面不论是使用基于xml的方法,还是基于java-based Configuration的方法,都会简单的多. 废话不多说,现在

  • IDEA创建MyBatis配置文件模板的方法步骤

    Mybatis的配置文件不像Spring的配置文件,在Maven当中添加过依赖之后就可以在下面这个地方打开,需要自己去手动去编写配置文件,但是自己编写的话会记不住要引入的DTD,所以就需要自己创建一个模板. 下图是我的添加模板过程 代码区添加的代码如下 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Co

  • ASP.NET下使用xml反序列化、缓存依赖实现个性化配置文件的实时生效

    因为一些配置属性比较多,存在多组属性,因此结合xml解析.缓存技术,实现配置文化的自动解析.存入缓存.缓存依赖实时更新配置内容. 配置文件反序列化存入缓存的核心方法: public Class.Settings GetSettings() { if (HttpRuntime.Cache["settings"] != null) return (Class.Settings)HttpRuntime.Cache["settings"]; string rootPath

  • MyBatis高级映射和查询缓存

     mybatis框架执行过程: 1.配置mybatis的配置文件,SqlMapConfig.xml(名称不固定) 2.通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂 SqlSessionFactory在实际使用时按单例方式. 3.通过SqlSessionFactory创建SqlSession SqlSession是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议sqlSession应用场合在方法体内. 4.调用sqlSession的方

  • MyBatis 如何写配置文件和简单使用

    MyBatis 如何写配置文件和简单使用 MyBatis3.x 这里简单贴一下MyBatis的介绍,具体使用方法会在代码中贴出. MyBatis的前世今生 MyBatis的前身就是iBatis,iBatis本是由Clinton Begin开发,后来捐给Apache基金会,成立了iBatis开源项目.2010年5月该项目由Apahce基金会迁移到了Google Code,并且改名为MyBatis. 尽管如此,它的包结构仍然为ibatis. www.mybatis.org/ https://gith

  • MyBatis SqlMapConfig.xml配置

    SqlMapConfig.xml配置文件的内容和配置顺序如下 properties(属性) settings(全局配置参数) typeAiases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境集合属性对象)mappers(映射器) environment(环境子属性对象) transactionManager(事物管理) datesource(数据源 mappers(映射器) 一.SqlMapC

  • Mybatis如何实现延迟加载及缓存

    一.延迟加载 1.在mybatis.xml配置文件中,开启延迟加载 <settings> <!--开启延迟加载--> <setting name="lazyLoadingEnabled" value="true"></setting> <setting name="aggressiveLazyLoading" value="false"></setting>

  • MyBatis 中 SqlMapConfig 配置文件详解

    0x00:文件介绍 在 WEB 工程中,对于 MyBatis 最核心的全局配置文件是 SqlMapConfig.xml 文件,其中包含了数据库的连接配置信息.Mapper 映射文件的加载路径.全局参数.类型别名等. 0x01:配置项详解 configuration:包裹所有配置标签,是整个配置文件的顶级标签. properties:属性,该标签可以引入外部配置的属性,也可以自己配置.该配置标签所在的同一个配置文件中的其他配置均可引用此配置中的属性. setting:全局配置参数,用来配置一些改变

  • Mybatis基于xml配置实现单表的增删改查功能

    Mybatis入门-基于配置实现单表的增删改查 Mybatis简介 官网链接:https://mybatis.org/mybatis-3/zh/index.html.更加详细的信息可以去官网查看. MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射.MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作.MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型.接口和 Java POJO(Plain Old Java Object

随机推荐