关联.多对一关联查询
package org.mybatis.example.dao;

import java.util.Date;
//雇员类
public class Emp {
	private Integer empno;
	private String ename;
	private String job;
	private Integer mgr;
	private Date hiredate;
	private Integer sal;
	private Integer comm;
	private Dept dept;
	public Emp() {
		// TODO Auto-generated constructor stub
	}
	public Integer getEmpno() {
		return empno;
	}
	public void setEmpno(Integer 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 Integer getMgr() {
		return mgr;
	}
	public void setMgr(Integer mgr) {
		this.mgr = mgr;
	}
	public Date getHiredate() {
		return hiredate;
	}
	public void setHiredate(Date hiredate) {
		this.hiredate = hiredate;
	}
	public Integer getSal() {
		return sal;
	}
	public void setSal(Integer sal) {
		this.sal = sal;
	}
	public Integer getComm() {
		return comm;
	}
	public void setComm(Integer comm) {
		this.comm = comm;
	}
	public Dept getDept() {
		return dept;
	}
	public void setDept(Dept dept) {
		this.dept = dept;
	}

}

//EmpMapper.java接口

package org.mybatis.example.dao;
import java.util.List;

public interface EmpMapper {
	public List<Emp>selectManytoOne();
}

关联关系,体现的是两个类之间的一种强依赖关系。比如在员工类中,有一个属性是部门类的对象;先看第一种 嵌套查询:

通过执行另外一个SQL映射语句来返回语气的复杂类型。

//整体mybatis配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
			<property name="url" value="${url}"/>
			<property name="username" value="${username}"/>
			<property name="password" value="${password}"/>
            </dataSource>
        </environment>
        </environments>
    <mappers>
        <mapper resource="org/mybatis/example/dao/DeptMapper.xml"/>
        <mapper resource="org/mybatis/example/dao/EmpMapper.xml"/>
    </mappers>
</configuration>

//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="org.mybatis.example.dao.EmpMapper">
	<resultMap type="org.mybatis.example.dao.Emp" id="getEmpresultMap">
		<id column="empno" property="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"/>
		<association property="dept" column="deptno"
			javaType="org.mybatis.example.dao.Dept">
			<id column="deptno" property="deptno"/>
			<result column="dname" property="dname"/>
			<result column="loc" property="loc"/>
		</association>
	</resultMap>
	<select id="selectManytoOne" resultMap="getEmpresultMap">
		select
		e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,
		e.deptno,d.dname,d.loc
		from emp e left join dept d on e.deptno=d.deptno
	</select>
</mapper>

//测试类

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.mybatis.example.dao.Emp;
import org.mybatis.example.dao.EmpMapper;
import org.mybatis.example.dao.SqlSessionFactoryUtil;

public class Test21 {
	public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.getSqlSession();
		EmpMapper empmapper=session.getMapper(EmpMapper.class);
		List<Emp>empList=empmapper.selectManytoOne();
		for(Emp emp:empList){
			System.out.println(emp.getEname()+"的部门是:"+emp.getDept().getDname());
		}
	}
}

2.嵌套结果查询:使用嵌套结果映射来处理重复的联合结果的子集。

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="org.mybatis.example.dao.EmpMapper">
	<resultMap id="empResult" type="org.mybatis.example.dao.Emp">
		<association property="dept" column="deptno"
			javaType="org.mybatis.example.dao.Dept" select="selectDept"/>
	</resultMap>
	<select id="selectEmp" parameterType="int" resultMap="empResult">
		select * from emp where empno=#{id}
	</select>
	<select id="selectDept" parameterType="int"
		resultType="org.mybatis.example.dao.Dept">
		select * from dept where deptno=#{id}
	</select>
	<select id="selectManytoOne" resultMap="getEmpresultMap">
        select
        e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,
        e.deptno,d.dname,d.loc
        from emp e left join dept d on e.deptno=d.deptno
    </select>
</mapper>

EmpMapper.java接口

增加方法:public List<Emp>selectEmp(int id);

测试类

public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.getSqlSession();
		EmpMapper empmapper=session.getMapper(EmpMapper.class);
		List<Emp>empList=empmapper.selectEmp(2);
		System.out.println(empList.size());
		for(Emp emp:empList){
			System.out.println(emp.getEname()+"的部门是:"+emp.getDept().getDname());
		}
	}

但是这种方法,在查询的时候只能孤立的查询某个员工id比较复杂,可以使用如下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="org.mybatis.example.dao.EmpMapper">
	<resultMap type="org.mybatis.example.dao.Emp" id="getEmpresultMap">
		<id column="empno" property="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"/>
		<association property="dept" column="deptno"
			javaType="org.mybatis.example.dao.Dept" resultMap="deptresultmap">
		</association>
	</resultMap>
	<resultMap type="org.mybatis.example.dao.Dept" id="deptresultmap">	
	<id column="deptno" property="deptno"/>
	<result column="dname" property="dname"/>
	<result column="loc" property="loc"/>
	</result>
	<select id="selectManytoOne" resultMap="getEmpresultMap">
		select
		e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,
		e.deptno,d.dname,d.loc
		from emp e left join dept d on e.deptno=d.deptno
	</select>
</mapper>

