1.实际的开发中,对于每个实体类都应该有具体的增删改查方法,也就是DAO层, 因此对于查询部门信息并且将对应的所有的员工信息也查询出来的需求,就可以通过分步的方式完成查询。 2.先通过部门的id查询部门信息 3.再通过部门id作为员工的外键查询对应的部门信息.
代码如下:
Emp实体类
public class Emp { private int empno; private String ename; private String job; private String mge; private Double salary; private int dept; private Dept dept1; public Dept getDept1() { return dept1; } public void setDept1(Dept dept1) { this.dept1 = dept1; } @Override public String toString() { return "Emp{" + "empno=" + empno + ", ename='" + ename + '\'' + ", job='" + job + '\'' + ", mge='" + mge + '\'' + ", salary=" + salary + ", dept1=" + dept1 + '}'; } public Emp() { } public Emp(int empno, String ename, String job, String mge, Double salary, int dept) { this.empno = empno; this.ename = ename; this.job = job; this.mge = mge; this.salary = salary; this.dept = dept; } public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } public String getMge() { return mge; } public void setMge(String mge) { this.mge = mge; } public Double getSalary() { return salary; } public void setSalary(Double salary) { this.salary = salary; } public int getDept() { return dept; } public void setDept(int dept) { this.dept = dept; } }Dept实体类
public class Dept { private String deptid; private String dname; private String addres; private List<Emp> emps; public List<Emp> getEmps() { return emps; } public void setEmps(List<Emp> emps) { this.emps = emps; } @Override public String toString() { return "Dept{" + "deptid='" + deptid + '\'' + ", dname='" + dname + '\'' + ", addres='" + addres + '\'' + '}'; } public Dept() { } public Dept(String deptid, String dname, String addres) { this.deptid = deptid; this.dname = dname; this.addres = addres; } public String getDeptid() { return deptid; } public void setDeptid(String deptid) { this.deptid = deptid; } public String getDname() { return dname; } public void setDname(String dname) { this.dname = dname; } public String getAddres() { return addres; } public void setAddres(String addres) { this.addres = addres; } }接口
public interface EmpMapper { //查询Emp表中数据 public List<Emp> listempbyall(); //Emp表中的deptid查询部门表 public Dept getDeptByid(int id); }XML
<!-- Association 分布查询 --> <resultMap id="listempdept" type="edu.wang.pojo.Emp"> <id column="empno" property="empno"/> <result column="ename" property="ename"/> <result column="salary" property="salary"/> <!-- POJO中的属性可能会是一个对象,我们可以使用联合查询,--> <!-- 并以级联属性的方式封装对象.使用association标签定义对象的封装规则,fetchType是否懒加载--> <association column="dept" property="dept1" select="mapper.EmpMapper.listempbyid" fetchType="eager"> <result column="dname" property="dname"/> <result column="addres" property="addres"/> </association> </resultMap> <!-- 进入方法--> <select id="listempbyall" resultMap="listempdept"> select e.empno,e.ename,e.salary,e.dept from empinfo e </select> <select id="listempbyid" resultType="edu.wang.pojo.Dept"> select deptid,dname,addres from depts where deptid = #{dept} </select> POJO中的属性可能会是一个对象,我们可以使用联合查询, 并以级联属性的方式封装对象.使用association标签定义对象的封装规则,fetchType是否懒加载。测试
@Test public void test1(){ EmpMapper mapper = session.getMapper(EmpMapper.class); List<Emp> emps = mapper.listempbyall(); for(int i = 0;i<emps.size();i++){ Emp emp = emps.get(i); System.out.println(emp); } }测试结果打印(未开启懒加载)
未开启懒加载fetchType=“eager”,查询第一条就全部查询出来.开启懒加载后控制台打印
开启懒加载后 fetchType=“lazy”
每查询一次便打印出信息,可以简单理解为按需查询,传入部门id查询出该id下的所有部门信息。