[java] view plain copy 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 + "]"; } }
[java] view plain copy 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 + "]"; } }
[java] view plain copy package cn.et.mybatis.lesson03.oneToMany; import java.util.List; public interface DeptMapper { public Dept queryDept(String deptno); public List<Emp> queryEmp(String deptno); }
[html] view plain copy <?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>
[java] view plain copy 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); }
[java] view plain copy 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); } } }