core mysql 延迟加载_mybatis延迟加载及实例讲解
延遲加載基本概念
上面我們已經知道使用association、collection可以實現一對一及一對多映射,association、collection還有另外一個延遲加載的功能。
延遲加載(lazy load)是關聯對象默認的加載方式,延遲加載機制是為了避免一些無謂的性能開銷而提出來的,所謂延遲加載就是當在真正需要數據的時候,才真正執行數據加載操作。
mybatis默認沒有開啟延遲加載功能,需要在springboot的yml配置文件中啟動延遲加載功能:
mybatis-plus:
mapper-locations: "classpath:com/itpsc/mapper/**/*.xml"
type-aliases-package: "com.itpsc.entity"
global-config:
db-column-underline: true
configuration:
map-underscore-to-camel-case: true
cache-enabled: true #配置的緩存的全局開關
lazyLoadingEnabled: true #延時加載的開關
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #打印sql語句,調試用
延遲加載例子
比如查詢員工信息的時候關聯查詢員工的部門信息。我們可以先把員工信息查詢出來,當遍歷員工信息需要查詢對應的部門信息的時候,就可以調用員工的getDept()方法去加載部門信息。
EmpMapper.xml
select * from t_emp;
DeptMapper.xml
select * from t_dept where t_dept.deptno=#{emp.deptno}
測試代碼
@Testpublic voidtestQueryEmpLazyLoadDept() {
List empList =empService.queryEmpLazyLoadDept();
System.out.println(empList.size());for(int i=0;i
Emp emp=empList.get(i);
System.out.println("員工信息:" +emp.toString());
System.out.println("員工所有部門信息:" +emp.getDept());
}
}
運行結果
JDBC Connection [com.mysql.jdbc.JDBC4Connection@1cd6b1bd] will not be managed bySpring==> Preparing: select * from t_dept where t_dept.deptno=?==> Parameters: 10(Integer)<==Columns: deptno, dname, loc<== Row: 10, ACCOUNTING, NEW YORK<== Total: 1員工信息:Emp{empno=7934, ename='MILLER', job='CLERK', mgr=7782, hiredate=Sat Jan 23 00:00:00 CST 1982, sal=1300.0, comm=null, deptno=10, skillList=null}
員工所有部門信息:Dept{deptno=10, dname='ACCOUNTING', loc='NEW YORK'}
從運行結果可以看出,調用Emp對象的getDept()方法是,才發出查詢部門信息的sql語句,達到延遲加載的作用。
總結
以上是生活随笔為你收集整理的core mysql 延迟加载_mybatis延迟加载及实例讲解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue中 点击事件的写法_vue中的事件
- 下一篇: 导出excel数字前面的0消失_Exce