MyBatis学习(4)——缓存机制、MBG-逆向工程

1. 缓存机制

1.1概述

MyBatis 包含一个强大的查询缓存特性,可以方便地配置和定制。缓存可极大提升查询效率。

MyBatis系统中默认定义了一级缓存和二级缓存,是一个HashMap,能保存查询出的一些数据

  1. 默认情况下,只有一级缓存(SqlSession/线程 级别的缓存,也称为本地缓存)开启。
  2. 二级缓存需要手动开启和配置,他是基于namespace级别的缓存(全局范围的)。
  3. 为了提高扩展性。MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存

1.2 一级缓存

机制

只要是之前查询过的数据,MyBatis 就会保存在一个缓存中(Map),下次获取直接从缓存中拿;

一级缓存失效的几种情况

① 不同的SqlSession对应不同的一级缓存
② 同一个SqlSession但是查询条件不同
③ 同一个SqlSession两次查询期间执行了任何一次增删改操作(会清空缓存)
④ 同一个SqlSession两次查询期间手动清空了缓存

sqlSession.clearCache();

1.3 二级缓存

二级缓存(second level cache),全局作用域缓存

二级缓存默认不开启,需要手动配置

MyBatis提供二级缓存的接口以及实现,缓存实现要求POJO实现Serializable接口

二级缓存在 SqlSession 关闭或提交之后才会生效

使用步骤

①全局配置文件中开启二级缓存

<setting name="cacheEnabled" value="true"/>

②需要使用二级缓存的映射文件<mapper>处使用cache配置缓存

<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>

③注意:POJO需要实现Serializable接口

在这里插入图片描述

注意事项

① 不会出现一级缓存和二级缓存中有同一个数据。

  • 二级缓存中:一级缓存关闭了就有了
  • 一级缓存中:二级缓存中没有此数据,就会看一级缓存,一级缓存没有去查数据库;数据库的查询后的结果放在一级缓存中了;

任何时候都是先看二级缓存,再看一级缓存,如果大家都没有就去查询数据库(二一库)

③ 每一个dao有其自己的二级缓存

1.4 缓存有关的设置

在这里插入图片描述

1.5 第三方缓存整合

在这里插入图片描述

2.MBG-逆向工程

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
	
	<!-- 
	MyBatis3Simple:基础版CRUD
	MyBatis3:复杂版CRUD
	 -->
	<context id="DB2Tables" targetRuntime="MyBatis3">
		<commentGenerator>
			<property name="suppressAllComments" value="true"/>
		</commentGenerator>
		<!-- jdbcConnection:指导连接到哪个数据库 -->
		<jdbcConnection 
			driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/mybatis_0325" 
			userId="root" 
			password="123456">
		</jdbcConnection>

		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- javaModelGenerator:生成pojo 
		targetPackage:生成的pojo放在哪个包
		targetProject:放在哪个工程下
		-->
		<javaModelGenerator targetPackage="com.atguigu.bean"
			targetProject=".\src">
			<property name="enableSubPackages" value="true" />
			<property name="trimStrings" value="true" />
		</javaModelGenerator>

		<!--sqlMapGenerator:sql映射文件生成器;指定xml生成的地方  -->
		<sqlMapGenerator targetPackage="com.atguigu.dao"
			targetProject=".\conf">
			<property name="enableSubPackages" value="true" />
		</sqlMapGenerator>

		<!-- javaClientGenerator:dao接口生成的地方 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.atguigu.dao" 
			targetProject=".\src">
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>

		<!-- 
		table:指定要逆向生成哪个数据表
		tableName="t_cat":表名
		domainObjectName="":这个表对应的对象名
		 -->
		<table tableName="t_cat" domainObjectName="Cat"></table>
		<table tableName="t_employee" domainObjectName="Employee"></table>
		<table tableName="t_teacher" domainObjectName="Teacher"></table>

	</context>
</generatorConfiguration>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值