MyBatis对象关系映射--- 多对一

实体类:

package cn.et.lesson03.emp;

import cn.et.lesson03.dept.Dept;

public class Emp {
	/**
	 * 对象关系映射
	 * 举例:一个部门中有过个员工
	 * 那么查询唯一的一个员工时,部门信息是确定的
	 * (即多对一的关系)
	 * Emp中添加Dept来体现
	 */
	private String empId;
	
	private String empName;
	//部门对象
	private Dept dept;

	public String getEmpId() {
		return empId;
	}

	public void setEmpId(String empId) {
		this.empId = empId;
	}

	public String getEmpName() {
		return empName;
	}

	public void setEmpName(String empName) {
		this.empName = empName;
	}

	public Dept getDept() {
		return dept;
	}

	public void setDept(Dept dept) {
		this.dept = dept;
	}

	@Override
	public String toString() {
		return "Emp [empId=" + empId + ", empName=" + empName + ", dept="
				+ dept + "]";
	}
}

接口:

package cn.et.lesson03.emp;

import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;

import cn.et.lesson03.dept.Dept;

public interface EmpMapper {
	/**
	 * 将列名和字段名 建立关系
	 * property指向 java中的实体类字段   区分大小写
	 * column指向 数据库中的 列名不分区大小写
	 * @param empNo
	 * @return
	 * 
 *    <!-- emp中多对一使用xml演示 -->
	  <resultMap type="cn.et.mybatis.lesson03.result.anno.Emp" id="myEmp">
	  	<result column="empNo" property="empId"/>
	  	<association property="dept" select="selectMyDept" column="deptno" javaType="cn.et.mybatis.lesson03.result.xml.Dept">
	  	</association>
	  </resultMap>
	 * 
	 * 
	 */
	@Results({
		@Result(column="empno",property="empId"),
		@Result(column="ename",property="empName"),
		/*noe是Mybatis中 多对一 的关键字
		 * @One指向  一 的查询语句
		 * 这里的column 是将selectEmpByEmpNo查询出来的deptno传入到selectDeptByDeptNO
		 * javaType 申明 one=@One查询出来的 结果类型
		 * property="dept" 将结果 存入dept
		*/
		@Result(column="deptno",property="dept", javaType=Dept.class, one=@One(select="cn.et.lesson03.emp.EmpMapper.selectDeptByDeptNO"))
		
	})
	@Select("select empno,ename,deptno from emp where empno=#{0}")
	public Emp selectEmpByEmpNo(String empNo);
	
	
	@Results({
		@Result(column="deptNo",property="deptId"),
		@Result(column="dname",property="deptName"),
		@Result(column="loc" , property="deptLoc"),
	})
	@Select("select * from dept where deptno=#{0}")
	public Dept selectDeptByDeptNO(String deptNo);
}


Test

package cn.et.lesson03.emp;

import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class TestMybatis {
	
	private static SqlSession getSession() {
		//因为需要的mybatis.xml文件 不在同一层目录  所以这里才使用 cn.et.lesson01.TestMybatis
		InputStream is = TestMybatis.class.getResourceAsStream("/cn/et/lesson03/mybatis.xml");
		
		SqlSessionFactory session = new SqlSessionFactoryBuilder().build(is);
		//openSession()获取操作数据库的类 SqlSession
		SqlSession sqlSession = session.openSession();
		return sqlSession;
	}

	
	public static void main(String[] args) {
		
		SqlSession sqlSession = getSession();
		//通过动态代理创建一个实体类    通过接口会自动调用配置文件
		EmpMapper dm = sqlSession.getMapper(EmpMapper.class);
		Emp emp = dm.selectEmpByEmpNo("7900");
		System.out.println(emp);

	}
}


Run


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值