原生一对多查询
2020-11-18 本文已影响0人
_FireFly_
查询一个emp员工的所有信息 包括员工所在部门信息 (这是一对一,一个员工只对应一个部门)
实体Emp
package domain;
public class Emp {
//自有属性
private Integer empno;
private String ename;
private Float sal;
//关联属性 deptno-->外键-->对象
private Dept dept;
public Emp() {}
public Emp(Integer empno, String ename, Float sal, Dept dept) {
this.empno = empno;
this.ename = ename;
this.sal = sal;
this.dept = dept;
}
@Override
public String toString() {
return "Emp{" +
"empno=" + empno +
", ename='" + ename + '\'' +
", sal=" + sal +
", dept=" + dept +
'}';
}
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public Float getSal() {
return sal;
}
public void setSal(Float sal) {
this.sal = sal;
}
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
}
实体Dept
package domain;
import java.util.List;
public class Dept {
//自有属性
private Integer deptno;
private String dname;
private String loc;
//为了根据deptno部门编号查询 部门中所有的人更加方便
//也存储一个关联属性 一个部门中有好多员工 List<Emp>
private List<Emp> empList;
public Dept() {}
public Dept(Integer deptno, String dname, String loc, List<Emp> empList) {
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
this.empList = empList;
}
@Override
public String toString() {
return "Dept{" +
"deptno=" + deptno +
", dname='" + dname + '\'' +
", loc='" + loc + '\'' +
", empList=" + empList +
'}';
}
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer 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;
}
}
EmpDao
package dao;
import domain.Emp;
import org.apache.ibatis.session.SqlSession;
import util.MyUtil;
import java.util.List;
public class EmpDao {
//一个sqlSession对象
private SqlSession sqlSession = MyUtil.getSqlSession(true);
//设计一个方法 提供一个empno员工编号 查询员工的信息+部门信息
public Emp selectOne(Integer empno){
return sqlSession.selectOne("selectOne",empno);
}
//设计一个方法 提供一个查询所有员工信息+部门信息
public List<Emp> selectAll(){
return sqlSession.selectList("selectAll");
}
}
EmpMapper.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">
<mapper namespace="dao.EmpDao">
<!--自定义规则 方式一 两条语句查询-->
<!--<resultMap id="selectEmp" type="domain.Emp">-->
<!--<id property="empno" column="empno"></id>-->
<!--<result property="ename" column="ename"></result>-->
<!--<result property="sal" column="sal"></result>-->
<!--<association property="dept" javaType="domain.Dept" select="selectDeptForEmp" column="deptno"></association>-->
<!--</resultMap>-->
<!--<select id="selectDeptForEmp" resultType="domain.Dept">-->
<!--select deptno,dname,loc from dept where deptno = #{deptno}-->
<!--</select>-->
<!--自定义规则 方式二 一条语句查询 联合-->
<resultMap id="selectEmp" type="domain.Emp">
<id property="empno" column="empno"></id>
<result property="ename" column="ename"></result>
<result property="sal" column="sal"></result>
<association property="dept" javaType="domain.Dept">
<id property="deptno" column="deptno"></id>
<result property="dname" column="dname"></result>
<result property="loc" column="loc"></result>
</association>
</resultMap>
<!--=======================================================-->
<select id="selectOne" resultMap="selectEmp">
<!--方式一-->
-- select empno,ename,sal,deptno from emp where empno = #{empno}
<!--方式二-->
select e.empno,e.ename,e.sal,d.deptno,d.dname,d.loc from emp e left outer join dept d on e.deptno = d.deptno where e.empno = #{empno}
</select>
<select id="selectAll" resultMap="selectEmp">
<!--方式一-->
-- select empno,ename,sal,deptno from emp
<!--方式二-->
select e.empno,e.ename,e.sal,d.deptno,d.dname,d.loc from emp e left outer join dept d on e.deptno = d.deptno
</select>
</mapper>