一对多自定义映射、分步查询和延迟加载
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());
}
}