欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis的?級映射及延遲加載過程詳解

 更新時間:2023年02月08日 14:24:43   作者:@每天都要敲代碼  
這篇文章主要介紹了MyBatis的?級映射及延遲加載,包括多對一延時加載方式及一對多,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

一:MyBatis的?級映射及延遲加載

前期準備:

模塊名:mybatis-010-advanced-mapping

打包?式:jar

引?依賴:mysql驅(qū)動依賴、mybatis依賴、junit依賴、logback依賴

pojo:com.powernode.mybatis.pojo.Student和Calzz

mapper接?:com.powernode.mybatis.mapper.StudentMapper和ClazzMapper

引?配置?件:mybatis-config.xml、jdbc.properties、logback.xml

mapper配置?件:com/powernode/mybatis/mapper/StudentMapper.xml和ClazzMapper.xml

編寫測試類:com.powernode.mybatis.test.StudentMapperTest和ClazzMapperTest

拷??具類:com.powernode.mybatis.utils.SqlSessionUtil

準備數(shù)據(jù)庫表:?個班級對應多個學?:

班級表:t_clazz

學?表:t_student

clazz實例類

package com.bjpowernode.mybatis.pojo;
 
/**
 * @Author:朗朗乾坤
 * @Package:com.bjpowernode.mybatis.pojo
 * @Project:mybatis
 * @name:Clazz
 * @Date:2023/1/7 18:18
 */
public class Clazz {
    private Integer cid;
    private String cname;
 
    public Clazz() {
    }
 
    public Clazz(Integer cid, String cname) {
        this.cid = cid;
        this.cname = cname;
    }
 
    @Override
    public String toString() {
        return "Clazz{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                '}';
    }
 
    public Integer getCid() {
        return cid;
    }
 
    public void setCid(Integer cid) {
        this.cid = cid;
    }
 
    public String getCname() {
        return cname;
    }
 
    public void setCname(String cname) {
        this.cname = cname;
    }
}

Student實體類:只定義兩個字段;對于cid屬性,是為了維護兩者關(guān)系的屬性

package com.bjpowernode.mybatis.pojo;
 
/**
 * @Author:朗朗乾坤
 * @Package:com.bjpowernode.mybatis.pojo
 * @Project:mybatis
 * @name:Student
 * @Date:2023/1/7 18:18
 */
public class Student { 
    private Integer sid;
    private String sname;
   
    public Student() {
    }
    public Student(Integer sid, String sname) {
        this.sid = sid;
        this.sname = sname;
    }
 
    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                '}';
    }
 
    public Integer getSid() {
        return sid;
    }
 
    public void setSid(Integer sid) {
        this.sid = sid;
    }
 
    public String getSname() {
        return sname;
    }
 
    public void setSname(String sname) {
        this.sname = sname;
    }
}

1. 多對?

pojo類Student中添加?個屬性:Clazz clazz; 表示學?關(guān)聯(lián)的班級對象,增加setter and getter方法,重寫toString方法。

package com.bjpowernode.mybatis.pojo;
 
/**
 * @Author:朗朗乾坤
 * @Package:com.bjpowernode.mybatis.pojo
 * @Project:mybatis
 * @name:Student
 * @Date:2023/1/7 18:18
 */
public class Student { // Student是多的一方
    private Integer sid;
    private String sname;
    private Clazz clazz; // Clazz是一的一方
 
    public Student() {
    }
    public Student(Integer sid, String sname) {
        this.sid = sid;
        this.sname = sname;
    }
 
    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", clazz=" + clazz +
                '}';
    }
 
    public Clazz getClazz() {
        return clazz;
    }
 
    public void setClazz(Clazz clazz) {
        this.clazz = clazz;
    }
 
    public Integer getSid() {
        return sid;
    }
 
    public void setSid(Integer sid) {
        this.sid = sid;
    }
 
    public String getSname() {
        return sname;
    }
 
    public void setSname(String sname) {
        this.sname = sname;
    }
}

多對一:多個學生Student對應一個班級Clazz

多種?式,常?的包括三種:

① 第?種?式:?條SQL語句,級聯(lián)屬性映射。

