经典三层框架初识--一.Mybatis(下补充)高级映射一对一答案

本文详细介绍了在MyBatis框架中实现一对一关系映射的方法,通过具体代码示例展示了如何配置实体类和映射文件,以实现员工与部门间的一对一关联。

上次留了一个题目.不知道小伙伴们思路怎么样?我先将代码贴出来

涉及的实体类:

员工类

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.

好了.上面就是高级映射的一对一这种情况.希望对大家有所帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值