MyBatis 系列五 之 关联映射
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 系列五 之 关联映射的更多相关文章
- (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射
http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...
- Mybatis系列(四)映射文件
转自:https://blog.csdn.net/chris_mao/article/details/48811507 Mybatis的真正强大,在于她对SQL的映射,这也是她吸引人的地方.实现相同的 ...
- myBatis系列之四:关联数据的查询
myBatis系列之三:增删改查是基于单表的查询,如果联表查询,返回的是复合对象,需要用association关键字来处理. 如User发表Article,每个用户可以发表多个Article,他们之间 ...
- Mybatis(四)关联映射
一. Mybatis关联映射 1 讲数据库中关联关系,主键表与外键表 一对多,多对一,主键表表示一 与外键表表示多 学生与学校的关系,工人与工厂,人员与部门的关系,.... 多 一 ...
- 1.4(Mybatis学习笔记)关联映射
一.一对一 mybatis处理一对一主要通过<resultMap>中的<association>元素来处理. <association>元素主要使用方方式有两种: ...
- 深入浅出Mybatis系列五-TypeHandler简介及配置(mybatis源码篇)
注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(四)---配置详解之typeAliase ...
- MyBatis 系列五 之 延迟加载、一级缓存、二级缓存设置
MyBatis的延迟加载.一级缓存.二级缓存设置 首先我们必须分清延迟加载的适用对象 延迟加载 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的se ...
- mybatis系列笔记(4)---输入输出映射
输入输出映射 通过parameterType制定输入参数类型 类型可以是简单类型(int String)也可以是POJO本身 或者包装类 1输入映射 关于输入简单类型和pojo本身的我就不写了,因为比 ...
随机推荐
- 转 【.NET平台下使用MongoDB入门教程】
目录 一.了解MongoDB 二.MongoDB特点 三.安装及常用命令 3.1 下载安装 3.2 启动服务器 3.3 常用操作 3.4 其他命令 3.5 做成windows服务 四.批处理程序开启M ...
- PAT 1052 卖个萌
https://pintia.cn/problem-sets/994805260223102976/problems/994805273883951104 萌萌哒表情符号通常由“手”.“眼”.“口”三 ...
- BAT批处理(六)
字符串处理 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理功能有:截取字符串内容.替换字符串特定字段.合并字符串.扩充字符串等功能.下面对这 ...
- 【数据库】Sql Server 2008完全卸载方法(其他版本类似)
本文介绍如何卸载 Microsoft SQL Server 2008的方法.当您按照本文中的步骤时,您还准备系统以便可以重新安装 SQL Server 2008版本 一. SQL2008卸载. ...
- BZOJ 1296 粉刷匠(分组背包套DP)
刚开始往网络流的方向想.建不出图... 因为每次只能对一行进行染色.每一行都是独立的. 对于每一行,因为格子只能染一次,所以可以发现这是一个多阶段决策问题,这个决策就是当前格子染0还是染1. 令dp[ ...
- BZOJ 1076 奖励关(状压期望DP)
当前得分期望=(上一轮得分期望+这一轮得分)/m dp[i,j]:第i轮拿的物品方案为j的最优得分期望 如果我们正着去做,会出现从不合法状态(比如前i个根本无法达到j这种方案),所以从后向前推 如果当 ...
- BZOJ3922 Karin的弹幕 【线段树】
题目链接 BZOJ3922 题解 考虑暴力,修改\(O(1)\),查询\(O(\frac{n}{d})\) 考虑线段树,如果对每种差值建一棵线段树,修改\(O(nlogn)\),查询\(O(logn) ...
- UVA.122 Trees on the level(二叉树 BFS)
UVA.122 Trees on the level(二叉树 BFS) 题意分析 给出节点的关系,按照层序遍历一次输出节点的值,若树不完整,则输出not complete 代码总览 #include ...
- bzoj2144: 跳跳棋(二分/倍增)
思维好题! 可以发现如果中间的点要跳到两边有两种情况,两边的点要跳到中间最多只有一种情况. 我们用一个节点表示一种状态,那么两边跳到中间的状态就是当前点的父亲,中间的点跳到两边的状态就是这个点的两个儿 ...
- oracle-java7-installer安装java失败之后的处理
最开始尝试使用installer安装jdk7,但是未能进行完整,之后每次安装软件都会报错,说oracle-java7-installer处有错误,查得如下解决办法: sudo rm /var/lib/ ...