上次留了一个题目.不知道小伙伴们思路怎么样?我先将代码贴出来
涉及的实体类:
员工类
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.
好了.上面就是高级映射的一对一这种情况.希望对大家有所帮助.
本文详细介绍了在MyBatis框架中实现一对一关系映射的方法,通过具体代码示例展示了如何配置实体类和映射文件,以实现员工与部门间的一对一关联。
1170

被折叠的 条评论
为什么被折叠?



