mybatis延遲加載的原理「mybatis延遲加載是為什麼」

一、Mybatis 延遲加載策略

1.1 何為延遲加載?

延遲加載:就是在需要用到數據時才進行加載,不需要用到數據時就不加載數據。延遲加載也稱懶加載。

好處:先從單表查詢,需要時再從關聯表去關聯查詢,大大提高數據庫性能,因為查詢單表要比關聯查詢多張錶速度要快。

壞處: 因為只有當需要用到數據時,才會進行數據庫查詢,這樣在大批量數據查詢時,因為查詢工作也要消耗時間,所以可能造成用戶等待時間變長,造成用戶體驗下降。

1.2 實現需求:

需求:查詢賬戶(Account)信息並且關聯查詢用戶(User)信息。如果先查詢賬戶(Account)信息即可滿足要求,當我們需要查詢用戶(User)信息時再查詢用戶(User)信息。把對用戶(User)信息的按需去查詢就是延遲加載。

1.3 使用 assocation 實現延遲加載:

1.3.1 賬戶的持久層 DAO 接口:

Mybatis知識day04 延遲加載&緩存&註解開發

1.3.2 賬戶的持久層映射文件:

Mybatis知識day04 延遲加載&緩存&註解開發

1.3.3 用戶的持久層接口和映射文件:

Mybatis知識day04 延遲加載&緩存&註解開發

1.3.4 開啟 Mybatis 的延遲加載策略:

我們需要在 Mybatis 的配置文件 SqlMapConfig.xml 文件中添加延遲加載的配置:

Mybatis知識day04 延遲加載&緩存&註解開發

1.3.5 編寫測試方法

1.4 使用 Collection 實現延遲加載:

1.4.1 在 User 實體類中加入 List<Account>屬性

1.4.2 編寫用戶和賬戶持久層接口的方法

1.4.3 編寫用戶持久層映射配置:

Mybatis知識day04 延遲加載&緩存&註解開發

1.4.4 編寫賬戶持久層映射配置:

Mybatis知識day04 延遲加載&緩存&註解開發

1.4.5 編寫測試方法

二、Mybatis 緩存

2.1 Mybatis 一級緩存:一級緩存是 SqlSession 範圍的緩存,當調用 SqlSession 的修改,添加,刪除,commit(),close()等方法時,就會清空一級緩存。

Mybatis知識day04 延遲加載&緩存&註解開發

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

2.2.1 二級緩存的開啟與關閉:

2.2.1.1 第一步:在 SqlMapConfig.xml 文件開啟二級緩存

Mybatis知識day04 延遲加載&緩存&註解開發

2.2.1.2 第二步:配置相關的 Mapper 映射文件

Mybatis知識day04 延遲加載&緩存&註解開發

2.2.1.3 第三步:配置 statement 上面的 useCache 屬性

Mybatis知識day04 延遲加載&緩存&註解開發

2.2.2 二級緩存注意事項:當我們在使用二級緩存時,所緩存的類一定要實現 java.io.Serializable 接口,這樣就可以使用序列化方式來保存對象。

第3章 Mybatis 註解開發

3.1 mybatis 的常用註解說明:

@Insert:實現新增

@Update:實現更新

@Delete:實現刪除

@Select:實現查詢

@Result:實現結果集封裝

@Results:可以與@Result 一起使用,封裝多個結果集

@ResultMap:實現引用

@Results 定義的封裝

@One:實現一對一結果集封裝

@Many:實現一對多結果集封裝

@SelectProvider: 實現動態 SQL 映射

@CacheNamespace:實現註解二級緩存的使用

3.2 使用 Mybatis 註解實現基本 CRUD:

3.2.1 編寫實體類

3.2.2 使用註解方式開發持久層接口:

3.2.2.1 查詢所有用戶:

Mybatis知識day04 延遲加載&緩存&註解開發

3.2.2.2 根據id查詢一個用戶:

Mybatis知識day04 延遲加載&緩存&註解開發

3.2.2.3 保存和更新操作:

Mybatis知識day04 延遲加載&緩存&註解開發

3.2.2.4 刪除操作和使用聚合函數

Mybatis知識day04 延遲加載&緩存&註解開發

3.2.2.4 模糊查詢操作:

Mybatis知識day04 延遲加載&緩存&註解開發

3.2.3 編寫 SqlMapConfig 配置文件

3.2.4 編寫測試方法

3.3 使用註解實現複雜關係映射開發:

3.3.1 複雜關係映射的註解說明:

Mybatis知識day04 延遲加載&緩存&註解開發

3.3.2 使用註解實現一對一複雜關係映射及延遲加載:

需求: 加載賬戶信息時並且加載該賬戶的用戶信息,根據情況可實現延遲加載。(註解方式實現)

3.3.2.1 添加 User 實體類及 Account 實體類:

Mybatis知識day04 延遲加載&緩存&註解開發
Mybatis知識day04 延遲加載&緩存&註解開發

3.3.2.2 添加賬戶的持久層接口並使用註解配置

Mybatis知識day04 延遲加載&緩存&註解開發

3.3.2.3 添加用戶的持久層接口並使用註解配置:

Mybatis知識day04 延遲加載&緩存&註解開發

3.3.2.4 測試一對一關聯及延遲加載

3.3.3 使用註解實現一對多複雜關係映射:

需求: 查詢用戶信息時,也要查詢他的賬戶列表。使用註解方式實現。

分析: 一個用戶具有多個賬戶信息,所以形成了用戶(User)與賬戶(Account)之間的一對多關係。

3.3.3.1 User 實體類加入 List<Account>:

Mybatis知識day04 延遲加載&緩存&註解開發

3.3.3.2 編寫用戶的持久層接口並使用註解配置

Mybatis知識day04 延遲加載&緩存&註解開發

@Many:

select 屬性:代表將要執行的 sql 語句

fetchType 屬性:代表加載方式,一般如果要延遲加載都設置為 LAZY 的值

3.3.3.3 編寫賬戶的持久層接口並使用註解配置

3.3.3.4 添加測試方法

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/203548.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-07 12:09
下一篇 2024-12-07 12:09

相關推薦

發表回復

登錄後才能評論