Mybaities一对多注解和xml的实现

本文介绍了一个部门对应多个员工的一对多关系映射实现方式,通过MyBatis框架进行具体操作,包括实体类定义、Mapper接口及XML配置文件的详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Dept实体类:

package cn.et.mybatis.lesson03.oneToMany;

import java.util.List;

// default package


/**
 * Dept entity. @author MyEclipse Persistence Tools
 */

public class Dept{

	// Fields

	private String deptno;
	private String dname;
	private String loc;
	private List<Emp> empList;
	public String getDeptno() {
		return deptno;
	}
	public void setDeptno(String deptno) {
		this.deptno = deptno;
	}
	public String getDname() {
		return dname;
	}
	public void setDname(String dname) {
		this.dname = dname;
	}
	public String getLoc() {
		return loc;
	}
	public void setLoc(String loc) {
		this.loc = loc;
	}
	public List<Emp> getEmpList() {
		return empList;
	}
	public void setEmpList(List<Emp> empList) {
		this.empList = empList;
	}
	@Override
	public String toString() {
		return "Dept [deptno=" + deptno + ", dname=" + dname + ", empList="
				+ empList + ", loc=" + loc + "]";
	}
	
	

	
}


Emp实体类:

package cn.et.mybatis.lesson03.oneToMany;


/**
 * 举例:
 * 		一个部门——多个员工
 * 员工表和部门表的关系是多对一关系
 * 
 * Emp中添加Dept对象
 * @author Administrator
 *
 */
public class Emp {

	private String empNo;
	
	private String ename;

	private String sal;

	private Dept dept;
	
	
	public Dept getDept() {
		return dept;
	}

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

	public String getEmpNo() {
		return empNo;
	}

	public void setEmpNo(String empNo) {
		this.empNo = empNo;
	}

	public String getEname() {
		return ename;
	}

	public void setEname(String ename) {
		this.ename = ename;
	}

	public String getSal() {
		return sal;
	}

	public void setSal(String sal) {
		this.sal = sal;
	}

	@Override
	public String toString() {
		return "Emp [dept=" + dept + ", empNo=" + empNo + ", ename=" + ename
				+ ", sal=" + sal + "]";
	}

	
}


DeptMapper:
xml的

package cn.et.mybatis.lesson03.oneToMany;

import java.util.List;


public interface DeptMapper {
	
	public Dept queryDept(String deptno); 
	
	public List<Emp> queryEmp(String deptno);
	
	
}


one_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">
  
<!-- 
	一对多xml
 -->
<mapper namespace="cn.et.mybatis.lesson03.oneToMany.DeptMapper">
	
	<!-- 
		一对多可能会出现内存溢出的风险
		设置属性fetchType="lazy"
		fetchType="lazy"  需要加载cglib架包
		这样一样只有能到第二种sql语句的时候才去加载,不用就不加载
	 -->
	<resultMap type="cn.et.mybatis.lesson03.oneToMany.Dept" id="myDept">
		<collection column="deptno" javaType="java.util.List" property="empList" 
		select="cn.et.mybatis.lesson03.oneToMany.DeptMapper.queryEmp"
		fetchType="lazy"
		></collection>
	</resultMap>
	
	<select id="queryDept" resultMap="myDept">
		select * from dept where deptno=#{0}
	</select>
	
	
	<select id="queryEmp" resultType="cn.et.mybatis.lesson03.oneToMany.Emp">
		select * from emp where deptno=#{0}
	</select>
	
</mapper>


DeptAnnoMapper:
注解的

package cn.et.mybatis.lesson03.oneToMany;

import java.util.List;

import org.apache.ibatis.annotations.Many;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.mapping.FetchType;


public interface DeptAnnoMapper {
	
	
	@Results(
			{
				@Result(column="deptno",property="empList",javaType=java.util.List.class,
					many=@Many(select="cn.et.mybatis.lesson03.oneToMany.DeptAnnoMapper.queryEmpAnno",fetchType=FetchType.LAZY)	
				)
			}
	)
	@Select("select * from dept where deptno=#{0}")
	public Dept queryDeptAnno(String deptno); 
	
	@Select("select * from emp where deptno=#{0}")
	public List<Emp> queryEmpAnno(String deptno);
}


测试类:

package cn.et.mybatis.lesson03.oneToMany;

/**
 * 多对一
 */
import java.io.InputStream;
import java.util.List;

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

public class TestMybatis {
	
	public static SqlSession getSession(){
		String resource = "/cn/et/mybatis/lesson03/mybatis.xml";
		InputStream inputStream = TestMybatis.class.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		//打开会话
		SqlSession session = sqlSessionFactory.openSession();
		return session;
	}

	/*public static void main(String[] args) {
		SqlSession session = getSession();
		DeptMapper dept = session.getMapper(DeptMapper.class);
		
		Dept result = dept.queryDept("20");
		System.out.println(result);
	}*/
	
	
	public static void main(String[] args) {
	SqlSession session = getSession();
	DeptAnnoMapper dept = session.getMapper(DeptAnnoMapper.class);
	Dept result = dept.queryDeptAnno("20");

		List list = result.getEmpList();
		for (Object object : list) {
			System.out.println(object);
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值