1. 程式人生 > >Mybatis為何要求持久層的javabean序列化?

Mybatis為何要求持久層的javabean序列化?

MyBatis使用SerializedCache序列化快取來實現可讀寫快取類,並通過序列化和反序列化來保證通過快取獲取資料時,得到的是一個新的例項。如果配置為只讀快取,MyBatis就會使用Map來儲存快取值,這種情況下,從快取中獲取的物件就是同一個例項。

MyBatis中配置快取時,快取元素<cache>有個readOnly屬性,readOnly屬性可以被設定為 true 或 false。只讀快取將對所有呼叫者返回同一個例項,因為物件沒有進行序列化,所以速度最快。可寫的快取將通過序列化來返回一個快取物件的拷貝。因為物件進行了序列化,會比較慢,但是得到的都是新的物件,執行緒安全。預設值是 false。即Mybatis的二級快取預設是可寫的,可寫快取會使用序列化。

序列化快取
* 先將物件序列化成2進位制,再快取,好處是將物件壓縮了,省記憶體
* 壞處是速度慢了(因為物件需要進行序列化)

總結:Mybatis通過序列化得到物件的新例項,保證多執行緒安全(因為是從快取中取資料,速度還是比從資料庫獲取要快)。具體說就是物件序列化後儲存到快取中,從快取中取資料時是通過反序列化得到新的例項。