上次留了一个题目.不知道小伙伴们思路怎么样?我先将代码贴出来
涉及的实体类:
员工类
package pojo; import java.math.BigDecimal; import java.sql.Date; public class Emp { private int empno; private String ename; private String job; private int mgr; private Date hiredate; private BigDecimal sal; private BigDecimal comm; private int deptno; private 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 int getMgr() { return mgr; } public void setMgr(int mgr) { this.mgr = mgr; } public Date getHiredate() { return hiredate; } public void setHiredate(Date hiredate) { this.hiredate = hiredate; } public BigDecimal getSal() { return sal; } public void setSal(BigDecimal sal) { this.sal = sal; } public BigDecimal getComm() { return comm; } public void setComm(BigDecimal comm) { this.comm = comm; } public int getDeptno() { return deptno; } public void setDeptno(int deptno) { this.deptno = deptno; } public Dept getDept() { return dept; } public void setDept(Dept dept) { this.dept = dept; } @Override public String toString() { return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", mgr=" + mgr + ", hiredate=" + hiredate + ", sal=" + sal + ", comm=" + comm + ", deptno=" + deptno + ", dept=" + dept + "]"; } }EmpMapper
package mapper; import java.util.List; import pojo.Emp; public interface EmpMapper { List<Emp> findEmpAndDept(); }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="mapper.EmpMapper"> <resultMap type="emp" id="empMap"> <id property="empno" column="empno"/> <result column="ename" property="ename"/> <result column="job" property="job"/> <result column="mgr" property="mgr"/> <result column="hiredate" property="hiredate"/> <result column="sal" property="sal"/> <result column="comm" property="comm"/> <result column="deptno" property="deptno"/> <!-- 将结果封装到一个对象对象中 --> <association property="dept" column="deptno" javaType="dept"> <id property="deptno" column="deptno"/> <result column="dname" property="dname"/> <result column="loc" property="loc"/> </association> </resultMap> <select id="findEmpAndDept" resultMap="empMap"> select * from emp left join dept on dept.deptno = emp.deptno </select> </mapper>这里注意一下,上次一对都的情况,我们的emps是一个集合所以resultMap的子标签我们用的collection.但是这个一对一的例子中,一个员工对应一个部门,dept这个成员属性中只封装一个对象,所以这里我们医用association这个字标签,这是唯一的大不同.其他的都和上次的配置文件类似.大家在写配置文件的时候,一定要注意配置文件命名空间的对应是否正确.
下面是测试代码,再给大家发一下吧,其实和上次的很相似了
public class Test { public static void main(String[] args) throws IOException { Reader reader = Resources.getResourceAsReader("mybatis.xml"); SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader); SqlSession session = ssf.openSession(true); EmpMapper mapper = session.getMapper(EmpMapper.class); System.out.println(mapper.findEmpAndDept()); session.close(); } }运行结果如下:
DEBUG [main] - Opening JDBC Connection DEBUG [main] - Created connection 503195940. DEBUG [main] - ==> Preparing: select * from emp left join dept on dept.deptno = emp.deptno DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 14 [Emp [empno=7782, ename=CLARK, job=MANAGER, mgr=7839, hiredate=1981-06-09, sal=2450.00, comm=null, deptno=10, dept=Dept [deptno=10, dname=ACCOUNTING, loc=NEW YORK, emps=null]], Emp [empno=7839, ename=KING, job=PRESIDENT, mgr=0, hiredate=1981-11-17, sal=5000.00, comm=null, deptno=10, dept=Dept [deptno=10, dname=ACCOUNTING, loc=NEW YORK, emps=null]], Emp [empno=7934, ename=MILLER, job=CLERK, mgr=7782, hiredate=1982-01-23, sal=1300.00, comm=null, deptno=10, dept=Dept [deptno=10, dname=ACCOUNTING, loc=NEW YORK, emps=null]], Emp [empno=7369, ename=SMITH, job=CLERK, mgr=7902, hiredate=1980-12-17, sal=800.00, comm=null, deptno=20, dept=Dept [deptno=20, dname=RESEARCH, loc=DALLAS, emps=null]], Emp [empno=7566, ename=JONES, job=MANAGER, mgr=7839, hiredate=1981-04-02, sal=2975.00, comm=null, deptno=20, dept=Dept [deptno=20, dname=RESEARCH, loc=DALLAS, emps=null]], Emp [empno=7788, ename=SCOTT, job=ANALYST, mgr=7566, hiredate=1987-04-19, sal=3000.00, comm=null, deptno=20, dept=Dept [deptno=20, dname=RESEARCH, loc=DALLAS, emps=null]], Emp [empno=7876, ename=ADAMS, job=CLERK, mgr=7788, hiredate=1987-05-23, sal=1100.00, comm=null, deptno=20, dept=Dept [deptno=20, dname=RESEARCH, loc=DALLAS, emps=null]], Emp [empno=7902, ename=FORD, job=ANALYST, mgr=7566, hiredate=1981-12-03, sal=3000.00, comm=null, deptno=20, dept=Dept [deptno=20, dname=RESEARCH, loc=DALLAS, emps=null]], Emp [empno=7499, ename=ALLEN, job=SALESMAN, mgr=7698, hiredate=1981-02-20, sal=1600.00, comm=300.00, deptno=30, dept=Dept [deptno=30, dname=SALES, loc=CHICAGO, emps=null]], Emp [empno=7521, ename=WARD, job=SALESMAN, mgr=7698, hiredate=1981-02-22, sal=1250.00, comm=500.00, deptno=30, dept=Dept [deptno=30, dname=SALES, loc=CHICAGO, emps=null]], Emp [empno=7654, ename=MARTIN, job=SALESMAN, mgr=7698, hiredate=1981-09-28, sal=1250.00, comm=1400.00, deptno=30, dept=Dept [deptno=30, dname=SALES, loc=CHICAGO, emps=null]], Emp [empno=7698, ename=BLAKE, job=MANAGER, mgr=7839, hiredate=1981-05-01, sal=2850.00, comm=null, deptno=30, dept=Dept [deptno=30, dname=SALES, loc=CHICAGO, emps=null]], Emp [empno=7844, ename=TURNER, job=SALESMAN, mgr=7698, hiredate=1981-09-08, sal=1500.00, comm=0.00, deptno=30, dept=Dept [deptno=30, dname=SALES, loc=CHICAGO, emps=null]], Emp [empno=7900, ename=JAMES, job=CLERK, mgr=7698, hiredate=1981-12-03, sal=950.00, comm=null, deptno=30, dept=Dept [deptno=30, dname=SALES, loc=CHICAGO, emps=null]]] DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@1dfe2924] DEBUG [main] - Returned connection 503195940 to pool.好了.上面就是高级映射的一对一这种情况.希望对大家有所帮助.
