欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis?的?XML?配置文件和緩存使用步驟

 更新時間:2022年01月19日 11:24:04   作者:小雞炸  
MyBatis?包含一個非常強大的查詢緩存特性,它可以非常方便地配置和定制,這篇文章主要介紹了MyBatis的XML配置文件和緩存,需要的朋友可以參考下

MyBatis緩存介紹

正如大多數(shù)持久層框架一樣,MyBatis 同樣提供了一級緩存和二級緩存的支持

1.一級緩存: 基于PerpetualCache 的 HashMap本地緩存,其存儲作用域為 Session,當(dāng) Session flush 或 close 之后,該Session中的所有 Cache 就將清空。
2. 二級緩存與一級緩存其機制相同,默認(rèn)也是采用 PerpetualCache,HashMap存儲,不同在于其存儲作用域為 Mapper(Namespace),并且可自定義存儲源,如 Ehcache。

3. 對于緩存數(shù)據(jù)更新機制,當(dāng)某一個作用域(一級緩存Session/二級緩存Namespaces)的進行了 C/U/D 操作后,默認(rèn)該作用域下所有 select 中的緩存將被clear。

MyBatis 包含一個非常強大的查詢緩存特性,它可以非常方便地配置和定制。MyBatis 3 中的緩存實現(xiàn)的很多改進都已經(jīng)實現(xiàn)了,使得它更加強大而且易于配置。下面給大家詳細(xì)介紹 MyBatis 的 XML 配置文件和緩存使用步驟,內(nèi)容如下所示:

MyBatis的XML整體介紹

MyBatis 的 XML 配置文件結(jié)構(gòu)如下: 
configuration 配置 
	properties 屬性
	settings 設(shè)置
	typeAliases 類型命名
	typeHandlers 類型處理器
	objectFactory 對象工廠
	plugins 插件
	environments 環(huán)境 
		environment 環(huán)境變量 
		transactionManager 事務(wù)管理器
	dataSource 數(shù)據(jù)源

	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設(shè)置信息-->
    <settings>
        <!--啟用延遲加載數(shù)據(jù)、cacheEnabled,lazyLoadingEnabled-->
        <!--
			1、延遲加載:用的時候就查詢、不用的時候并不會查詢
			2、即使加載:不管你用不用、都會去數(shù)據(jù)庫查詢出來
		-->
        <setting name="cacheEnabled" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--選擇日志、選擇后需要導(dǎo)入對應(yīng)的jar包和配置-->
        <setting name="logImpl" value="log4j"/>
    </settings>
    <!--別名掃描包-->
    <typeAliases>
        <package name="package.mybatis.bean"/>
    </typeAliases>
    <!--數(shù)據(jù)源設(shè)置、可以設(shè)置多個數(shù)據(jù)源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映射文件設(shè)置-->
    <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攔截執(zhí)行器的方法
ParameterHandler攔截參數(shù)的處理
ResultHandler攔截結(jié)果集的處理
StatementHandler攔截Sql語法構(gòu)建的處理

實際上、Executor就能處理所有、其他的并不怎么好用

參考案例

//@Intercepts:標(biāo)識該類是一個攔截器
//@Signature:指明自定義攔截器需要攔截哪一個類型,哪一個方法;
//	type:對應(yīng)四種類型中的一種;
//	method:對應(yīng)接口中的哪類方法(因為可能存在重載方法);
//	args:方法參數(shù)
@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語句的參數(shù)
			info.setName("我不是漢武帝");
		}
		System.out.println("方法執(zhí)行");
		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級別、【默認(rèn)開啟】、增刪改默認(rèn)刷新一級緩存(一定要commit哦)

一級緩存是SqlSession級別的緩存。在操作數(shù)據(jù)庫時需要構(gòu)造 sqlSession對象,mybatis 使用HashMap 來存儲緩存數(shù)據(jù)。不同的sqlSession之間的緩存數(shù)據(jù)區(qū)域(HashMap),所以是互不影響的

二級緩存【默認(rèn)是關(guān)閉、不常用】

是mapper級別的緩存,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級緩存,二級緩存是跨SqlSession的

使用步驟

1、修改mybatis-config.xml的setting設(shè)置
	<setting name="cacheEnabled" value="true"/>
