最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis中的延遲加載案例解析

 更新時間:2016年12月22日 14:21:15   作者:天盡頭的那片海  
這篇文章主要介紹了Mybatis中的延遲加載,場景結合案例分析非常不錯,具有參考借鑒價值,需要的朋友可以參考下

一、延遲加載

  resultMap可以實現(xiàn)高級映射(使用association、collection實現(xiàn)一對一及一對多映射),association、collection具備延遲加載功能。

  延遲加載:先從單表查詢,需要時再從關聯(lián)表去關聯(lián)查詢,大大提高數(shù)據(jù)庫性能,因為查詢單表要比關聯(lián)查詢多張表速度要快。

在mybatis核心配置文件中配置:

     lazyLoadingEnabled、aggressiveLazyLoading

設置項

描述

允許值

默認值

lazyLoadingEnabled

全局性設置懶加載。如果設為‘false',則所有相關聯(lián)的都會被初始化加載。

true | false

false

aggressiveLazyLoading

當設置為‘true'的時候,懶加載的對象可能被任何懶屬性全部加載。否則,每個屬性都按需加載。

true | false

true

<settings>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="aggressiveLazyLoading" value="false"/>
</settings>

場合:

         當只有部分記錄需要關聯(lián)查詢其它信息時,此時可按需延遲加載,需要關聯(lián)查詢時再向數(shù)據(jù)庫發(fā)出sql,以提高數(shù)據(jù)庫性能。

         當全部需要關聯(lián)查詢信息時,此時不用延遲加載,直接將關聯(lián)查詢信息全部返回即可,可使用resultType或resultMap完成映射。

二:案例:(在部門和員工一對多)

源碼介紹:

1.Dept.java

package cn.zhang.entity;
import java.util.HashSet;
import java.util.Set;
public class Dept {
 private Integer deptno;
 private String deptname;
 private Set<Emp> emp = new HashSet<Emp>();
 @Override
 public String toString() {
  return "Dept [deptno=" + deptno + ", deptname=" + deptname + ", emp="
    + emp + "]";
 }
 public Integer getDeptno() {
  return deptno;
 }
 public void setDeptno(Integer deptno) {
  this.deptno = deptno;
 }
 public String getDeptname() {
  return deptname;
 }
 public void setDeptname(String deptname) {
  this.deptname = deptname;
 }
 public Set<Emp> getEmp() {
  return emp;
 }
 public void setEmp(Set<Emp> emp) {
  this.emp = emp;
 }
}

2.Emp.java

package cn.zhang.entity;
public class Emp {
 private Integer empno;
 private String empname;
 @Override
 public String toString() {
  return "Emp [empno=" + empno + ", empname=" + empname + "]";
 }
 public Integer getEmpno() {
  return empno;
 }
 public void setEmpno(Integer empno) {
  this.empno = empno;
 }
 public String getEmpname() {
  return empname;
 }
 public void setEmpname(String empname) {
  this.empname = empname;
 }
}

3.MybatisUtil.java

package cn.zhang.util;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * 工具類
 * 
 */
