MyBatis 系列五 之 关联映射

一对多的关联映射

一对多关联查询多表数据

1.1在MyBatis映射文件中做如下配置

<!--一对多单向的连接两表的查询-->
<resultMap type="Dept" id="deptMapper">
<id property="deptNo" column="deptNo"/>
<result property="deptName" column="deptName"/>
<collection property="emps" ofType="Emp">
<id property="empNo" column="empNo"/>
<result property="empName" column="empName"/>
</collection>
</resultMap>
<sql id="columns">
dept.deptNo,deptName,empNo,empName
</sql> <select id="findDeptInfoById" resultMap="deptMapper">
select <include refid="columns"/> from dept,emp
where dept.deptNo=emp.deptNo and dept.deptNo=#{deptNo} </select>

1.2在接口类中定义与映射文件查询语句的id值相同的方法名

package cn.hmy.dao;

import cn.hmy.entity.Dept;

public interface DeptDao {
//根据编号查询部门信息
public Dept findDeptInfoById(Dept dept); }

1.3在测试类中书写一下代码进行测试

package cn.hmy.test;

import java.io.IOException;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test; import cn.hmy.dao.DeptDao;
import cn.hmy.entity.Dept;
import cn.hmy.util.MyBatisUtil; public class MyTest {
DeptDao deptDao;
@Before
public void myBefore(){
SqlSession session = MyBatisUtil.getSession();
deptDao = session.getMapper(DeptDao.class);
} /**
* 根据编号查找部门信息
* @throws IOException
*/
@Test
public void findDeptInfoById() throws IOException{
Dept dept=new Dept();
dept.setDeptNo(3);
Dept dept2 = deptDao.findDeptInfoById(dept);
System.out.println(dept2); } }

一对多的单张表的查询

1.1在MyBatis的映射文件中配置如下文件

<!--一对多单向的单张表的查询  -->
<select id="selectEmpByDeptNo" resultType="Emp">
select empNo,empName from Emp where deptNo=#{deptNo}
</select>
<sql id="columns">
deptNo,deptName
</sql>
<resultMap type="Dept" id="deptMapper">
<id property="deptNo" column="deptNo"/>
<result property="deptName" column="deptName"/>
<collection property="emps" ofType="Emp"
select="selectEmpByDeptNo"
column="deptNo"
/>
</resultMap> <select id="findDeptInfoById" resultMap="deptMapper">
select <include refid="columns"/> from Dept
where deptNo=#{deptNo}
</select>

1.2在接口类中定义与映射文件查询语句的id值相同的方法名

1.3在测试类中书写一下代码进行测试

均如上

多对一的关联映射

多对一多表查询的配置

1.1在MyBatis的映射文件中,配置如下信息

<!-- 一对多单向的连接两表的查询 -->
<resultMap type="Emp" id="empMapper">
<id property="empNo" column="empNo"/>
<result property="empName" column="empName"/>
<association property="dept" javaType="Dept">
<id property="deptNo" column="deptNo"/>
<result property="deptName" column="deptName"/>
</association>
</resultMap>
<sql id="columns">
dept.deptNo,deptName,empNo,empName
</sql> <select id="findEmpById" resultMap="empMapper">
select <include refid="columns"/> from dept,emp
where dept.deptNo=emp.deptNo and empNo=#{empNo} </select>

1.2在接口类中定义一个和映射文件的查询语句的id值相同的方法名

package cn.hmy.dao;

import cn.hmy.entity.Emp;

public interface EmpDao {
//根据员工编号查找员工信息
public Emp findEmpById(Emp emp); }

1.3在测试类中书写如下代码进行测试

package cn.hmy.test;

import java.io.IOException;
import java.util.List; import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test; import cn.hmy.dao.EmpDao;
import cn.hmy.entity.Dept;
import cn.hmy.entity.Emp;
import cn.hmy.util.MyBatisUtil; public class MyTest {
EmpDao empDao;
@Before
public void myBefore(){
SqlSession session = MyBatisUtil.getSession();
empDao = session.getMapper(EmpDao.class);
} /**
* 根据员工编号查找员工信息
* @throws IOException
*/
@Test
public void findEmpById() throws IOException{
Emp emp=new Emp();
emp.setEmpNo(2);
Emp emp2 = empDao.findEmpById(emp);
System.out.println(emp2); } }

多对一的单表的查询配置

1.1在MyBatis的映射文件中配置如下信息

<!-- 多对一单向的连接单表的查询 -->
<select id="selectDeptInfoBydeptNo" resultType="Dept">
select deptNo,deptName from dept where deptNo=#{deptNo}
</select> <resultMap type="Emp" id="empMapper">
<id property="empNo" column="empNo"/>
<result property="empName" column="empName"/>
<association property="dept" javaType="Dept"
select="selectDeptInfoBydeptNo"
column="deptNo"
/>
</resultMap>
<sql id="columns">
empNo,empName,deptNo
</sql> <select id="findEmpById" resultMap="empMapper">
select <include refid="columns"/> from emp
where empNo=#{empNo} </select>

