【Go 語言社群】Golang 高效字串拼接
Mybatis是一款優秀的持久層框架,它支援定製化SQL、儲存過程以及高階對映。
Mybatis避免了幾乎所有的JDBC程式碼和手動設定引數以及獲取結果集。
Mybatis可以使用簡單的XML或註解來配置和對映原生型別、介面和Java的pojo為資料庫中的記錄。
什麼是持久化?
持久化就是將程式的資料在持久狀態和瞬時狀態轉化的過程。
記憶體(指的是RAM):斷電即失
為什麼需要Mybatis?
幫助程式設計師將資料存入到資料庫中。傳統的JDBC程式碼帶複雜了,需要簡化,自動化。
優點:簡單易學,靈活,sql和程式碼的分離,提高了可維護性,提供了對映標籤,
支援物件與資料庫的orm欄位對映
提供xml標籤,支援編寫動態SQL
CRUD:
select(id 對應namespace中的方法名;resultType:SQL語句執行的返回值;parameterType:引數型別)
select * from user where id = #{id} 、insert 、update、delete
mybatis核心配置檔案(mybatis-config.xml):包含了會深深影響Mybatis行為的設定和屬性資訊。
<configuration>.配置 <properties>.屬性 <setting>.設定
<typeAliases>.類型別名 <typeHandlers>.型別處理器 <objectFactory>.物件工廠
<plugins>.外掛 <environments>.環境配置 <environment>.環境變數
<transactionManager>.事務管理器 <dataSource>.資料來源 <databaseIdProvider>.資料庫廠商標識 <mappers>.對映器
環境配置:Mybatis可以配置成適應多種環境,不過要記住:儘管可以配置多個環境,但每個SqlSessionFactory例項只能選擇一種環境。
學會使用配置多套執行環境!Mybatis預設的事務管理器就是JDBC,連線池:POOLED
屬性:可以通過properties屬性來實現引用配置檔案,這些屬性都是可外部配置且可動態替換的,既可以在
典型的Java屬性檔案中配置,亦可以通過properties元素的子元素來傳遞。(db.properties)
類型別名:為Java型別設定一個短的名字。存在的意義僅在於用來減少類完全限定名的冗餘。
SqlSessionFactoryBuilder:一旦建立了SqlSessionFactory,就不再需要它了,區域性變數
SqlSeesionFactory:一旦被建立就應該在應用的執行期間一直存在,沒有任何理由丟棄它或重新建立另一個例項。
因此SqlSessionFactory的最佳作用域是應用作用域。最簡單的就是使用 單例模式 或 靜態單例模式
SqlSession:連線到連線池的一個請求,SQLSession的例項不是執行緒安全的,因此是不能被共享的,所以它的最佳的作用域是請求或方法作用域。
用完之後需要關閉,否則會一直佔用資源
Mapper:這裡的每一個mapper就代表一個具體的業務。
。。。。。。
快取:
查詢:連線資料庫,會耗費資源,一次查詢的結果可以給他暫時儲存在一個可以直接取到的地==>記憶體:快取
我們再次查詢相同的資料的時候,直接從快取中取,
快取:用來儲存記憶體中的臨時資料,將使用者經常查詢的資料放在快取中,使用者去查詢資料就不用從磁碟上查詢,從而提高了查詢資料,解決了高併發系統的效能問題。
為什麼使用快取:減少和資料庫的互動次數,減少系統開銷,提高系統效率。
Mybatis包含一個非常強大的查詢快取特性,他可以非常方便地定製和配置快取。快取可以極大的提高查詢效率。
mybatis快取:一級快取和二級快取
預設情況下,只有一級快取開啟。(SqlSession級別的快取,也稱為本地快取)
二級快取需要手動開啟和配置,它是基於namespace級別的快取
為了提高可擴充套件性,Mybatis定義了快取介面Cache。我們可以通過實現Cache介面來定義二次快取
一級快取:也叫本地快取(SQLSession)與資料庫同義詞會話期間查詢到的資料會放在本地快取中,如果需要查詢相同的資料,直接從快取中取,不用再去訪問資料庫。
一級快取使預設開啟的,只在一次SqlSession中有效,也就是拿到連線關閉資料庫這個區間段,一級快取就是一個Map.
二級快取:也叫全域性快取,一級快取作用域太低了,所以誕生了二級快取。基於namespace級別的快取,
工作機制:一個會話查詢一條資料,這個資料就會被放在當前會話的一級快取中;如果當前會話關閉了,這個會話對應的一級快取就消失了,
但是我們想要的是,會話關閉後,一級快取中的資料會被儲存到二級快取中。新的會話查詢資訊時,就可以從二級快取中取。
不同的mapper查出的資料會放在自己對應的快取(map)中。
只要開啟了二級快取,在同一個Mapper下就有效,所有的資料會先放在一級快取中,只有當會話提交,或者關閉的時候,才會提交到二次快取中。