② 第?種?式:?條SQL語句,association。

③第三種?式:兩條SQL語句,分步查詢。

第?種?式:級聯(lián)屬性映射

三兄弟之一:StudentMapper接口,編寫方法

根據(jù)id獲取學生Student信息,同時獲取學生關(guān)聯(lián)的班級Clazz信息

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Student;
 
public interface StudentMapper {
    /*
     * @param id 學生的id
     * @return 學生對象,但是學生對象當中含有班級對象
     */
    Student selectById(Integer id);
    
}

三兄弟之二:StudentMapper.xml文件,編寫sql語句

(1)使用resultMap來指定映射關(guān)系,結(jié)果映射resultMap有兩個參數(shù):

一個參數(shù)是id,指定resultMap的唯一標識,這個id將來在select標簽中使用。

一個參數(shù)是type,用來指定POJO類的類名。

(2)在resultMap下還有一個子標簽result;首先對于有主鍵的需要配一個id,不是必須的,但可以增加效率;下面使用result子標簽的property屬性和column屬性分別指定POJO類的屬性名和數(shù)據(jù)庫表中的字段表之間的映射關(guān)系。

<?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="com.bjpowernode.mybatis.mapper.StudentMapper">
    <!--多對一映射的第一種方式:一條SQL語句,級聯(lián)屬性映射-->
    <resultMap id="studentResultMap" type="Student">
        <id property="id" column="id"/>
        <result property="sid" column="sid"/>
        <result property="clazz.cid" column="cid"/>
        <result property="clazz.cname" column="cname" />
    </resultMap>
 
    <select id="selectById" resultMap="studentResultMap">
      select
        s.sid,s.sname,c.cid,c.cname
      from
        t_student s
      left join
        t_clazz c
      on s.cid = c.cid
      where
        s.sid = #{sid}
    </select>
</mapper>
<?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="com.bjpowernode.mybatis.mapper.StudentMapper">
    <!--多對一映射的第一種方式:一條SQL語句,級聯(lián)屬性映射-->
    <resultMap id="studentResultMap" type="Student">
        <id property="id" column="id"/>
        <result property="sid" column="sid"/>
        <result property="clazz.cid" column="cid"/>
        <result property="clazz.cname" column="cname" />
    </resultMap>
 
    <select id="selectById" resultMap="studentResultMap">
      select
        s.sid,s.sname,c.cid,c.cname
      from
        t_student s
      left join
        t_clazz c
      on s.cid = c.cid
      where
        s.sid = #{sid}
    </select>
</mapper>

