上一节,已经把实体类和配置文件都写过了,这节课直接添加几个方法吧

在DeptMapper.xml文件中添加

<!-- 多表查询(1对多) ,通过部门编号,查询出部门所在的员工姓名,部门名,部门编号 -->
<select id="selectByDeptno" resultMap="deptResult">
select
ename,dept.deptno,dname
from dept join emp
on dept.deptno=emp.deptno
where dept.deptno=#{deptno}
</select>
<!-- one 方 -->
<resultMap type="Dept" id="deptResult">
<!-- id指定主键的相关信息(列名、属性名) -->
<id property="deptno" column="deptno" />
<!-- result定义除了主键列之外的其他字段 -->
<result property="dname" column="dname" />
<collection property="emps" ofType="Emp" resultMap="empResult"
foreignColumn="deptno" />
</resultMap>
<!-- many方 -->
<resultMap id="empResult" type="Emp">
<id property="empno" column="empno" />
<result property="ename" column="ename" />
</resultMap> <!--一对一查询 -->
<!-- 通过员工编号,查询该员工姓名、所在部门名称 -->
<select id="selectByEmpno" resultMap="empResult1">
select
ename,dept.deptno,dname
from
emp join dept
on emp.deptno=dept.deptno
where emp.empno=#{empno}
</select>
<resultMap id="empResult1" type="Emp">
<id property="empno" column="empno" />
<result property="ename" column="ename" />
<association property="dept" javaType="Dept"
foreignColumn="deptno" resultMap="deptResult1"></association>
</resultMap>
<resultMap id="deptResult1" type="Dept">
<!-- id指定主键的相关信息(列名、属性名) -->
<id property="deptno" column="deptno" />
<!-- result定义除了主键列之外的其他字段 -->
<result property="dname" column="dname" />
</resultMap>

2. mapper接口

public interface DeptMapper {
public Dept selectByDeptno(int deptno);
public Emp selectByEmpno(int empno);
}

3.测试方法

public class DeptTest {
public static void main(String[] args) throws IOException {
// 指定mybatis配置文件路径和文件名
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
// session.selectOne(配置文件中namespace.id,传入参数的值)
//通过接口,调用方法(接口名和namespace名称保持一致,id和方法名保持一致)
DeptMapper mapper = session.getMapper(DeptMapper.class); //一对多查询
Dept dept=mapper.selectByDeptno(10);
System.out.println(dept.getDeptno()+dept.getLoc()+dept.getDname());
List<Emp> list=dept.getEmps();
for (Emp emp : list) {
System.out.println(emp.getEname());
}
//一对一查询
Emp emp=mapper.selectByEmpno(7499);
System.out.println("部门编号:"+emp.getDept().getDeptno()+"部门名字:"+emp.getDept().getDname()+"员工名字:"+emp.getEname());
}
} finally {
session.close();
} }
}

mybatis总结(三)之多表查询的更多相关文章

  1. mybatis进阶案例之多表查询

    mybatis进阶案例之多表查询 一.mybatis中表之间的关系 在数据库中,实体型之间的关系主要有如下几种: 1.一对一 如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之 ...

  2. Mybatis源码分析--关联表查询及延迟加载原理(二)

    在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...

  3. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引

    一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...

  4. Mybatis学习笔记之---多表查询(1)

    Mybatis多表查询(1) (一)举例(用户和账户) 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) (二)步骤 1.建立两张表:用户表,账户表,让用户表和账户表之 ...

  5. Mybatis学习笔记之---多表查询(2)

    Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...

  6. mybatis深入理解(八)-----关联表查询

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

  7. T-SQL查询语句(三):多表查询

    SQL查询语句<三>:多表查询 (也叫连接查询,此处为基于两个表的连接查询)如果一个查询需要对多个表进行操作就称为连接查询,连接查询的结果集或结果称为表之间的连接.连接查询实际上是通过各个 ...

  8. MyBatis学习总结——实现关联表查询(转)

    原文链接:孤傲苍狼 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关 ...

  9. sql学习笔记(三)—— 联表查询

    上篇写了一些sql查询的知识,这篇接着写一下有关联表查询的知识. 既然是联表查询,那肯定得多个表啊,所以,我们先创建一个教师表,表名为 teacher,并且向表中插入数据. 准备工作: 创建表语句: ...

  10. mybatis学习 十二 多表查询

    Mybatis 实现多表查询方式: (1)业务装配.对两个表编写单表查询语句,在业务(Service)把查询的两个结果进行关联. (2)使用Auto Mapping特性,在实现两表联合查询时通过别名完 ...

随机推荐

  1. 【Redis】redis 五种数据结构详解(string,list,set,zset,hash)

    redis 五种数据结构详解(string,list,set,zset,hash) Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存 ...

  2. Linux常用命令整理(脑图)

  3. Windows2008 R2下,应用程序池 'XXXXXXXX' 被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误。

    转:http://www.cnblogs.com/freeton/archive/2012/08/28/2660585.html http://www.hack001.com/post/151

  4. FFmpeg音视频同步示例

    原文地址:https://my.oschina.net/u/555002/blog/79324 前面整个的一段时间,我们有了一个几乎无用的电影播放器.当然,它能播放视频,也能播放音频,但是它还不能被称 ...

  5. 帧率(FPS)计算的六种方法总结

    原文地址:http://blog.csdn.net/u012494876/article/details/53368164 帧率(FPS)计算是游戏编程中常见的一个话题.大体来说,总共有如下六种方法: ...

  6. C#: 数字经纬度和度分秒经纬度间的转换

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  7. 用sp_lock诊断SQL Sever的死锁问题

    找出什么被锁定了 系统的反应迟缓意味着你应该做一些调查了.你的查找最好从测定系统发生锁定的数量和频率开始.如果你的系统环境处理事务性很高的话,这样各个应用程序争夺资源就会很常见,从而引起锁定.解决这些 ...

  8. C# ManualResetEvent

    文章转载自:C# ManualResetEvent ManualResetEvent被用于在两个或多个线程间进行线程信号发送. 多个线程可以通过调用ManualResetEvent对象的WaitOne ...

  9. fatfs文件系统f_lseek追加文件

    http://home.eeworld.com.cn/my/space-uid-430378-blogid-74720.html 这个时候我以为读出的数据应该是stm32f107学习!!!文件系统学习 ...

  10. 如果你写PHP, 请多注意自己是否有良好的习惯

    如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍. $row['id'] 的速度是$row[id]的7倍. echo 比 print 快,并且使用echo的多重参数 ...