最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • ResultSet如何動態(tài)獲取列名和值

    ResultSet如何動態(tài)獲取列名和值

    這篇文章主要介紹了ResultSet如何動態(tài)獲取列名和值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用java文件過濾器輸出制定格式文件路徑的實例代碼

    使用java文件過濾器輸出制定格式文件路徑的實例代碼

    這篇文章主要介紹了使用java文件過濾器輸出制定格式文件路徑的方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • SpringBoot中@ConditionalOnProperty的使用及作用詳解

    SpringBoot中@ConditionalOnProperty的使用及作用詳解

    這篇文章主要介紹了SpringBoot中@ConditionalOnProperty的使用及作用詳解,@ConditionalOnProperty通過讀取本地配置文件中的值來判斷 某些 Bean 或者 配置類 是否加入spring 中,需要的朋友可以參考下
    2024-01-01
  • Java中2個Integer比較相同的四種方式舉例

    Java中2個Integer比較相同的四種方式舉例

    這篇文章主要介紹了Java中比較兩個Integer對象的四種方式,并解釋了每種方式的原理和適用范圍,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • 解決常見的Eclipse SVN插件報錯方法詳解

    解決常見的Eclipse SVN插件報錯方法詳解

    本篇文章是對常見的Eclipse SVN插件報錯方法進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Mybatis Plugin攔截器開發(fā)過程詳解

    Mybatis Plugin攔截器開發(fā)過程詳解

    這篇文章主要介紹了Mybatis Plugin攔截器開發(fā)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Java中用戶線程與守護線程的使用區(qū)別

    Java中用戶線程與守護線程的使用區(qū)別

    這篇文章主要介紹了Java中用戶線程與守護線程的使用區(qū)別,Java語言中無論是線程還是線程池,默認(rèn)都是用戶線程,因此用戶線程也被成為普通線程,下文關(guān)于其與守護線程的區(qū)別詳情,需要的小伙伴可以參考一下
    2022-05-05
  • java的多線程用法編程總結(jié)

    java的多線程用法編程總結(jié)

    本文主要講了java中多線程的使用方法、線程同步、線程數(shù)據(jù)傳遞、線程狀態(tài)及相應(yīng)的一些線程函數(shù)用法、概述等。
    2016-10-10
  • Java基礎(chǔ)教程之包(package)

    Java基礎(chǔ)教程之包(package)

    這篇文章主要介紹了Java基礎(chǔ)教程之包(package),本文詳細(xì)講解了包的創(chuàng)建、使用等方法,需要的朋友可以參考下
    2014-08-08
  • SpringMVC HttpMessageConverter消息轉(zhuǎn)換器

    SpringMVC HttpMessageConverter消息轉(zhuǎn)換器

    ??HttpMessageConverter???,報文信息轉(zhuǎn)換器,將請求報文轉(zhuǎn)換為Java對象,或?qū)ava對象轉(zhuǎn)換為響應(yīng)報文。???HttpMessageConverter???提供了兩個注解和兩個類型:??@RequestBody,@ResponseBody???,??RequestEntity,ResponseEntity??
    2023-04-04

最新評論

江西省| 雅江县| 岳阳市| 双鸭山市| 米泉市| 巴南区| 芷江| 崇仁县| 正宁县| 广平县| 彩票| 白银市| 闻喜县| 贺兰县| 武强县| 安平县| 瓮安县| 成都市| 九寨沟县| 深水埗区| 寻甸| 海晏县| 拉孜县| 昭平县| 锦州市| 乌审旗| 铜梁县| 尤溪县| 江达县| 神农架林区| 林周县| 武胜县| 新平| 通山县| 洛川县| 丰宁| 南和县| 庆云县| 大荔县| 靖宇县| 东至县|