//一对多关联集合查询

重写下Dept类

增加多的一方的集合属性,private List<Emp>emps;并且添加相应的getter/setter方法;

重新配置DeptMapper.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="org.mybatis.example.dao.DeptMapper">
	<resultMap type="org.mybatis.example.dao.Dept" id="deptresultMap">
		<id column="deptno" property="deptno"/>
		<result column="dname" property="dname"/>
		<result column="loc" property="loc"/>
		<collection property="emps" ofType="org.mybatis.example.dao.Emp"
			resultMap="empresultmap">
		</collection>
	</resultMap>
	<resultMap type="org.mybatis.example.dao.Emp" id="empresultmap">
			<id column="empno" property="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"/>
	</resultMap>
	<select id="selectOnetoMany" resultMap="deptresultMap">
		select
        e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,
        e.deptno,d.dname,d.loc
        from emp e left join dept d on e.deptno=d.deptno
	</select>
</mapper>

测试类代码

public static void main(String[] args) {
		SqlSession session=SqlSessionFactoryUtil.getSqlSession();
		DeptMapper deptmapper=session.getMapper(DeptMapper.class);
		List<Dept>deptList=deptmapper.selectOnetoMany();
		for(Dept dept:deptList){
			System.out.println("部门名称:"+dept.getDname());
			System.out.println("所属员工的个数:"+dept.getEmps().size());
		}
	}

MyBatis.4关联的更多相关文章

  1. MyBatis实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  2. Mybatis之关联查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  3. MyBatis——实现关联表查询

    原文:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创 ...

  4. mybatis 一对一关联 association 返回空值

    mybatis 一对一关联 association 返回空值 最近学习spring mvc + mybatis开发,看的书是<Spring MVC+Mybatis开发 从入门到精通>,在学 ...

  5. SpringBoot+Mybatis实现关联查询

    SpringBoot+Mybatis实现关联查询 今天学习了下Mybatis的动态查询,然后接着上次的Demo改造了下实现表的关联查询. 话不多说,开始今天的小Demo 首先接着上次的项目 https ...

  6. Java基础-SSM之mybatis一对一关联

    Java基础-SSM之mybatis一对一关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建husbands和wifes表并建 ...

  7. Mybatis系列(三):Mybatis实现关联表查询

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 ...

  8. Mybatis表关联多对一

    在上章的 一对多 中,我们已经学习如何在 Mybatis 中关联多表,但在实际项目中也是经常使用 多对一 的情况,这些查询是如何处理的呢,在这一节中我们来学习它.多表映射的多对一关系要用到 mybit ...

  9. Mybatis之关联查询及动态SQL

    前言 实际开发项目中,很少是针对单表操作,基本都会联查多表进行操作,尤其是出一些报表的内容.此时,就可以使用Mybatis的关联查询还有动态SQL.前几篇文章已经介绍过了怎么调用及相关内容,因此这里只 ...

  10. MyBatis—实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

随机推荐

  1. Streamr助你掌控自己的数据(2)——三种整合数据至Streamr的典型场景

    博客说明 所有刊发内容均可转载但是需要注明出处. 三种整合数据至Streamr的典型场景 本系列文档主要介绍怎么通过Streamr管理自己的DATA,整个系列包括三篇教程文档,分别是:教你5分钟上传数 ...

  2. 占位符golang

    定义示例类型和变量 type Human struct { Name string } var people = Human{Name:"zhangsan"} 普通占位符 占位符 ...

  3. 深入理解Java类加载器(ClassLoader) (转)

    转自: http://blog.csdn.net/javazejian/article/details/73413292 关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Ja ...

  4. Shell 字符串处理、获取文件名和后缀名

    http://blog.csdn.net/guojin08/article/details/38704823

  5. PHP中的文件包含

    在PHP中,包含文件有两种方式:include和require.这两种方式的功能一样,只有一个区别,就是使用require包含一个文件时,如果出现错误,脚本不会继续执行:而如果使用include包含, ...

  6. Daily Scrum (2015/11/4)

    因为距离部署的时间临近,而之前我们的进度偏慢.这天晚上我们大多数成员几乎所有时间都用在了这个项目上,成果还算令人满意. 成员 今日任务 时间 明日任务 符美潇 1.修复了一个BUG,此BUG会导致所爬 ...

  7. YQCB绩效表

    标准 队员 工作质量 20% 工作态度 20% 工作量 30% 工作难易程度 20% 团队意识 10% 总分 陈美琪 17 18 28 19 9 91 张晨阳 16 16 25 17 9 83 刘昭为 ...

  8. 《Spring1之第四次站立会议》

    <第四次站立会议> 昨天:我把小组成员找到的写关于登录界面的代码加到了我的项目工程里,并对它有了一定的了解,已经能够编译运行了,得到了登陆的界面: 今天:试着做了一下主框架里的在线人数的显 ...

  9. 1到N中“1”出现的次数

    题目:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数 思路:刚开始做的时候,是想从1到N进行遍历,其中每个数都出现1的个数加起来,最后得出结果,但是老师让我们找规 ...

  10. HDU 3853 LOOPS 期望dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3853 LOOPS Time Limit: 15000/5000 MS (Java/Others)Me ...