1.概念
懶載入就是按需載入,我們需要什麼的時候再去進行什麼操作。而且先從單錶查詢,需要時再從關聯表去關聯查詢,能很大提高資料庫效能,因為查詢單錶要比關聯查詢多張表速度要快。
在mybatis中,resultmap可以實現高階對映(使用association、collection實現一對一及一對多對映),association、collection具備延遲載入功能。
2.demo
1.建立部門表和員工表(ps:這裡員工表有乙個外來鍵對映的關係,實現一對多)
2.建立實體
@data
public class department
3.測試
1.test
@test
public void contextloads() {
list departments = userdao.getdepartment();
system.out.println("*****====only query department**********");
system.out.println("departmentname: "+departments.get(0).getname());
system.out.println("*****====query department and employee**********");
system.out.println("employeename: "+departments.get(0).getemployeelist().get(0).getname());
2.總結
當配置懶載入(fetchtype="lazy")時,可以看到控制台輸出,在只查詢部門時,僅查詢部門sql,在需要獲取員工時,才回去查詢涉及到員工的sql。
==> preparing: select * from department
==> parameters:
<== columns: id, name
<== row: 1, 開發部
<== row: 2, 產品部
<== row: 3, 人事部
<== total: 3
closing non transactional sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@216914]
*****====only query department**********
departmentname: 開發部
*****====query department and employee**********
==> preparing: select * from employee where department_id = ?
==> parameters: 1(integer)
<== columns: id, name, department_id
<== row: 1, 張三, 1
<== row: 4, 王健, 1
<== total: 2
employeename: 張三
當不配置懶載入(fetchtype="lazy")時,可以看到控制台輸出,在結果集之前sql全部執行。
==> preparing: select * from department
==> parameters:
<== columns: id, name
<== row: 1, 開發部
====> preparing: select * from employee where department_id = ?
====> parameters: 1(integer)
<==== columns: id, name, department_id
<==== row: 1, 張三, 1
<==== row: 4, 王健, 1
<==== total: 2
<== row: 2, 產品部
====> preparing: select * from employee where department_id = ?
====> parameters: 2(integer)
<==== columns: id, name, department_id
<==== row: 2, 李四, 2
<==== total: 1
<== row: 3, 人事部
====> preparing: select * from employee where department_id = ?
====> parameters: 3(integer)
<==== columns: id, name, department_id
<==== row: 3, 王二, 3
<==== total: 1
<== total: 3
closing non transactional sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@35764bef]
*****====only query department**********
departmentname: 開發部
*****====query department and employee**********
employeename: 張三
Mybatis延遲載入(懶載入)
將採用高階對映實現多表聯查時向資料庫發出的sql語句拆分成若干條單錶查詢的sql語句,當需要返回資料時才會向資料庫發出只針對當前資料的sql語句。需求 根據訂單編號,查詢訂單,並返回訂單詳情描述資訊實現延遲載入的前提條件 在settings中配置與延遲載入有關的屬性.column 查詢user的引數...
MyBatis 懶載入丶快取
2.一級快取 3.二級快取 1.1 概述 1.1 在主配置檔案中開啟對懶載入的支援 name lazyloadingenabled value true name aggressivelazyloading value false settings 1.2 多對一association標籤中使用延遲...
MyBatis學習(十二) 懶載入
通俗的講就是按需載入,我們需要什麼的時候再去進行什麼操作。而且先從單錶查詢,需要時再從關聯表去關聯查詢,能大大提高資料庫效能,因為查詢單錶要比關聯查詢多張表速度要快。在mybatis中,resultmap可以實現高階對映 使用association collection實現一對一及一對多對映 ass...