天天看點

自定義持久層架構筆記

使用端

提供兩部配置設定置資訊。資料庫配置資訊 sql 配置資訊 sql語句 參數類型 傳回值類型
使用配置檔案提供這兩部分資訊
(1)、sqlMapConfig.xml:存放資料庫的配置資訊。可以存放mapper.xml的全路徑
(2)、mapper.xml:存放sql配置資訊
(3)、	
           

自定義持久層架構: 本質就是對jdbc代碼的封裝

(1)、加載配置檔案[根據配置檔案路徑加載配置檔案成位元組輸入流 存儲在記憶體中]  建立 Resources類 方法 inputStream getResourcesStream(String path)類
	提問: 是否需要執行兩次這個方法
(2)、建立兩個javabean (容器對象):存放的就是對配置檔案解析出來的内容

	Configuration 存放sqlmapconfig.xml解析的内容。MappedStatement 映射配置類 存mappper.xml
(3)、解析配置檔案: dom4j
	建立一個類 sqlSessionFactoruyBuild 方法 build(inputStream in)
		1、使用dom4j 解析配置檔案 将内容封裝在容器對象中
		2、建立sqlSessionFactory對象: 生産sqlSession 生産會話對象。// 工廠模式-》 降低程式裡面的耦合 同時根據不同需求生産不同狀态的對象
(4)、基于開閉原則建sqlSessionFactory接口和實作類defaultSqlSessionFactory
	第一:opSession(); 生産sqlsession的
(5)、建立Sqlsession接口 和實作類 defaultSqlSession
		定義對資料庫的crud 操作 selectList()。selectOne() update(); delete();

(6)建立executor 及實作類SimpleExecutor 實作類
	query(Configuration,xml解析的内容。MappedStatement,Object...param);執行的就是jdbc代碼


	mybatis。orm 半自動  對象關系映射

	對象.class.classloader 可以調用類加載器 可以通過類加載器  調用getResourceAsStream将資料轉為位元組流



	mybatis 緩存 就是記憶體的一部分。常常來自資料庫查詢結果的儲存 使用緩存我們可以避免頻繁與資料庫互動進而提高相應速度

	mybatis 有一級緩存 和二級緩存。一級緩存 是sqlsession 級别 内部有個hashmap 是以不同sqlsession緩存也是不影響的

	 二級緩存是mapper(namespace) 二級緩存跨sqlsession。 多個sqlsession 操作的是同一個sql配置檔案的sql 他們是共享緩存的

	 一級緩存預設是開啟的  證明一級緩存是存在的 就對一條sql語句執行兩次 然後發現實際值發送了一條sql語句 

	 當發生事務操作後 一級緩存區域将會被重新整理 sqlsession.clearCache() 也可以手動重新整理緩存
	 一級緩存底層資料結構就是個hashmap
	 一級緩存什麼時候被建立
	 以及緩存工作流程是什麼
	 executor.creatCacheKey 建立一級緩存的key

	 如果同一個mapper内有多個sqlsession 其中 有一個sqlsession有事務操作就會清空二級緩存

	 cacheEnabled 可以開啟二級緩存 @CacheNamespace 可以開啟二級緩存
	 一級緩存緩存的是對象。二級緩存緩存的是資料 
	 
	 @usercatch 注解開啟二級緩存
	 flushcache 有事務發生重新整理緩存 預設是true

	 實作緩存 和自定義緩存。需要實作 cache 接口

	 分布式項目 mybatis 不可以實作二級緩存的



	 PAYPALISHIRING

	 PAHNAPLSIIGYIR