victory的博客

长安一片月,万户捣衣声

0%

MyBatis | 一对多自定义映射、分步查询和延迟加载

一对多自定义映射、分步查询和延迟加载

1.项目目录

2.Dept.java
在”一”方添加List<多>

package com.atguigu.bean;

import java.util.List;

public class Dept {
    private Integer did;
    private String dname;
    private List<Emp> emps;
    
    public List<Emp> getEmps() {
        return emps;
    }
    public void setEmps(List<Emp> emps) {
        this.emps = emps;
    }
    public Integer getDid() {
        return did;
    }
    public void setDid(Integer did) {
        this.did = did;
    }
    public String getDname() {
        return dname;
    }
    public void setDname(String dname) {
        this.dname = dname;
    }
    @Override
    public String toString() {
        return "Dept [did=" + did + ", dname=" + dname + ", emps=" + emps + "]";
    }
}

3.EmpDeptMapper.java

package com.atguigu.mapper;

import java.util.List;

import com.atguigu.bean.Dept;
import com.atguigu.bean.Emp;

public interface EmpDeptMapper {
    List<Emp> getAllEmp();
    
    Emp getEmpStep(String eid);
    
    Dept getDeptEmpsByDid(String did);
    
    Dept getOnlyDeptByDid(String did);//测试一对多
    
    List<Emp> getEmpListByDid(String did);//测试一对多
}

4.EmpDeptMapper.xml
在映射文件中做以下配置:

<resultMap type="Dept" id="deptMapStep">
    <id column="did" property="did" />
    <result column="dname" property="dname" />
    <!-- <collection property="emps" select="com.atguigu.mapper.EmpDeptMapper.getEmpListByDid" column="did"></collection> -->
    <!-- 
        fetchType:
            lazy 延迟加载
            eager 不进行延迟加载
     -->
    <collection property="emps" select="com.atguigu.mapper.EmpDeptMapper.getEmpListByDid" column="{did=did}" fetchType="lazy"></collection>
</resultMap>

<!-- Dept getOnlyDeptByDid(String did); -->
<select id="getOnlyDeptByDid" resultMap="deptMapStep">
    select did,dname from dept where did=#{did}
</select>

<!-- List<Emp> getEmpListByDid(String did); -->
<select id="getEmpListByDid" resultType="Emp">
    select eid,ename,age,sex from emp where did = #{did}
</select>

5.TestEmpDept.java

package com.atguigu.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.atguigu.bean.Dept;
import com.atguigu.bean.Emp;
import com.atguigu.mapper.EmpDeptMapper;

public class TestEmpDept {
    public static void main(String[] args) throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        EmpDeptMapper mapper = sqlSession.getMapper(EmpDeptMapper.class);
        
//        List<Emp> empList = mapper.getAllEmp();
//        System.out.println(empList);
        
//        Emp emp = mapper.getEmpStep("3");
//        System.out.println(emp.getEname());
//        System.out.println(emp.getDept());
        
//        Dept dept = mapper.getDeptEmpsByDid("2");
//        System.out.println(dept);
        
        Dept dept = mapper.getOnlyDeptByDid("3");
        //System.out.println(dept);
        System.out.println(dept.getDname());
        System.out.println(dept.getEmps());
    }
}