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

实体类

package cn.et.lesson03.dept;
// default package

import java.math.BigDecimal;
import java.util.List;

import cn.et.lesson03.emp.Emp;

/**
 * 一个部门中有多个员工(即一对多)
 * Dept中添加   list<Emp> 来体现
 * 
 */

public class Dept{

	// Fields
	private BigDecimal deptId;
	private String deptName;
	private String deptLoc;
	//多个员工 即多个Emp对象
	private List<Emp> emplist;
	
	
	public BigDecimal getDeptId() {
		return deptId;
	}
	public void setDeptId(BigDecimal deptId) {
		this.deptId = deptId;
	}
	public String getDeptName() {
		return deptName;
	}
	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}
	public String getDeptLoc() {
		return deptLoc;
	}
	public void setDeptLoc(String deptLoc) {
		this.deptLoc = deptLoc;
	}
	public List<Emp> getEmplist() {
		return emplist;
	}
	public void setEmplist(List<Emp> emplist) {
		this.emplist = emplist;
	}
	@Override
	public String toString() {
		return "Dept [deptId=" + deptId + ", deptName=" + deptName
				+ ", deptLoc=" + deptLoc + ", emplist=" + emplist + "]";
	}
}


接口:

package cn.et.lesson03.dept;


public interface DeptMapper {

	public Dept selectDept(String deptNo);
}

dept_mapper.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="cn.et.lesson03.dept.DeptMapper">
	
	<!--申明结果集映射  -->
	<resultMap type="cn.et.lesson03.dept.Dept" id="dept">
		<!-- column为数据库中的列名   property实体类中的字段名-->
		<result column="deptNo" property="deptId"/>
		<result column="dname" property="deptName"/>
		<result column="loc"  property="deptLoc"/>
		
		<!--collection 在xml配置文件中 体现的是多个  即(一对多)
			一对多结果集映射 有内存溢出的风险
			因此有  延迟加载 概念
			
			使用 fetchType="lazy" 需要cglib架包支持
			 fetchType="lazy" 延迟加载或者叫懒加载 即 当有需求时再去查询数据
			 					并不会在  一开始的时候就去加载数据
		-->
		<collection property="emplist" column="deptno" javaType="java.util.List"
					 select="cn.et.lesson03.dept.DeptMapper.selectEmp" fetchType="lazy">
		</collection>
	</resultMap>	
	
	<select id="selectDept" resultMap="dept">
	  select * from dept where deptNo = #{0}
	</select>
	
	<select id="selectEmp" resultType="cn.et.lesson03.emp.Emp">
		select empno as empId, ename as empName from emp where deptNo = #{0}
	</select>
</mapper>

Test

package cn.et.lesson03.dept;

import java.io.InputStream;

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();
		//通过动态代理创建一个实体类    通过接口会自动调用配置文件
		DeptMapper dm = sqlSession.getMapper(DeptMapper.class);
		
		Dept dept = dm.selectDept("10");
		System.out.println(dept);

	}
}



Run


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值