public class MybatisUtil {
 private static String config = "mybatis-config.xml";
 static Reader reader;
 static {
  try {
   reader = Resources.getResourceAsReader(config);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 private static SqlSessionFactory factory = new SqlSessionFactoryBuilder()
   .build(reader);
 // 提供一個可以獲取到session的方法
 public static SqlSession getSession() throws IOException {
  SqlSession session = factory.openSession();
  return session;
 }
}

4.DeptDao.java

package cn.zhang.dao;
import java.io.IOException;
import cn.zhang.entity.Dept;
public interface DeptDao {
 /**
  * 查詢指定記錄
  * @return
  * @throws IOException
  */
 public Dept findById(Integer id) throws IOException;
}

5.DeptDAO.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.zhang.dao.DeptDao">
 <!-- 3.根據(jù)員工id查詢員工信息 -->
 <select id="selectEmpByDeptNo" resultType="Emp">
  select empno,empname
  from emp where deptno=#{deptno}
 </select>
 <!-- 2.對部門實體的映射 -->
 <resultMap type="Dept" id="deptMapper">
  <id property="deptno" column="deptno" />
  <result property="deptname" column="deptname" />
  <!-- 一對多部門關聯(lián)的員工 -->
  <!--select:關聯(lián)員工查詢 -->
  <!--column:關聯(lián)員工查詢所需要的條件(來源于1) -->
  <collection property="emp" ofType="Emp" select="selectEmpByDeptNo"
   column="deptno" />
 </resultMap>
 <!--1.根據(jù)部門id查詢部門信息 -->
 <select id="findById" resultMap="deptMapper">
  select deptno,deptname from dept
  where deptno=#{deptno}
 </select>
</mapper>

6.mybatis-config.xml (延遲加載的配置在此)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <!--lazyLoadingEnabled:設置懶加載,默認為false。如果為false:則所有相關聯(lián)的都會被初始化加載。
  aggressiveLazyLoading:默認為true。當設置為true時,懶加載的對象可能被任何懶屬性全部加載;否則,每個屬性按需加載。 -->
 <settings>
  <!-- 打開延遲加載的開關 -->
  <setting name="lazyLoadingEnabled" value="true" />
  <!-- 將積極加載改為消息加載即按需加載 -->
  <setting name="aggressiveLazyLoading" value="false" />
 </settings>
 <!-- 配置別名 -->
 <typeAliases>
  <!--方式一: 按類型名定制別名 -->
  <!--方式二: 拿當前指定包下的簡單類名作為別名 -->
  <package name="cn.zhang.entity" />
 </typeAliases>
 <environments default="oracle">
  <environment id="oracle">
   <!-- 使用jdbc的事務 -->
   <transactionManager type="JDBC" />
   <!-- 使用自帶的連接池 -->
   <dataSource type="POOLED">
    <!-- 我用的Oracle數(shù)據(jù)庫 -->
    <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
    <property name="username" value="study" />
    <property name="password" value="123" />
   </dataSource>
  </environment>
 </environments>
 <mappers>
  <mapper resource="cn/zhang/dao/DeptDAO.xml" />
 </mappers>
</configuration>

7.MyTest.java(測試類)

package cn.zhang.test;
//一對多
import java.io.IOException;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
import cn.zhang.dao.DeptDao;
import cn.zhang.entity.Dept;
import cn.zhang.util.MybatisUtil;
public class MyTest {
 DeptDao dao;
 @Before
 public void initData() throws IOException{
  SqlSession session = MybatisUtil.getSession();
  dao = session.getMapper(DeptDao.class);
 }
 /**
  * 查詢指定記錄
  * @throws IOException
  */
 @Test
 public void findAll() throws IOException{
  Dept dept = dao.findById(1);
  System.out.println(dept);
 }
}

測試結果:

在下面位置打斷點

情況一:在mybatis-config.xml中不做配置情況

情況二:在mybatis-config.xml中配置

<settings>
 <!-- 打開延遲加載的開關 -->
 <setting name="lazyLoadingEnabled" value="true" />
 <!-- 將積極加載改為消息加載即按需加載 -->
 <setting name="aggressiveLazyLoading" value="false" />
</settings>

下一步:

F6下步:

F6下步:打出員工的名字

 情況三:

F6下一步:

 F6下一步:打印出員工名字

以上所述是小編給大家介紹的Mybatis中的延遲加載,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關文章

  • Java校驗銀行卡是否正確的核心代碼

    Java校驗銀行卡是否正確的核心代碼

    這篇文章主要介紹了Java校驗銀行卡是否正確的核心代碼,需要的朋友可以參考下
    2017-01-01
  • MybatisPlus字段自動填充&樂觀鎖的方法實現(xiàn)

    MybatisPlus字段自動填充&樂觀鎖的方法實現(xiàn)

    MyBatis-Plus提供了便捷的自動填充功能,可用于自動處理創(chuàng)建時間、更新時間等字段,本文來介紹一下MybatisPlus字段自動填充&樂觀鎖的方法實現(xiàn),感興趣的可以了解一下
    2025-08-08
  • JavaStream將List轉為Map示例

    JavaStream將List轉為Map示例

    這篇文章主要為大家介紹了JavaStream將List轉為Map示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Java基礎知識之StringWriter流的使用

    Java基礎知識之StringWriter流的使用

    這篇文章主要介紹了Java基礎知識之StringWriter流的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 谷歌二維碼引擎com.google.zxing二維碼生成與解析

    谷歌二維碼引擎com.google.zxing二維碼生成與解析

    這篇文章主要給大家介紹了關于谷歌二維碼引擎com.google.zxing二維碼生成與解析的相關資料,zxing是google開源的二維碼生成和解析工具,需要的朋友可以參考下
    2023-07-07
  • Java中System.setProperty()用法與實際應用場景

    Java中System.setProperty()用法與實際應用場景

    System.setProperty是Java中用于設置系統(tǒng)屬性的方法,它允許我們在運行時為Java虛擬機(JVM)或應用程序設置一些全局的系統(tǒng)屬性,下面這篇文章主要給大家介紹了關于Java中System.setProperty()用法與實際應用場景的相關資料,需要的朋友可以參考下
    2024-04-04
  • Spring Data JPA 關鍵字Exists的用法說明

    Spring Data JPA 關鍵字Exists的用法說明

    這篇文章主要介紹了Spring Data JPA 關鍵字Exists的用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • spring aop之鏈式調用的實現(xiàn)

    spring aop之鏈式調用的實現(xiàn)

    這篇文章主要介紹了spring aop之鏈式調用的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • Spring Retry重試框架的使用講解

    Spring Retry重試框架的使用講解

    重試的使用場景比較多,比如調用遠程服務時,由于網(wǎng)絡或者服務端響應慢導致調用超時,此時可以多重試幾次。用定時任務也可以實現(xiàn)重試的效果,但比較麻煩,用Spring Retry的話一個注解搞定所有,感興趣的可以了解一下
    2023-01-01
  • Java?JWT實現(xiàn)跨域身份驗證方法詳解

    Java?JWT實現(xiàn)跨域身份驗證方法詳解

    JWT(JSON?Web?Token)是目前流行的跨域認證解決方案,是一個開放標準(RFC?7519),它定義了一種緊湊的、自包含的方式,用于作為JSON對象在各方之間安全地傳輸信息。本文將介紹JWT如何實現(xiàn)跨域身份驗證,感興趣的可以學習一下
    2022-01-01

最新評論

通许县| 香格里拉县| 盐池县| 郁南县| 彰化县| 承德县| 西城区| 伊春市| 嵊泗县| 遂昌县| 泗水县| 东山县| 深州市| 潞西市| 彰化市| 金溪县| 江山市| 松原市| 阿克苏市| 独山县| 尤溪县| 伊宁县| 竹山县| 赤城县| 浦县| 元氏县| 建阳市| 重庆市| 麟游县| 冷水江市| 桃园县| 永康市| 芜湖县| 资源县| 旺苍县| 乌什县| 四平市| 佳木斯市| 西华县| 慈利县| 河池市|