三兄弟之三:StudentMappeTest類,用來編寫測試類

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class StudentMapperTest {
    @Test
    public void testSelectById(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.selectById(1);
        // 直接輸出Student對象
        System.out.println(student);
        // 輸出每個屬性
        System.out.println(student.getSid());
        System.out.println(student.getSname());
        System.out.println(student.getClazz().getCid());
        System.out.println(student.getClazz().getCname());
 
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:

第?種?式:association標簽

第二種方式,和第一種方式的代碼很類似,就是多引入一個association標簽,association翻譯為關(guān)聯(lián)的意思

三兄弟之一:StudentMapper接口,編寫方法

根據(jù)id獲取學生Student信息,同時獲取學生關(guān)聯(lián)的班級Clazz信息

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Student;
 
public interface StudentMapper {
     /**
     * 一條SQL語句,使用association標簽的方式
     * @param id 學生的id
     * @return 學生對象,但是學生對象當中含有班級對象
     */
    Student selectByIdAssociation(Integer id);
    
}

三兄弟之二:StudentMapper.xml文件,編寫sql語句

association:翻譯為關(guān)聯(lián),一個Student對象關(guān)聯(lián)一個Clazz對象

①property標簽:提供要映射的POJO類的屬性名,這里就是clazz

②javaType標簽:用來指定要映射的java類型,這里就是com.bjpowernode.mybatis.Clazz

<?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="com.bjpowernode.mybatis.mapper.StudentMapper">
    <!--一條SQL語句,引入association標簽-->
    <resultMap id="studentResultMapAssociation" type="Student">
        <id property="sid" column="sid"/>
        <result property="sname" column="sname"/>
        <!--使用assocaition標簽-->
        <association property="clazz" javaType="Clazz">
            <!--雖然字段是相同的,但是不能省略不寫-->
            <id property="cid" column="cid"/>
            <result property="cname" column="cname" />
        </association>
    </resultMap>
    
    <select id="selectByIdAssociation" resultMap="studentResultMapAssociation">
        select
        s.sid,s.sname,c.cid,c.cname
      from
        t_student s
      left join
        t_clazz c
      on s.cid = c.cid
      where
        s.sid = #{sid}
    </select>
</mapper>

三兄弟之三:StudentMappeTest類,用來編寫測試類

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class StudentMapperTest {
     @Test
    public void testSelectByIdAssociation(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.selectByIdAssociation(2);
        // 直接輸出Student對象
        System.out.println(student);
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:

第三種?式:分步查詢

分布查詢,需要兩條SQL語句,這種?式常?:

①優(yōu)點?是可復?。

②優(yōu)點?是?持懶加載(延遲加載)

(1)分布查詢第一步:先根據(jù)學生的sid查詢學生信息

①在StudentMapper中編寫第一步的查詢方法

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Student;
 
public interface StudentMapper {
    
    // 分布查詢第一步:現(xiàn)根據(jù)學生的sid查詢學生信息
    Student selectByIdStep1(Integer id);
 
}

②在StudentMapper.xml中編寫SQL語句,并指明兩者之間的關(guān)聯(lián)關(guān)系

還是需要association標簽:

①property屬性:還是提供要映射的POJO類的屬性名,這里就是clazz

②select屬性:用來指定另外第二步SQL語句的id,這個id實際上就是namespace+id;通過第二步語句的查詢結(jié)果,把值賦值給clazz

③column屬性:是把第一條SQL語句查詢出來的cid傳給第第二條SQL語句

<?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="com.bjpowernode.mybatis.mapper.StudentMapper">   
    <!--這是第一步:根據(jù)學生的id查詢學生的所有信息,包含cid-->
    <resultMap id="studentResultMapByStep" type="Student">
        <id property="sid" column="sid"/>
        <result property="sname" column="sname" />
        <!--使用association標簽,指明關(guān)聯(lián)關(guān)系-->
        <association property="clazz"
                     select="com.bjpowernode.mybatis.mapper.ClazzMapper.selectByIdStep2"
                     column="cid"/>
    </resultMap>
 
    <select id="selectByIdStep1" resultMap="studentResultMapByStep">
        select sid,sname,cid from t_student where sid = #{sid};
    </select>
 
</mapper>

(2)分布查詢第二步:根據(jù)學生的cid查詢班級信息

①在ClazzMapper中編寫第二步的查詢方法

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Clazz;
 
public interface ClazzMapper {
    // 分布查詢第二步:根據(jù)cid獲取查詢信息
    Clazz selectByIdStep2(Integer cid);
}

②在ClazzMapper.xml中編寫SQL語句

<?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="com.bjpowernode.mybatis.mapper.ClazzMapper">
    <!--分布查詢第二步:根據(jù)cid獲取班級信息-->
    <select id="selectByIdStep2" resultType="Clazz">
        select cid,cname from t_clazz where cid = #{id};
    </select>
</mapper>

(3)最終StudentMapperTest編寫測試,因為Student是主表

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class StudentMapperTest {
    @Test
    public void testSelectByIdStep1(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.selectByIdStep1(3);
        System.out.println(student);
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:

2. 多對?延遲加載

(1)延遲加載的核心是:用到的在查詢,暫時訪問不到的數(shù)據(jù)可以先不查詢。

(2)作用:提?程序的執(zhí)?效率;不用的時候也查性能肯定低,例如笛卡爾積現(xiàn)象

(3)在MyBatis中如何開啟延遲加載:asspciation標簽當中添加fetchType="lazy"

例1:不開啟延遲加載機制,假如只訪問學生表t_student的sname屬性,和t_clazz表實際上是沒有任何關(guān)系的

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.StudentMapper;
import com.bjpowernode.mybatis.pojo.Student;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
 
public class StudentMapperTest {
    @Test
    public void testSelectByIdStep1(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
        Student student = mapper.selectByIdStep1(3);
        // System.out.println(student);
        // 只訪問sname屬性
        System.out.println(student.getSname());
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:實際上執(zhí)行了兩個查詢語句,效率變低

例2:在asspciation標簽中開啟延遲機制,就能做到只執(zhí)行第一條SQL語句,第二條不執(zhí)行;

<?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="com.bjpowernode.mybatis.mapper.StudentMapper">
    <resultMap id="studentResultMapByStep" type="Student">
        <id property="sid" column="sid"/>
        <result property="sname" column="sname" />
        <!--使用association標簽,并開啟延遲加載機制-->
        <association property="clazz"
                     select="com.bjpowernode.mybatis.mapper.ClazzMapper.selectByIdStep2"
                     column="cid"
                     fetchType="lazy"/>
    </resultMap>
 
    <select id="selectByIdStep1" resultMap="studentResultMapByStep">
        select sid,sname,cid from t_student where sid = #{sid};
    </select>
</mapper>

執(zhí)行結(jié)果:同樣還是只訪問學生表t_student的sname屬性,此時就是只查詢一張表即可

(4)在association標簽中配置fetchType=“lazy”,實際上是局部的設置,只對當前的association關(guān)聯(lián)的SQL語句起作用!

(5)那么怎樣在mybatis中如何開啟全局的延遲加載呢?需要setting配置,如下:

 (6)在核心配置文件mybatis-config.xml文件當中使用setting標簽進行配置

    <!--啟?全局延遲加載機制-->
    <settings>
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

(7)開啟全局延遲加載之后,所有的SQL都會?持延遲加載,但是如果某個SQL你不希望它?持延遲加載怎么辦呢? 將fetchType設置為eager

<?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="com.bjpowernode.mybatis.mapper.StudentMapper">
    <resultMap id="studentResultMapByStep" type="Student">
        <id property="sid" column="sid"/>
        <result property="sname" column="sname" />
        <!--使用association標簽,不開啟延遲加載機制-->
        <association property="clazz"
                     select="com.bjpowernode.mybatis.mapper.ClazzMapper.selectByIdStep2"
                     column="cid"
                     fetchType="eager"/>
    </resultMap>
 
    <select id="selectByIdStep1" resultMap="studentResultMapByStep">
        select sid,sname,cid from t_student where sid = #{sid};
    </select>
</mapper>

3. ?對多

?對多的實現(xiàn),通常是在?的??中有List集合屬性!

pojo類Clazz中添加?個屬性:List<Student> stu; 表示班級關(guān)聯(lián)的學生對象,增加setter and getter方法,重寫toString方法。

package com.bjpowernode.mybatis.pojo;
 
import java.util.*;
 
public class Clazz {
    private Integer cid;
    private String cname;
    private List<Student> stus;
    
    public Clazz() {
    }
 
    public Clazz(Integer cid, String cname) {
        this.cid = cid;
        this.cname = cname;
    }
 
    @Override
    public String toString() {
        return "Clazz{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                ", stus=" + stus +
                '}';
    }
 
    public List<Student> getStus() {
        return stus;
    }
 
    public void setStus(List<Student> stus) {
        this.stus = stus;
    }
 
    public Integer getCid() {
        return cid;
    }
 
    public void setCid(Integer cid) {
        this.cid = cid;
    }
 
    public String getCname() {
        return cname;
    }
 
    public void setCname(String cname) {
        this.cname = cname;
    }
}

?對多的實現(xiàn)通常包括兩種實現(xiàn)?式:

①第?種?式:collection

②第?種?式:分步查詢

第?種?式:collection

注:這次t_calss是主表,所以是在ClazzMapper、ClazzMapper.xml、ClazzMapperTest當中完成一些列操作。

 三兄弟之一:ClazzMapper接口,編寫方法

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Clazz;
 
public interface ClazzMapper {
    
   // 根據(jù)班級編號查詢班級信息
    Clazz selectByIdCollection(Integer cid);
}

三兄弟之二:ClazzMapper.xml文件,編寫sql語句

使用collection標簽,和上面使用association標簽的第二種方法是很相似的

①property屬性:提供要映射的POJO類的屬性名,這里就是stus

②ofType屬性:用來指定集合當中的元素類型com.bjpowernode.mybatis.Student

<?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="com.bjpowernode.mybatis.mapper.ClazzMapper">
    <resultMap id="clazzResultMap" type="Clazz">
        <id property="cid" column="cid"/>
        <result property="cname" column="cname"/>
        <!--ofType用來指定集合當中的元素類型-->
        <collection property="stus" ofType="Student">
            <id property="sid" column="sid"/>
            <result property="sname" column="sname"/>
        </collection>
    </resultMap>
 
    <select id="selectByIdCollection" resultMap="clazzResultMap">
        select
          c.cid,c.cname,s.sid,s.sname
        from
          t_clazz c
        left join
          t_student s
        on c.cid = s.cid
        where c.cid = #{cid}
    </select>
</mapper>

三兄弟之三:ClazzMappeTest類,用來編寫測試類

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.ClazzMapper;
import com.bjpowernode.mybatis.pojo.Clazz;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class ClazzMapperTest {
    @Test
    public void testSelectByIdCollection(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        ClazzMapper mapper = sqlSession.getMapper(ClazzMapper.class);
        Clazz clazz = mapper.selectByIdCollection(1001);
        System.out.println(clazz);
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:

 查詢的結(jié)果是stus變量是一個有三個數(shù)據(jù)的List集合,其中clazz是null屬于正?,F(xiàn)象,如果clazz還有值,就會與前面的Student形成遞歸循環(huán) 

第?種?式:分步查詢和延遲加載

(1)分布查詢第一步:先根據(jù)班級編號獲取班級信息

①在ClazzMapper中編寫第一步的查詢方法

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Clazz;
 
public interface ClazzMapper {
 
    // 分布查詢第一步:根據(jù)班級編號,獲取班級信息
    Clazz selectByStep1(Integer cid);
}

②在ClazzMapper.xml中編寫SQL語句,并指明兩者之間的關(guān)聯(lián)關(guān)系

<?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="com.bjpowernode.mybatis.mapper.ClazzMapper">
   <!--分布查詢第一步:根據(jù)班級的cid獲取班級信息-->
    <resultMap id="clazzResultMapStep" type="Clazz">
        <id property="cid" column="cid"/>
        <result property="cname" column="cname"/>
        <collection property="stus"
                    select="com.bjpowernode.mybatis.mapper.StudentMapper.selectByCidStep2"
                    column="cid" />
    </resultMap>
    <select id="selectByStep1" resultMap="clazzResultMapStep">
        select cid,cname from t_clazz where cid = #{cid}
    </select>
</mapper>

(2)分布查詢第二步:根據(jù)學生的cid查詢班級信息

①在StudentMapper中編寫第二步的查詢方法

package com.bjpowernode.mybatis.mapper;
 
import com.bjpowernode.mybatis.pojo.Student;
import java.util.List;
 
public interface StudentMapper {
   
    // 分布查詢第二步:根據(jù)班級編號查詢學生信息
    List<Student> selectByCidStep2(Integer cid);
}

②在StudentMapper.xml中編寫SQL語句

<?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="com.bjpowernode.mybatis.mapper.StudentMapper">
    <select id="selectByCidStep2" resultType="Student">
        select * from t_student where cid = #{cid}
    </select>
</mapper>

(3)最終ClazzMapperTest編寫測試,因為Clazz是主表

package com.bjpowernode.mybatis.test;
 
import com.bjpowernode.mybatis.mapper.ClazzMapper;
import com.bjpowernode.mybatis.pojo.Clazz;
import com.bjpowernode.mybatis.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
 
public class ClazzMapperTest {
    @Test
    public void testSelectByStep1(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        ClazzMapper mapper = sqlSession.getMapper(ClazzMapper.class);
        Clazz clazz = mapper.selectByStep1(1001);
        System.out.println(clazz);
        sqlSession.close();
    }
}

執(zhí)行結(jié)果:

?對多延遲加載機制和多對?是?樣的,同樣是通過兩種?式:

第?種:fetchType="lazy"

第?種:修改全局的配置setting,lazyLoadingEnabled=true,如果開啟全局延遲加載,想讓某個 sql不使?延遲加載:fetchType="eager"

到此這篇關(guān)于MyBatis的?級映射及延遲加載的文章就介紹到這了,更多相關(guān)MyBatis延遲加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實現(xiàn)雙色球抽獎算法

    java實現(xiàn)雙色球抽獎算法

    這篇文章主要為大家詳細介紹了java實現(xiàn)雙色球抽獎算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Spring Boot實現(xiàn)圖片上傳功能

    Spring Boot實現(xiàn)圖片上傳功能

    這篇文章主要為大家詳細介紹了Spring Boot實現(xiàn)圖片上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SpringBoot整合Javamail實現(xiàn)郵件發(fā)送的詳細過程

    SpringBoot整合Javamail實現(xiàn)郵件發(fā)送的詳細過程

    日常開發(fā)過程中,我們經(jīng)常需要使用到郵件發(fā)送任務,比方說驗證碼的發(fā)送、日常信息的通知等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Javamail實現(xiàn)郵件發(fā)送的詳細過程,需要的朋友可以參考下
    2022-10-10
  • SpringMVC使用@Valid注解進行數(shù)據(jù)驗證的方法

    SpringMVC使用@Valid注解進行數(shù)據(jù)驗證的方法

    本篇文章主要介紹了SpringMVC使用@Valid注解進行數(shù)據(jù)驗證的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java中的Object類詳細解讀

    Java中的Object類詳細解讀

    這篇文章主要介紹了Java中的Object類詳細解讀,java.lang.Object是類層次結(jié)構(gòu)的根類,即所有其它類的父類,每個類都使用 Object 作為超類,需要的朋友可以參考下
    2023-11-11
  • SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

    SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出)

    這篇文章主要介紹了SpringBoot快速集成jxls-poi(自定義模板,支持本地文件導出,在線文件導出),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • SpringBoot中的配置文件加載優(yōu)先級詳解

    SpringBoot中的配置文件加載優(yōu)先級詳解

    這篇文章主要介紹了SpringBoot中的配置文件加載優(yōu)先級詳解,springboot啟動會掃描以下位置的application.properties或者application.yml文件作為Spring?boot的默認配置文件,需要的朋友可以參考下
    2024-01-01
  • Intellij IDEA導入eclipse web項目的操作步驟詳解

    Intellij IDEA導入eclipse web項目的操作步驟詳解

    Eclipse當中的web項目都會有這兩個文件,但是idea當中應該是沒有的,所以導入會出現(xiàn)兼容問題,但是本篇文章會教大家如何導入,并且導入過后還能使用tomcat運行,需要的朋友可以參考下
    2023-08-08
  • springboot集成gzip和zip數(shù)據(jù)壓縮傳輸(適用大數(shù)據(jù)信息傳輸)

    springboot集成gzip和zip數(shù)據(jù)壓縮傳輸(適用大數(shù)據(jù)信息傳輸)

    ?在大數(shù)據(jù)量的傳輸中,壓縮數(shù)據(jù)后進行傳輸可以一定程度的解決速度問題,本文主要介紹了springboot集成gzip和zip數(shù)據(jù)壓縮傳輸,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot集成ip2region實現(xiàn)ip白名單的代碼示例

    SpringBoot集成ip2region實現(xiàn)ip白名單的代碼示例

    ip2region v2.0 - 是一個離線IP地址定位庫和IP定位數(shù)據(jù)管理框架,10微秒級別的查詢效率,提供了眾多主流編程語言的 xdb 數(shù)據(jù)生成和查詢客戶端實現(xiàn),本文介紹了SpringBoot集成ip2region實現(xiàn)ip白名單的代碼工程,需要的朋友可以參考下
    2024-08-08

最新評論