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本身的我就不写了,因为比 ...
随机推荐
- MDK中的调试脚本分析
准备写一个简单的裸机程序放mini2440里面跑,看到芯片手册有2中启动方式,1.从Nor Flash启动 2.从Nand Flash中启动.断断续续弄了几天始终无法烧录进去,想起平时自己工作中调试程 ...
- 敏捷冲刺Day2
一. 每日会议 1. 照片 2. 昨日完成工作 网页设计与实现的完善 服务器的搭建前期--申请域名 激活域名 搭建服务器 分析接下来的任务与进度 总结前两天的工作 对产品的进一步展望 3. 今日完成工 ...
- AMH面板命令操作大全
LNMP面板 - AMH 命令使用nginx篇 » SSH Nginx1) 有步骤提示操作: ssh执行命令: amh nginx然后选择对应选项进行操作. 2) 或直接操作: 启动Nginx: am ...
- tracert的应用
tracert IP //检查网络各个节点路由情况: 如果是在10个路有点之内访问到了该站点,说明访问速度良好,若是在10~15之间,说明站点访问状况就一般了. ipconfig /flushdns ...
- 导入导出SQL数据库
在需要导出的数据库名上右键,选择转储SQL-数据和结构 在需要导入的连接中新建相同名称的数据库,右键选择运行SQL文件,即可将数据库数据转储到新的数据库中
- Delphi实现在数据库中存取图像
向窗体上添加一个TListBox组件.一个TImage组件和一个TTable组件,设计完成的主界面如图1所示. 图1 主界面 本系统中需要设计一个新的基于Paradox 7的数据库Image.db,图 ...
- 【数据库】各种主流 SQLServer 迁移到 MySQL 工具对比
在部署前期,首要任务就是考虑如何快速把基于 SQL Server 数据库的应用程序移植到阿里云的 MySQL 数据库.由于程序是基于 O/R mapping 编写,并且数据库中没有使用存储过程.用户函 ...
- ismember matlab
ismember 判断A中的元素在B中有没有出现 LIA = ismember(A,B) for arrays A and B returns an array of the same size as ...
- BZOJ 2306 幸福路径(DP)
题解来源:http://www.cnblogs.com/jianglangcaijin/p/3799494.html 最后必然是走了一条链,或者是一个环(一直绕),或者是一条链加一个环.设f[i][j ...
- python的if语句、while循环、for循环
if语句 计算机又被称作电脑,意指计算机可以像人脑一样,根据周围环境条件(即expession)的变化做出不同的反应(即执行代码)if语句就是来控制计算机实现这一功能 语法: 1.单分支,单个条件判断 ...