1.2在接口类中定义一个和映射文件的查询语句的id值相同的方法名

1.3在测试类中书写如下代码进行测试

代码同上

MyBatis 系列五 之 关联映射的更多相关文章

  1. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  2. SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射

    前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...

  3. Mybatis系列(四)映射文件

    转自:https://blog.csdn.net/chris_mao/article/details/48811507 Mybatis的真正强大,在于她对SQL的映射,这也是她吸引人的地方.实现相同的 ...

  4. myBatis系列之四:关联数据的查询

    myBatis系列之三:增删改查是基于单表的查询,如果联表查询,返回的是复合对象,需要用association关键字来处理. 如User发表Article,每个用户可以发表多个Article,他们之间 ...

  5. Mybatis(四)关联映射

    一. Mybatis关联映射 1 讲数据库中关联关系,主键表与外键表 一对多,多对一,主键表表示一 与外键表表示多 学生与学校的关系,工人与工厂,人员与部门的关系,.... 多        一    ...

  6. 1.4(Mybatis学习笔记)关联映射

    一.一对一 mybatis处理一对一主要通过<resultMap>中的<association>元素来处理. <association>元素主要使用方方式有两种: ...

  7. 深入浅出Mybatis系列五-TypeHandler简介及配置(mybatis源码篇)

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(四)---配置详解之typeAliase ...

  8. MyBatis 系列五 之 延迟加载、一级缓存、二级缓存设置

    MyBatis的延迟加载.一级缓存.二级缓存设置 首先我们必须分清延迟加载的适用对象 延迟加载 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的se ...

  9. mybatis系列笔记(4)---输入输出映射

    输入输出映射 通过parameterType制定输入参数类型 类型可以是简单类型(int String)也可以是POJO本身 或者包装类 1输入映射 关于输入简单类型和pojo本身的我就不写了,因为比 ...

随机推荐

  1. 转 【.NET平台下使用MongoDB入门教程】

    目录 一.了解MongoDB 二.MongoDB特点 三.安装及常用命令 3.1 下载安装 3.2 启动服务器 3.3 常用操作 3.4 其他命令 3.5 做成windows服务 四.批处理程序开启M ...

  2. PAT 1052 卖个萌

    https://pintia.cn/problem-sets/994805260223102976/problems/994805273883951104 萌萌哒表情符号通常由“手”.“眼”.“口”三 ...

  3. BAT批处理(六)

    字符串处理 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理功能有:截取字符串内容.替换字符串特定字段.合并字符串.扩充字符串等功能.下面对这 ...

  4. 【数据库】Sql Server 2008完全卸载方法(其他版本类似)

    本文介绍如何卸载 Microsoft SQL Server 2008的方法.当您按照本文中的步骤时,您还准备系统以便可以重新安装 SQL Server 2008版本 一.    SQL2008卸载. ...

  5. BZOJ 1296 粉刷匠(分组背包套DP)

    刚开始往网络流的方向想.建不出图... 因为每次只能对一行进行染色.每一行都是独立的. 对于每一行,因为格子只能染一次,所以可以发现这是一个多阶段决策问题,这个决策就是当前格子染0还是染1. 令dp[ ...

  6. BZOJ 1076 奖励关(状压期望DP)

    当前得分期望=(上一轮得分期望+这一轮得分)/m dp[i,j]:第i轮拿的物品方案为j的最优得分期望 如果我们正着去做,会出现从不合法状态(比如前i个根本无法达到j这种方案),所以从后向前推 如果当 ...

  7. BZOJ3922 Karin的弹幕 【线段树】

    题目链接 BZOJ3922 题解 考虑暴力,修改\(O(1)\),查询\(O(\frac{n}{d})\) 考虑线段树,如果对每种差值建一棵线段树,修改\(O(nlogn)\),查询\(O(logn) ...

  8. UVA.122 Trees on the level(二叉树 BFS)

    UVA.122 Trees on the level(二叉树 BFS) 题意分析 给出节点的关系,按照层序遍历一次输出节点的值,若树不完整,则输出not complete 代码总览 #include ...

  9. bzoj2144: 跳跳棋(二分/倍增)

    思维好题! 可以发现如果中间的点要跳到两边有两种情况,两边的点要跳到中间最多只有一种情况. 我们用一个节点表示一种状态,那么两边跳到中间的状态就是当前点的父亲,中间的点跳到两边的状态就是这个点的两个儿 ...

  10. oracle-java7-installer安装java失败之后的处理

    最开始尝试使用installer安装jdk7,但是未能进行完整,之后每次安装软件都会报错,说oracle-java7-installer处有错误,查得如下解决办法: sudo rm /var/lib/ ...