2、Mapper.XML:加入:<cache/>
3、緩存的bean要實現(xiàn)序列化接口 Serializable
4、一定要關(guān)閉第一個sqlSession

//SqlSession:連接對象Connection、mybatis的session并不是會話,指的就是Sql的Connection
		SqlSession session1 = sqlSessionFactory.openSession();
		SqlSession session2 = sqlSessionFactory.openSession();
		
		//為了使用緩存、sql語句一定要統(tǒng)一規(guī)范
		StudentDao dao1=session1.getMapper(StudentDao.class);
		System.out.println("查詢一次數(shù)據(jù)");
		List<Student> list1 = dao1.getStudentAll();
		for (Student student : list1) {
			System.out.println(student);
		}
		session1.close();
		System.out.println("第二次查詢數(shù)據(jù)");
		Thread.sleep(10000);
		StudentDao dao2=session2.getMapper(StudentDao.class);
		System.out.println("查詢一次數(shù)據(jù)");
		List<Student> list2 = dao2.getStudentAll();
		for (Student student : list2) {
			System.out.println(student);
		}

到此這篇關(guān)于MyBatis 的 XML 配置文件和緩存的文章就介紹到這了,更多相關(guān)MyBatis XML 配置文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談java中math類中三種取整函數(shù)的區(qū)別

    淺談java中math類中三種取整函數(shù)的區(qū)別

    下面小編就為大家?guī)硪黄獪\談java中math類中三種取整函數(shù)的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼

    IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼

    這篇文章主要介紹了IntelliJ Plugin 開發(fā)之添加第三方j(luò)ar的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • SpringBoot之Java配置的實現(xiàn)

    SpringBoot之Java配置的實現(xiàn)

    這篇文章主要介紹了SpringBoot之Java配置的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 使用?Spring?Boot?Admin?監(jiān)控應(yīng)用狀態(tài)的詳細(xì)過程

    使用?Spring?Boot?Admin?監(jiān)控應(yīng)用狀態(tài)的詳細(xì)過程

    這篇文章主要介紹了使用?Spring?Boot?Admin?監(jiān)控應(yīng)用狀態(tài),該模塊采集應(yīng)用的內(nèi)部信息,并暴露給外部的模塊,支持?HTTP?和?JMX,并可以與一些第三方監(jiān)控系統(tǒng)(如?Prometheus)整合,需要的朋友可以參考下
    2022-09-09
  • 關(guān)于SpringCloud灰度發(fā)布的實現(xiàn)

    關(guān)于SpringCloud灰度發(fā)布的實現(xiàn)

    這篇文章主要介紹了關(guān)于SpringCloud灰度發(fā)布的實現(xiàn),灰度發(fā)布又稱金絲雀發(fā)布,是在系統(tǒng)升級的時候能夠平滑過渡的一種發(fā)布方式,灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度,需要的朋友可以參考下
    2023-08-08
  • java基于C/S結(jié)構(gòu)實現(xiàn)多線程聊天室

    java基于C/S結(jié)構(gòu)實現(xiàn)多線程聊天室

    這篇文章主要為大家詳細(xì)介紹了java基于C/S結(jié)構(gòu)實現(xiàn)多線程聊天室,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • @RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決

    @RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決

    這篇文章主要介紹了@RunWith(SpringJUnit4ClassRunner.class)報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 利用Jmeter發(fā)送Java請求的實戰(zhàn)記錄

    利用Jmeter發(fā)送Java請求的實戰(zhàn)記錄

    JMeter是Apache組織的開放源代碼項目,它是功能和性能測試的工具,100%的用java實現(xiàn),下面這篇文章主要給大家介紹了關(guān)于如何利用Jmeter發(fā)送Java請求的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • SpringCloud Bus消息總線的實現(xiàn)

    SpringCloud Bus消息總線的實現(xiàn)

    消息總線是一種通信工具,可以在機器之間互相傳輸消息、文件等,這篇文章主要介紹了SpringCloud Bus消息總線的實現(xiàn),Spring cloud bus 通過輕量消息代理連接各個分布的節(jié)點,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java Process.waitFor()方法詳解

    Java Process.waitFor()方法詳解

    這篇文章主要介紹了Java Process.waitFor()方法詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論