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本身的我就不写了,因为比 ...
随机推荐
- 理解windows模型
同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.按照这个定义,其实绝大多数函数都是同步调用(例如sin, isdigit等).但是一般而言,我们在说同步.异步的时候,特指 ...
- CentOS/Linux 开放80、8080端口或者开放某个端口
装载系统的时候只开启了22端口.结果再装完Nginx+php+mysql 后不能访问网站. iptables -L -n 查看防火墙设置发现没开启80端口 由于Linux防火墙默认是关闭的.可以用两种 ...
- 载入其他同名源文件导致vs编译错误
今天下午工程编译的时候总是通不过,提示1,某个类没有某个成员,可是我去该类的头文件下查看,确实包括了这个成员啊.2,没有某个类,可是我明明定义了的. 检查了好久才发现 原来是,我打开了其他工程下的某一 ...
- [剑指Offer] 65.矩阵中的路径
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...
- [C/C++] 原码、反码、补码问题
正确答案:D 解析: C语言中变量以补码形式存放在内存中,正数的补码与原码相同,负数求补码方式为(符号位不变,其余各位取反,最后末尾加1): 32位机器:int 32位,short 16位. x = ...
- 【bzoj2091】[Poi2010]The Minima Game dp
题目描述 给出N个正整数,AB两个人轮流取数,A先取.每次可以取任意多个数,直到N个数都被取走.每次获得的得分为取的数中的最小值,A和B的策略都是尽可能使得自己的得分减去对手的得分更大.在这样的情况下 ...
- 【刷题】SPOJ 1812 LCS2 - Longest Common Substring II
A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is the s ...
- [洛谷P5166]xtq的口令
题目大意:给出一张有向图,保证任何时候边都是从编号大的向编号小连.两个操作: $1\;l\;r:$表示若编号在区间$[l,r]$内的点被染色了,问至少还需要染多少个点才可以使得整张图被染色.一个点会被 ...
- BZOJ1101 & 洛谷3455:[POI2007]ZAP——题解
https://www.luogu.org/problemnew/show/3455#sub http://www.lydsy.com/JudgeOnline/problem.php?id=1101 ...
- Leetcode中字符串总结
本文是个人对LeetCode中字符串类型题目的总结,纯属个人感悟,若有不妥的地方,欢迎指出. 一.有关数字 1.数转换 题Interger to roman和Roman to integer这两题是罗 ...