Dept实体类:
package cn.et.mybatis.lesson03.oneToMany;
import java.util.List;
// default package
/**
* Dept entity. @author MyEclipse Persistence Tools
*/
public class Dept{
// Fields
private String deptno;
private String dname;
private String loc;
private List<Emp> empList;
public String getDeptno() {
return deptno;
}
public void setDeptno(String deptno) {
this.deptno = deptno;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
public List<Emp> getEmpList() {
return empList;
}
public void setEmpList(List<Emp> empList) {
this.empList = empList;
}
@Override
public String toString() {
return "Dept [deptno=" + deptno + ", dname=" + dname + ", empList="
+ empList + ", loc=" + loc + "]";
}
}
Emp实体类:
package cn.et.mybatis.lesson03.oneToMany;
/**
* 举例:
* 一个部门——多个员工
* 员工表和部门表的关系是多对一关系
*
* Emp中添加Dept对象
* @author Administrator
*
*/
public class Emp {
private String empNo;
private String ename;
private String sal;
private Dept dept;
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
public String getEmpNo() {
return empNo;
}
public void setEmpNo(String empNo) {
this.empNo = empNo;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public String getSal() {
return sal;
}
public void setSal(String sal) {
this.sal = sal;
}
@Override
public String toString() {
return "Emp [dept=" + dept + ", empNo=" + empNo + ", ename=" + ename
+ ", sal=" + sal + "]";
}
}
DeptMapper:
xml的
package cn.et.mybatis.lesson03.oneToMany;
import java.util.List;
public interface DeptMapper {
public Dept queryDept(String deptno);
public List<Emp> queryEmp(String deptno);
}
one_mapper.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">
<!--
一对多xml
-->
<mapper namespace="cn.et.mybatis.lesson03.oneToMany.DeptMapper">
<!--
一对多可能会出现内存溢出的风险
设置属性fetchType="lazy"
fetchType="lazy" 需要加载cglib架包
这样一样只有能到第二种sql语句的时候才去加载,不用就不加载
-->
<resultMap type="cn.et.mybatis.lesson03.oneToMany.Dept" id="myDept">
<collection column="deptno" javaType="java.util.List" property="empList"
select="cn.et.mybatis.lesson03.oneToMany.DeptMapper.queryEmp"
fetchType="lazy"
></collection>
</resultMap>
<select id="queryDept" resultMap="myDept">
select * from dept where deptno=#{0}
</select>
<select id="queryEmp" resultType="cn.et.mybatis.lesson03.oneToMany.Emp">
select * from emp where deptno=#{0}
</select>
</mapper>
DeptAnnoMapper:
注解的
package cn.et.mybatis.lesson03.oneToMany;
import java.util.List;
import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;
public interface DeptAnnoMapper {
@Results(
{
@Result(column="deptno",property="empList",javaType=java.util.List.class,
many=@Many(select="cn.et.mybatis.lesson03.oneToMany.DeptAnnoMapper.queryEmpAnno",fetchType=FetchType.LAZY)
)
}
)
@Select("select * from dept where deptno=#{0}")
public Dept queryDeptAnno(String deptno);
@Select("select * from emp where deptno=#{0}")
public List<Emp> queryEmpAnno(String deptno);
}
测试类:
package cn.et.mybatis.lesson03.oneToMany;
/**
* 多对一
*/
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class TestMybatis {
public static SqlSession getSession(){
String resource = "/cn/et/mybatis/lesson03/mybatis.xml";
InputStream inputStream = TestMybatis.class.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//打开会话
SqlSession session = sqlSessionFactory.openSession();
return session;
}
/*public static void main(String[] args) {
SqlSession session = getSession();
DeptMapper dept = session.getMapper(DeptMapper.class);
Dept result = dept.queryDept("20");
System.out.println(result);
}*/
public static void main(String[] args) {
SqlSession session = getSession();
DeptAnnoMapper dept = session.getMapper(DeptAnnoMapper.class);
Dept result = dept.queryDeptAnno("20");
List list = result.getEmpList();
for (Object object : list) {
System.out.println(object);
}
}
}